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