DC-SWAT Forum

Полная версия: DreamShell Compilation
Вы просматриваете yпpощеннyю веpсию форума. Пеpейти к полной веpсии.
Компилирую DreamShell, ubuntu 20.04.
Инструкция по компиляции, как я понимаю, устарела.
Здесь уже затык "cp ds/sdk/toolchain/environ.sh environ.sh && cd ../" т.к. файла переменных уже нет, есть ubuntu_build.sh вероятно его нужно запускать.
Выдает ошибку "arm-eabi-gcc: error: unrecognized -mcpu target: arm7di"
Код:
make[5]: Entering directory '/usr/local/dc/kos/kos/kernel/arch/dreamcast/sound/arm'
/opt/toolchains/dc/arm-eabi/bin/arm-eabi-as -mcpu=arm7di --fix-v4bx crt0.s -o crt0.o
/opt/toolchains/dc/arm-eabi/bin/arm-eabi-gcc -mcpu=arm7di -Wall -O2 -fno-strict-aliasing -Wl,--fix-v4bx -Wa,--fix-v4bx  -I /usr/local/dc/kos/kos/kernel/arch/dreamcast/include/dc/sound -c main.c -o main.o
arm-eabi-gcc: error: unrecognized -mcpu target: arm7di
arm-eabi-gcc: note: valid arguments are: arm8 arm810 strongarm strongarm110 fa526 fa626 arm7tdmi arm7tdmi-s arm710t arm720t arm740t arm9 arm9tdmi arm920t arm920 arm922t arm940t ep9312 arm10tdmi arm1020t arm9e arm946e-s arm966e-s arm968e-s arm10e arm1020e arm1022e xscale iwmmxt iwmmxt2 fa606te fa626te fmp626 fa726te arm926ej-s arm1026ej-s arm1136j-s arm1136jf-s arm1176jz-s arm1176jzf-s mpcorenovfp mpcore arm1156t2-s arm1156t2f-s cortex-m1 cortex-m0 cortex-m0plus cortex-m1.small-multiply cortex-m0.small-multiply cortex-m0plus.small-multiply generic-armv7-a cortex-a5 cortex-a7 cortex-a8 cortex-a9 cortex-a12 cortex-a15 cortex-a17 cortex-r4 cortex-r4f cortex-r5 cortex-r7 cortex-r8 cortex-m7 cortex-m4 cortex-m3 marvell-pj4 cortex-a15.cortex-a7 cortex-a17.cortex-a7 cortex-a32 cortex-a35 cortex-a53 cortex-a57 cortex-a72 cortex-a73 exynos-m1 xgene1 cortex-a57.cortex-a53 cortex-a72.cortex-a53 cortex-a73.cortex-a35 cortex-a73.cortex-a53 cortex-a55 cortex-a75 cortex-a76 neoverse-n1 cortex-a75.cortex-a55 cortex-a76.cortex-a55 cortex-m23 cortex-m33 cortex-r52; did you mean ‘arm7tdmi’?
arm-eabi-gcc: error: missing argument to ‘-march=’
make[5]: *** [Makefile:17: main.o] Error 1
make[5]: Leaving directory '/usr/local/dc/kos/kos/kernel/arch/dreamcast/sound/arm'
make[4]: *** [/usr/local/dc/kos/kos/Makefile.rules:45: _dir_arm] Error 2
make[4]: Leaving directory '/usr/local/dc/kos/kos/kernel/arch/dreamcast/sound'
make[3]: *** [/usr/local/dc/kos/kos/Makefile.rules:45: _dir_sound] Error 2
make[3]: Leaving directory '/usr/local/dc/kos/kos/kernel/arch/dreamcast'
make[2]: *** [Makefile:8: all] Error 2
make[2]: Leaving directory '/usr/local/dc/kos/kos/kernel/arch'
make[1]: *** [/usr/local/dc/kos/kos/Makefile.rules:45: _dir_arch] Error 2
make[1]: Leaving directory '/usr/local/dc/kos/kos/kernel'
/bin/sh: 1: exit: Illegal number: -1
make: *** [Makefile:27: all] Error 2
Checking if /usr/local/dc/kos/kos/../kos-ports/SDL is installed and up-to-date...
Building /usr/local/dc/kos/kos/../kos-ports/SDL...
make: Entering directory '/usr/local/dc/kos/kos-ports/SDL'
SDL is not currently installed.
Finished processing dependencies for SDL.
/usr/bin/env: ‘python’: No such file or directory
make: *** [/usr/local/dc/kos/kos/../kos-ports/scripts/validate.mk:9: validate-dist] Error 1
make: Leaving directory '/usr/local/dc/kos/kos-ports/SDL'
Инструкцию недавно обновлял, забыл файл этот похоже. Исправил, попробуй.
С копиляторами пока не понял, какая версия и чем собиралась?
Почти получилось Smile
в файле environ.sh переменной присваивается export KOS_BASE="/usr/local/dc/kos"
и в самом конце файла ${KOS_BASE}/environ_base.sh, но файл environ_base.sh находится по пути "/usr/local/dc/kos/kos"
В файле environ_base.sh вызывается kos-cc, который вызывает /opt/toolchains/dc/sh-elf/bin/sh-elf-gcc, а по инструкции папка "toolchains" еще пуста.
Поторопился Smile Исправил.
А вызываться kos-cc не должен там сразу, да и нету в этом файле вывозов никаких, только переменные вроде.
По инструкции следом идет сборка тулчейна как раз. Правда там arm у тебя не соберется возможно, можно в kos тулчейне собрать если что. Да и вообще никто не мешает их целиком в kos собрать, только версию поменяй на 9.3
Затык опять в том же.
В этом пункте "make && cd ../kos-ports && ./utils/build-all.sh" при сборке kos.
Говорит: нет такой архитектуры arm7di, возможно вы имели виду arm7tdmi.
[Изображение: attachment.php?aid=1007]
Компиляция kos проходит, если изменить в environ_dreamcast.sh последние две переменные с arm7di на arm7tdmi
export DC_ARM_CFLAGS="-mcpu=arm7tdmi -Wall -O2 -fno-strict-aliasing -Wl$
export DC_ARM_AFLAGS="-mcpu=arm7tdmi --fix-v4bx"
Теперь проблема с kos ports, не собираются freetype и opus, решения пока не нашел, логи прикрепил.
Компиляторы под ARM (в AICA он именно DI) собрались как-то коряво. Я не знаю почему они ругаются. Не разбирался еще с этим.
Собери их через kos/utilc/dc-chain, только версию 9.3 выбери. Или забей, для DS тебе они не нужны в общем-то, у меня там лежат собранные драйвера для AICA.
В модулях DS так же можешь отключить AICAOS, там тоже используются эти компиляторы, но тебе его совсем не обязательно собирать. Или собирай как TDMI и не используй результат этой сборки просто Smile

