Pro kompilaci pomocí gcc je třeba mít speciální konfiguraci kompilatoru gcc a to arm-linux-gnueabihf-gcc
. V laboratořích a na serveru Postel je tento kompilátor k dispozici.
Binární balíčky | |
---|---|
Debian/Ubuntu | crossbuild-essential-armhf |
ArchLinux | arm-linux-gnueabihf-{gcc,gdb,glibc,binutils} |
Fedora | arm-linux-gnu-gcc + target glibc copy |
Na systému Fedora je k dispozici kompilátor
sudo dnf install arm-linux-gnu-gccale pro jeho použití je nutné nakopírovat knihovny a hlavičkové soubory odpovídající cílovému systému do adresáře
/usr/arm-linux-gnu/sys-root
. Lze to buď přímo z MZ_APO kitů nebo z instalace Debian pro prostředí laboratoří
sudo scp -r cvut_login@postel.felk.cvut.cz:/usr/arm-linux-gnueabihf/include /usr/arm-linux-gnu/sys-root sudo scp -r cvut_login@postel.felk.cvut.cz:/usr/arm-linux-gnueabihf/lib /usr/arm-linux-gnu/sys-rootKompatibilita mezi verzemi knihovny a kompilátoru nemusí být zaručená.
The Flake file flake.nix
for the cross-toolchain build
# flake.nix { inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; }; outputs = {nixpkgs, ...}: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; crossSystem = { config = "armv7l-linux-gnueabihf"; }; }; in { devShells.${system}.default = import ./nix/shell.nix {inherit pkgs;}; }; }
The Shell file nix/shell.nix
for its use
# nix/shell.nix {pkgs, ...}: pkgs.mkShell { buildInputs = [ pkgs.glibc pkgs.glibc.static ]; makeFlags = [ "CC=${pkgs.stdenv.cc.targetPrefix}cc" "CXX=${pkgs.stdenv.cc.targetPrefix}g++" ]; }
Suggested by Šimon Brandner.
Archivy se zkompilovaným GCC kompilátorem pro GNU/Linux ARM-32 Hard Float a příslušné konfigurace jsou k dispozici
https://cmp.felk.cvut.cz/~pisa/apo/mz_apo/macos/
Je potřeba stáhnout archivy a rozbalit z rootu systému, cesty pro vzájemné hledání assembleru z GCC a naopak GCC z linkeru jsou absolutní a na rozdíl od jiných buildů pro Linux, relativní hledání v MAC OS buildech nechodí…
sudo -i cd / tar -xf binutils-arm-linux-gnueabihf_2.44_macos.tar.gz tar -xf gcc-arm-linux-gnueabihf_12.4.0_macos.tar.gz tar -xf target-libs-arm-linux.tar.gz
Archiv target-libs-arm-linux.tar.gz
jsou zkopírované knihovny a hlavičkové soubory z křížového překladače na Debianu 12.
Prefix instalace je /usr/local
, vlastní hlavní spustitelný příkaz kompilátoru a assembleru se umístí do /usr/local/bin
jako arm-linux-gnueabihf-*
. Knihovny, hlavičky a kopie assembleru pro GCC se umístí do /usr/local/arm-linux-gnueabihf
, GCC specifické ARM knihovny a hlavičky do /usr/local/lib/gcc/arm-linux-gnueabihf/12.4.0
a vlastní GCC drivery volané z wrapperů v bin
do /usr/local/libexec/gcc/arm-linux-gnueabihf/12.4.0
. Zatím není otestovaná kompilace C++ programů i když kompilátor je přítomný.
Funkčnost již byla ověřená i na jiném Mac počítači než kde byl řetězec kompilovaný, tak by snad měl být přenositelný.
Kompilátor Clang
umožnuje crosscompilaci bez nutnosti specializovaného compileru, nicméně sám o sobě neneřeší druhotné problémy, jako jsou například základní knihovny. S tím nám pomůže nástroj zig cc
(pro jazyk C), případně zig cxx
(pro C++).
Nejjednodušší variantou je instalace pomocí správce balíčků, která je ale dostupná pouze pro některé systémy. Detaily naleznete zde.
Pokud váš systém není na seznamu, stáhněte si přímo spustitelný soubor (zde) a umístěte jej do zvoleného adresáře v path
. Alternativně můžete v Makefile
použít absolutní cestu ke spustitelnému souboru.
Nahraďte v Makefile
arm-linux-gnueabihf-gcc
za zig cc –target=arm-linux-gnueabihf
a arm-linux-gnueabihf-g+ +
za zig cxx –target=arm-linux-gnueabihf