From 3f3907b5d18b7ecf8512dae4a929fae10788a4e7 Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Fri, 27 Jun 2025 15:43:22 +0200 Subject: [PATCH] Build: Add nix-based helpers to manage toolchains for FEXLinuxTests The cmake_enable_flt.sh script will automatically install the required cross-toolchains required to build FEXLinuxTests, and it will reconfigure the current build folder appropriately. For advanced uses, a shell can be opened by running `nix-shell FEXLinuxTests/shell.nix`, which will make the toolchain available via environment variables. --- Data/nix/FEXLinuxTests/shell.nix | 35 ++++++++++++++++++++++++++++++++ Data/nix/cmake_enable_flt.sh | 17 ++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 Data/nix/FEXLinuxTests/shell.nix create mode 100755 Data/nix/cmake_enable_flt.sh diff --git a/Data/nix/FEXLinuxTests/shell.nix b/Data/nix/FEXLinuxTests/shell.nix new file mode 100644 index 000000000..7cbf8c195 --- /dev/null +++ b/Data/nix/FEXLinuxTests/shell.nix @@ -0,0 +1,35 @@ +{ pkgs ? import { } }: + +let + pkgsCross32 = pkgs.pkgsCross.gnu32; + pkgsCross64 = pkgs.pkgsCross.gnu64; + + gcc32 = pkgs.writeText "toolchain_nix_gcc_x86_32.txt" '' + set(CMAKE_SYSTEM_PROCESSOR i686) + set(CMAKE_C_COMPILER ${pkgsCross32.buildPackages.gcc}/bin/i686-unknown-linux-gnu-gcc) + set(CMAKE_CXX_COMPILER ${pkgsCross32.buildPackages.gcc}/bin/i686-unknown-linux-gnu-g++) + ''; + + gcc64 = pkgs.writeText "toolchain_nix_gcc_x86_64.txt" '' + set(CMAKE_SYSTEM_PROCESSOR x86_64) + set(CMAKE_C_COMPILER ${pkgsCross64.buildPackages.gcc}/bin/x86_64-unknown-linux-gnu-gcc) + set(CMAKE_CXX_COMPILER ${pkgsCross64.buildPackages.gcc}/bin/x86_64-unknown-linux-gnu-g++) + ''; +in +pkgs.mkShell { + buildInputs = [ + pkgsCross64.buildPackages.clang + pkgsCross32.buildPackages.clang + ]; + + shellHook = '' + if [[ $- == *i* ]]; then + echo "toolchain32: ${gcc32}" + echo "toolchain64: ${gcc64}" + echo "" + echo "Use \$FEX_CMAKE_TOOLCHAINS to configure CMake." + fi + ''; + + FEX_CMAKE_TOOLCHAINS = "-DX86_32_TOOLCHAIN_FILE=${gcc32} -DX86_64_TOOLCHAIN_FILE=${gcc64}"; +} diff --git a/Data/nix/cmake_enable_flt.sh b/Data/nix/cmake_enable_flt.sh new file mode 100755 index 000000000..22077e657 --- /dev/null +++ b/Data/nix/cmake_enable_flt.sh @@ -0,0 +1,17 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i bash FEXLinuxTests/shell.nix + +# Helper script to configure CMake for building FEXLinuxTests. +# Nix is used to install and manage the required cross-toolchains. + +if [ ! -f CMakeCache.txt ] +then + echo "Must be run from a pre-configured CMake build folder" + exit 1 +fi + +# Remove previous build to ensure the new toolchain is applied +rm -rf unittests/FEXLinuxTests + +set -o xtrace +cmake . $FEX_CMAKE_TOOLCHAINS -DBUILD_TESTS=ON -DBUILD_FEX_LINUX_TESTS=ON