Search
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.
arm-linux-gnueabihf-gcc
crossbuild-essential-armhf
arm-linux-gnueabihf-{gcc,gdb,glibc,binutils}
arm-linux-gnu-gcc
Na systému Fedora je k dispozici kompilátor
sudo dnf install arm-linux-gnu-gcc
/usr/arm-linux-gnu/sys-root
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-root
The Flake file flake.nix for the cross-toolchain build
flake.nix
# 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
# 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ý.
target-libs-arm-linux.tar.gz
/usr/local
/usr/local/bin
arm-linux-gnueabihf-*
/usr/local/arm-linux-gnueabihf
/usr/local/lib/gcc/arm-linux-gnueabihf/12.4.0
bin
/usr/local/libexec/gcc/arm-linux-gnueabihf/12.4.0
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++).
Clang
zig cc
zig cxx
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.
path
Makefile
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
zig cc –target=arm-linux-gnueabihf
arm-linux-gnueabihf-g+ +
zig cxx –target=arm-linux-gnueabihf
`zig cc`: a Powerful Drop-In Replacement for GCC/Clang