Проекты на основе WrmOS могут быть собраны любым тулчейном, основанном на GCC. Используемый тулчейн определяется в конфигурационном файле проекта. Поскольку WrmOS спроектирована для встраимых проектов, эта статье описывает как получить кроссплатформенные тулчейны.
Существует 2 способа получить тулчейн:
- загрузить собранный тулчейн;
- собрать тулчейн из исходников.
Содержание 1. Загрузка тулчейнов 2. Сборка тулчейнов из исходников 2. Сборка libm из исходников
1. Загрузка тулчейнов [наверх]
- Загрузить архив с собранным тулчейном:
- Извлечь содержимое архива и переместить его в директорию для установки (например ~/toolchain/).
- Добавить путь к тулчейну в своё окружение (см. шаг 2.7 ниже в пошаговом руководстве).
2. Сборка тулчейнов из исходников [up]
Наиболее простой способ получить кроссплатформенный тулчейн - это использовать проект Buildroot. Ниже приведено пошаговое руководство как загрузить и собрать тулчейн. Это руководство общее для всех архитектур процессора. Различия отмечены дополнительно. При этом слово $ARCH должно быть изменено на целевую архитектуру.
Пошаговая инструкция
2.1. Клонировать git-репозиторий Buildroot:
git clone git://git.buildroot.net/buildroot cd buildroot
2.2. Переключить состояние репозитория на последний релиз (используйте "git tag" чтобы увидеть список тагов):
git checkout 2018.02.2
2.3. Выбрать базовую конфигурацию (этот шаг архитектуро-зависимый):
SPARCv8: make qemu_sparc_ss10_defconfig ARM: make qemu_arm_vexpress_defconfig x86: make qemu_x86_defconfig x86_64: make qemu_x86_64_defconfig
2.4. Настроить конфигурацию:
make menuconfig Build options --> libraries --> both static and shared Toolchain --> Enable WCHAR support Toolchain --> GCC compiler Version --> gcc 7.x Toolchain --> Enable C++ support --> on Toolchain --> Enable compiler link-time-optimization support --> on Toolchain --> Build cross gdb for the host --> on Target packages --> Libraries --> Other --> boost --> on Target packages --> Libraries --> Other --> boost-filesystem --> on Target packages --> Libraries --> Other --> boost-system --> on
2.5. Запустить сборку (это может занять несколько минут):
make toolchain host-gdb boost
2.6. Скопировать рузультат сборки в директорию для установки (например ~/toolchains/):
# ARCH = sparc | arm | i686 | x86_64 cp -r output/host/ ~/toolchains/$ARCH-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0
2.7. Добавить путь к тулчейну в своё окружение:
# ARCH = sparc | arm | i686 | x86_64 vi ~/.bashrc a) add line "PATH=$PATH:~/toolchains/$ARCH-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/usr/bin" b) exit from vi source ~/.bashrc
2.8. Проверить установку:
# ARCH = sparc | arm | i686 | x86_64 $ARCH-linux-gcc --version $ARCH-linux-gcc.br_real (Buildroot 2018.02.2) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Всё готово. Сейчас вы можете использовать "gccprefix = $ARCH-linux-" в своеём конфигурационном файле проекта.
Чтобы пересобрать тулчейн для другой процессорной архитектуре необходимо выполнить:
- make clean
- go to step 2.3.
Краткая инструкция
1. git clone git://git.buildroot.net/buildroot 2. cd buildroot 3. git checkout 2018.02.2 4. sparcv8: make qemu_sparc_ss10_defconfig arm: make qemu_arm_vexpress_defconfig x86: make qemu_x86_defconfig x86_64: make qemu_x86_64_defconfig 5. make menuconfig Build options --> libraries --> both static and shared Toolchain --> Enable WCHAR support Toolchain --> GCC compiler Version --> gcc 7.x Toolchain --> Enable C++ support --> on Toolchain --> Enable compiler link-time-optimization support --> on Toolchain --> Build cross gdb for the host --> on Target packages --> Libraries --> Other --> boost --> on Target packages --> Libraries --> Other --> boost-filesystem --> on Target packages --> Libraries --> Other --> boost-system --> on 6. make toolchain host-gdb boost 7. # install sparcv8: cp -r output/host/ ~/toolchains/sparc-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 arm: cp -r output/host/ ~/toolchains/arm-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 x86: cp -r output/host/ ~/toolchains/i686-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 x86_64: cp -r output/host/ ~/toolchains/x86_64-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 8. # add to ~/.bashrc sparcv8: PATH=~/toolchains/sparc-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/usr/bin:$PATH arm: PATH=~/toolchains/arm-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/usr/bin:$PATH x86: PATH=~/toolchains/i686-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/usr/bin:$PATH x86_64: PATH=~/toolchains/x86_64-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/usr/bin:$PATH 9. source ~/.bashrc # NOTE: to re-build toolchain for other processor architecture do: # a) make clean # b) go to step 4
3. Сборка libm из исходников [наверх]
Ядро WrmOS и системное ПО (sigma0, alpha) не нуждаются в библиотеке libm. Однако, если вым необходимо линковаться с libm, пожалуйста, прочтите заметки ниже.
К сожалению, последнии версии uClibc переместили содержимое libm в libc. Это не подходит для кросс-компиляции для WrmOS. Чтобы получить отдельную libm, необходимо собрать предыдущую версию uClibc (buildroot 16.08.1 has uClibc version 1.0.17). Ниже приведено пошаговое руководство как загрузить и собрать libm. Это руководство общее для всех архитектур процессора. Различия отмечены дополнительно. При этом слово $ARCH должно быть изменено на целевую архитектуру.
Пошаговая инструкция
3.1. Клонировать git репозиторий Buildroot:
git clone git://git.buildroot.net/buildroot cd buildroot
Если вы уже имеете клонированный репозиторий, то выполните в нём:
make clean
3.2. Переклчите состояние репозитория на тэг 2016.08.1:
git checkout 2016.08.1
3.3. Выберите конфигурацию по умолчанию, чтобы базироваться на ней (this step is architecture depended):
SPARCv8: make qemu_sparc_ss10_defconfig ARM: make qemu_arm_vexpress_defconfig x86: make qemu_x86_defconfig x86_64: make qemu_x86_64_defconfig
3.4. Запустите сборку (это может занять несколько минут):
make toolchain
3.5. Сопируйте результат в установочную директорию (например ~/toolchains/):
# ARCH = sparc | arm | i686 | x86_64 cp output/build/uclibc-1.0.17/lib/libm.a ~/toolchains/$ARCH-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/$ARCH_uclibc-1.0.17_libm.a cd ~/toolchains/$ARCH-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 ln -s $ARCH_uclibc-1.0.17_libm.a libm.a cd -
3.6. Использование libm:
Чтобы указать libm в мэйкфайле при сборе WrmOS исползуйте следующий путь:
$(shell $(gccprefix)gcc -print-sysroot)../../libm.a
Чтобы пересобрать libm для дугой процессорной архитектуры выполните:
- make clean
- go to step 3.3.
Краткая инструкция
1. git clone git://git.buildroot.net/buildroot 2. cd buildroot 3. git checkout 2016.08.1 4. sparcv8: make qemu_sparc_ss10_defconfig arm: make qemu_arm_vexpress_defconfig x86: make qemu_x86_defconfig x86_64: make qemu_x86_64_defconfig 5. make toolchain 6. # install sparcv8: cp output/build/uclibc-1.0.17/lib/libm.a ~/toolchains/sparc-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/sparc_uclibc-1.0.17_libm.a cd ~/toolchains/sparc-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 ln -s sparc_uclibc-1.0.17_libm.a libm.a cd - arm: cp output/build/uclibc-1.0.17/lib/libm.a ~/toolchains/arm-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/arm_uclibc-1.0.17_libm.a cd ~/toolchains/arm-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 ln -s arm_uclibc-1.0.17_libm.a libm.a cd - x86: cp output/build/uclibc-1.0.17/lib/libm.a ~/toolchains/i686-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/i686-uclibc-1.0.17_libm.a cd ~/toolchains/i686-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 ln -s i686_uclibc-1.0.17_libm.a libm.a cd - x86_64: cp output/build/uclibc-1.0.17/lib/libm.a ~/toolchains/x86_64-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0/x86_64_uclibc-1.0.17_libm.a cd ~/toolchains/x86_64-buildroot-linux-uclibc_br2018.02.2_gcc7.3.0 ln -s x86_64_uclibc-1.0.17_libm.a libm.a cd - 8. # using in WrmOS Makefile's: $(shell $(gccprefix)gcc -print-sysroot)../../libm.a # NOTE: to re-build libm for other processor architecture do: # a) make clean # b) go to step 4
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии