Kompilace

GCC

Toto je základní varianta pro použití v učebnách.

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
Seznam je průběžně doplňován. Další balíčky můžete navrhnou svému cvičícímu.

GCC on Fedora

Na systému Fedora je k dispozici kompilátor

sudo dnf install arm-linux-gnu-gcc
ale 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-root
Kompatibilita mezi verzemi knihovny a kompilátoru nemusí být zaručená.

GCC on Nix

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.

GCC pro Apple MAC OS

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ý.

Zig cc / Clang

Doporučeno pro macOS a Windows

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++).

Instalace

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.

Použití

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

Další informace

courses/b35apo/documentation/mz_apo-howto/compilation.txt · Last modified: 2025/05/23 15:43 by pisa