freetype и opus по идее можешь игнорировать, opus не используется, а freetype в DS свой.
Все прошло без затычек через kos/utilc/dc-chain, но на сборке ядра выдал ошибки в коде.
Код:
/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/9.3.0/../../../../sh-elf/bin/ld: ./src/fs/fs.o: in function `InitIDE':
/usr/local/dc/kos/kos/ds/src/fs/fs.c:265: undefined reference to `_g1_ata_max_lba'
/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/9.3.0/../../../../sh-elf/bin/ld: ./src/drivers/sd.o: in function `write_data':
/usr/local/dc/kos/kos/ds/src/drivers/sd.c:403: undefined reference to `_dcache_pref_range'
/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/9.3.0/../../../../sh-elf/bin/ld: ./src/exports.o:(.data.ds_symtab+0x514): undefined reference to `_dcache_alloc_range'
/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/9.3.0/../../../../sh-elf/bin/ld: ./src/exports.o:(.data.ds_symtab+0x51c): undefined reference to `_dcache_pref_range'
/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/9.3.0/../../../../sh-elf/bin/ld: ./src/exports.o:(.data.ds_symtab+0x524): undefined reference to `_dcache_purge_range'
/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/9.3.0/../../../../sh-elf/bin/ld: ./src/exports.o:(.data.ds_symtab+0xb34): undefined reference to `_g1_ata_is_dcio'
/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/9.3.0/../../../../sh-elf/bin/ld: ./src/exports.o:(.data.ds_symtab+0xb3c): undefined reference to `_g1_ata_max_lba'
/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/9.3.0/../../../../sh-elf/bin/ld: ./src/exports.o:(.data.ds_symtab+0xb6c): undefined reference to `_g1_ata_standby'
В гитхабе будет последняя версия ?
После сборки последней версии сам дримшел работает, но не одна игра не запускается.
Игры запускаю с IDE и если заменить файл firmware/isoldr/ide.bin на файл из гитхаба, то все начинает работать.
На гитхабе (firmware/isoldr/ide.bin) лежит версия от 2017 года, судя по хистори с того момента было не мало изменений.
Если собрать самый первый коммит isoldr на старом gcc, то игры работают, все что идет дальше уже не работает.
Ты не накатил патч для KOS поэтому ядро не линкуется, в тулчейне DS это делается автоматом, а вот если через KOS собирать, то руками нужно накатить патч, он лежит здесь под именем kos.diff:
https://github.com/DC-SWAT/DreamShell/tr...in/patches
--------
Будет, когда я или кто-нибудь еще доработает приложение под новый загрузчик, там появились новые параметры, поэтому пока бинарник заменить не могу, но ты сам можешь собрать его. И модуль isoldr тоже нужно обновленный собрать, он уже адаптирован под новый загрузчик. По сути только приложение задерживает это обновление, без него загрузчик будет плохо работать, так как параметры нужные не выставить. Сейчас только через консоль можно их выставить, так как модуль я адаптировал. Я даже не стал выкладывать на форуме последнюю версию, так как хардкодить придется слишком много вариантов параметров и будет целая куча бинарников. Нужно доделать приложение и стороннее в том числе, которое некоторые используют.
URL ссылки