2022-05-26
Clang для pic32
2022-05-26 13:52Народ на днях задал мне вопрос, нет ли способа пересобрать RetroBSD из исходников на каком-нибудь современном линуксе, типа Ubuntu 22.04, не откатываясь на десять лет назад. Я потыркался маленько, и оказалось, что компилятор для mips32r2 найти не так уж легко. Нет способа просто установить GCC для MIPS из готовых пакетов ни на линуксе, ни на маке. Старые бинарные сборки устарели и на новых MacOS вообще не запускаются. Пытался скомпилировать последний GCC из исходников - валится где-то при сборке runtime библиотеки. Непруха в общем.
Неожиданно обнаружилось, что ситуацию может спасти Clang. Это другой Си компилятор, из проекта LLVM. Оказалось, что стандартный пакет типа clang-14 содержит бэкенд не только для x86-64, но и для кучи других архитектур, включая mips32. Вот полный список.
Неожиданно обнаружилось, что ситуацию может спасти Clang. Это другой Си компилятор, из проекта LLVM. Оказалось, что стандартный пакет типа clang-14 содержит бэкенд не только для x86-64, но и для кучи других архитектур, включая mips32. Вот полный список.
У меня есть в запаснике пример прошивки для pic32. Пришлось повозиться, чтобы поправить его для Clang, но вроде неплохо выходит. Компиляция выглядит следующим образом:$ clang-14 -print-targets
Registered Targets:
aarch64 - AArch64 (little endian)
aarch64_32 - AArch64 (little endian ILP32)
aarch64_be - AArch64 (big endian)
amdgcn - AMD GCN GPUs
arm - ARM
arm64 - ARM64 (little endian)
arm64_32 - ARM64 (little endian ILP32)
armeb - ARM (big endian)
avr - Atmel AVR Microcontroller
bpf - BPF (host endian)
bpfeb - BPF (big endian)
bpfel - BPF (little endian)
hexagon - Hexagon
lanai - Lanai
m68k - Motorola 68000 family
mips - MIPS (32-bit big endian)
mips64 - MIPS (64-bit big endian)
mips64el - MIPS (64-bit little endian)
mipsel - MIPS (32-bit little endian)
msp430 - MSP430 [experimental]
nvptx - NVIDIA PTX 32-bit
nvptx64 - NVIDIA PTX 64-bit
ppc32 - PowerPC 32
ppc32le - PowerPC 32 LE
ppc64 - PowerPC 64
ppc64le - PowerPC 64 LE
r600 - AMD GPUs HD2XXX-HD6XXX
riscv32 - 32-bit RISC-V
riscv64 - 64-bit RISC-V
sparc - Sparc
sparcel - Sparc LE
sparcv9 - Sparc V9
systemz - SystemZ
thumb - Thumb
thumbeb - Thumb (big endian)
ve - VE
wasm32 - WebAssembly 32-bit
wasm64 - WebAssembly 64-bit
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
xcore - XCore
С компилятором разобрались, а теперь стоит большая задача поправить все исходники RetroBSD под него. Нынче Си гораздо более строгий, чем тридцать лет назад. Всяких глупостей не прощает.$ make
/usr/lib/llvm-14/bin/clang -target mipsel -mcpu=mips32r2 -mabi=o32 -mfloat-abi=soft -DPIC32MX7 -c uart.c
/usr/lib/llvm-14/bin/ld.lld -m elf32ltsmip -T using-bootloader.ld -e _start -g uart.o -o uart.elf
/usr/lib/llvm-14/bin/llvm-objcopy -O ihex uart.elf uart.hex
/usr/lib/llvm-14/bin/llvm-objdump --mcpu=mips32r2 -d -S uart.elf > uart.dis
Как показало научное исследование, червяк C.Elegans вполне адекватно реагирует на каннабис.
"Worms get the munchies: the endocannabinoid AEA induces hedonic amplification in C. elegans by modulating the activity of the AWC chemosensory neuron"
"Worms get the munchies: the endocannabinoid AEA induces hedonic amplification in C. elegans by modulating the activity of the AWC chemosensory neuron"
Программисту на заметку
2022-05-26 17:21PlantUML: полезный прибамбас для документирования софта. Да и не только программистам может пригодиться.
Пишем следующий код, кладём в файл репка.uml.

Пишем следующий код, кладём в файл репка.uml.
Превращаем в рисунок:@startuml
!theme vibrant
skinparam ParticipantPadding 5
skinparam BoxPadding 5
autonumber
title Русская народная сказка
actor сказка
participant мышка
participant кошка
participant Жучка
participant внучка
participant бабка
participant дедка
participant репка
сказка -> мышка: выросла репка\nбольшая-пребольшая
мышка -> кошка
кошка -> Жучка
Жучка -> внучка
внучка -> бабка
бабка -> дедка
дедка -> репка: потянули
репка -> дедка: вытянули
дедка -> бабка
бабка -> внучка
внучка -> Жучка
Жучка -> кошка
кошка -> мышка
мышка -> сказка: вытянули репку!
@enduml
Вот такая красота получается.$ plantuml репка.uml
$ open репка.png

Джером Кунен, мой бывший коллега по Wave Computing, написал красивое введение в двоичную плавающую арифметику. Джером - один из авторов стандарта вычислений с плавающей точкой (IEEE 754). Он знает, о чём говорит. :)
Arithmazium
Arithmazium
