From c2eacc104a41b72258f90d00ef7cece82531653e Mon Sep 17 00:00:00 2001 From: danipiza Date: Fri, 5 Jun 2026 11:17:43 +0200 Subject: [PATCH 1/3] Test build with macos-aarch64 CI Signed-off-by: danipiza --- .github/workflows/macos-aarch64-nix.yml | 88 +++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 .github/workflows/macos-aarch64-nix.yml diff --git a/.github/workflows/macos-aarch64-nix.yml b/.github/workflows/macos-aarch64-nix.yml new file mode 100644 index 0000000..afd7b8e --- /dev/null +++ b/.github/workflows/macos-aarch64-nix.yml @@ -0,0 +1,88 @@ +name: macOS aarch64 Nix + +on: + workflow_dispatch: + pull_request: + push: + branches: + - main + - master + +jobs: + build: + name: Build on aarch64-darwin + runs-on: macos-15 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: System diagnostics + run: | + echo "==== uname ====" + uname -a + uname -m + + echo "==== macOS ====" + sw_vers + + echo "==== hardware ====" + sysctl -n machdep.cpu.brand_string || true + sysctl -n hw.memsize || true + + - name: Install Nix + uses: cachix/install-nix-action@v31 + with: + extra_nix_config: | + experimental-features = nix-command flakes + sandbox = false + + - name: Nix diagnostics + run: | + echo "==== nix ====" + nix --version + nix eval --raw --impure --expr 'builtins.currentSystem' + echo + + echo "==== nix flake metadata ====" + nix flake metadata || true + + - name: Compiler diagnostics outside Nix shell + run: | + echo "==== system clang ====" + which clang || true + clang --version || true + which clang++ || true + clang++ --version || true + + - name: Compiler diagnostics inside Nix shell + run: | + nix develop --command bash -lc ' + echo "==== current system ====" + nix eval --raw --impure --expr "builtins.currentSystem" + echo + + echo "==== compiler ====" + echo "CC=$CC" + echo "CXX=$CXX" + echo "NIX_CC=$NIX_CC" + which clang || true + clang --version || true + which clang++ || true + clang++ --version || true + echo + + echo "==== flags/env ====" + echo "NIX_CFLAGS_COMPILE=$NIX_CFLAGS_COMPILE" + echo "NIX_LDFLAGS=$NIX_LDFLAGS" + echo "SDKROOT=$SDKROOT" + echo "MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET" + echo + + echo "==== clang++ include/link search ====" + clang++ -v -x c++ - -fsyntax-only < /dev/null || true + ' + + - name: Build + run: | + nix build -L --show-trace From 5f197ffdf821eda2a72e9f4122fd1d89142dfe6e Mon Sep 17 00:00:00 2001 From: danipiza Date: Fri, 5 Jun 2026 11:22:30 +0200 Subject: [PATCH 2/3] New step Signed-off-by: danipiza --- .github/workflows/macos-aarch64-nix.yml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/workflows/macos-aarch64-nix.yml b/.github/workflows/macos-aarch64-nix.yml index afd7b8e..444b894 100644 --- a/.github/workflows/macos-aarch64-nix.yml +++ b/.github/workflows/macos-aarch64-nix.yml @@ -44,9 +44,6 @@ jobs: nix eval --raw --impure --expr 'builtins.currentSystem' echo - echo "==== nix flake metadata ====" - nix flake metadata || true - - name: Compiler diagnostics outside Nix shell run: | echo "==== system clang ====" @@ -55,9 +52,22 @@ jobs: which clang++ || true clang++ --version || true + - name: Verify Nix flake entrypoint + run: | + if [ ! -f flake.nix ]; then + echo "::error file=flake.nix::This workflow expects a top-level flake.nix so it can run 'nix develop' and 'nix build'." + echo "Add a flake to the repository, or change the workflow to use the repository's actual Nix entrypoint." + exit 1 + fi + + - name: Nix flake metadata + run: | + echo "==== nix flake metadata ====" + nix flake metadata . + - name: Compiler diagnostics inside Nix shell run: | - nix develop --command bash -lc ' + nix develop . --command bash -lc ' echo "==== current system ====" nix eval --raw --impure --expr "builtins.currentSystem" echo @@ -85,4 +95,4 @@ jobs: - name: Build run: | - nix build -L --show-trace + nix build . -L --show-trace From d465e8afed4047c27708f6741b7093c5da43bc9e Mon Sep 17 00:00:00 2001 From: danipiza Date: Fri, 5 Jun 2026 11:40:18 +0200 Subject: [PATCH 3/3] Added flake.nix Signed-off-by: danipiza --- flake.nix | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 flake.nix diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..7b3ea5e --- /dev/null +++ b/flake.nix @@ -0,0 +1,199 @@ +{ + description = "Nix build and development environment for eProsima dev-utils"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + lib = nixpkgs.lib; + systems = [ + "x86_64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + forAllSystems = f: lib.genAttrs systems (system: f system); + mkScope = system: + let + pkgs = import nixpkgs { + inherit system; + }; + llvm = + if pkgs ? llvmPackages_21 then + pkgs.llvmPackages_21 + else + pkgs.llvmPackages_latest; + stdenvForBuild = + if pkgs.stdenv.isDarwin && llvm ? libcxxStdenv then + llvm.libcxxStdenv + else + pkgs.stdenv; + repoVersion = "1.5.2"; + + cmake_utils = stdenvForBuild.mkDerivation { + pname = "cmake_utils"; + version = repoVersion; + src = ./.; + sourceRoot = "source/cmake_utils"; + + nativeBuildInputs = [ + pkgs.cmake + ]; + }; + + py_utils = pkgs.python3Packages.buildPythonPackage { + pname = "py_utils"; + version = repoVersion; + src = ./.; + sourceRoot = "source/py_utils"; + format = "setuptools"; + doCheck = false; + pythonImportsCheck = [ + "py_utils" + ]; + }; + + hasFastDds = + pkgs ? fastcdr + && pkgs ? fastdds + && lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.fastcdr + && lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.fastdds; + + cpp_utils = + if hasFastDds then + stdenvForBuild.mkDerivation { + pname = "cpp_utils"; + version = repoVersion; + src = ./.; + sourceRoot = "source/cpp_utils"; + + nativeBuildInputs = [ + pkgs.cmake + pkgs.ninja + pkgs.pkg-config + ]; + + buildInputs = [ + cmake_utils + pkgs.fastcdr + pkgs.fastdds + ]; + + cmakeFlags = [ + "-DBUILD_TESTS=OFF" + ]; + + doCheck = false; + } + else + null; + + toolchain_probe = stdenvForBuild.mkDerivation { + pname = "dev-utils-toolchain-probe"; + version = repoVersion; + dontUnpack = true; + + buildPhase = '' + cat > toolchain-probe.cpp <<'EOF' + #include + + int main() + { + std::cout << "dev-utils toolchain probe" << std::endl; + return 0; + } + EOF + + $CXX -std=c++17 toolchain-probe.cpp -o toolchain-probe + ''; + + installPhase = '' + mkdir -p "$out/bin" + cp toolchain-probe "$out/bin/" + ''; + }; + + defaultComponents = + [ + cmake_utils + py_utils + toolchain_probe + ] + ++ lib.optionals hasFastDds [ + cpp_utils + ]; + + defaultPackage = pkgs.buildEnv { + name = "dev-utils"; + paths = defaultComponents; + }; + + devShell = (pkgs.mkShell.override { + stdenv = stdenvForBuild; + }) { + inputsFrom = + [ + cmake_utils + py_utils + ] + ++ lib.optionals hasFastDds [ + cpp_utils + ]; + + packages = + [ + pkgs.bashInteractive + pkgs.cmake + pkgs.git + pkgs.ninja + pkgs.pkg-config + pkgs.python3 + toolchain_probe + llvm.clang + ] + ++ lib.optionals (llvm ? libcxx) [ + llvm.libcxx + ] + ++ lib.optionals hasFastDds [ + pkgs.fastcdr + pkgs.fastdds + ]; + + shellHook = '' + export CC="${stdenvForBuild.cc}/bin/cc" + export CXX="${stdenvForBuild.cc}/bin/c++" + + if [ -z "''${DEV_UTILS_CPP_UTILS_AVAILABLE:-}" ]; then + export DEV_UTILS_CPP_UTILS_AVAILABLE="${if hasFastDds then "1" else "0"}" + fi + + if [ "$DEV_UTILS_CPP_UTILS_AVAILABLE" = "0" ]; then + echo "cpp_utils is not included in this Nix environment because nixpkgs does not expose both fastdds and fastcdr on ${system}." + fi + ''; + }; + in + { + inherit devShell; + packages = + { + inherit + cmake_utils + py_utils + toolchain_probe + ; + default = defaultPackage; + } + // lib.optionalAttrs hasFastDds { + inherit cpp_utils; + }; + }; + in + { + packages = forAllSystems (system: (mkScope system).packages); + devShells = forAllSystems (system: { + default = (mkScope system).devShell; + }); + }; +}