{ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, ... }@inputs: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; llvmVersion = 22; gccVersion = 16; boostVersion = 191; llvmPackages = pkgs."llvmPackages_${toString llvmVersion}"; libstdcxxGcc = pkgs."gcc${toString gccVersion}".cc; # the unwrapped version! stdenv = pkgs.stdenvAdapters.overrideCC llvmPackages.stdenv (llvmPackages.clang.override { gccForLibs = libstdcxxGcc; }); boost = pkgs."boost${toString boostVersion}"; routemon = stdenv.mkDerivation { name = "routemon"; src = ./server; buildInputs = with pkgs; [ boost pugixml expat icu openssl sqlite ]; nativeBuildInputs = with pkgs; [ llvmPackages.clang-tools boost # not from pkgs cmake ninja gettext ]; hardeningDisable = [ # Disable here because this breaks C++ modules (I suspect because it sets -D_FORTIFY_SOURCE=3) # We set plenty of hardening options in CMakeLists.txt anyway. "all" ]; env.NIX_CFLAGS_COMPILE = toString [ "-DLOCALEDIR=${builtins.placeholder "out"}/share/locale" "-Wno-reserved-module-identifier" "-isystem ${libstdcxxGcc}/include/c++/${libstdcxxGcc.version}/backward" ]; cmakeFlags = [ "--preset=nix-derivation" "-DCMAKE_CXX_STDLIB_MODULES_JSON=${libstdcxxGcc}/lib/libstdc++.modules.json" ]; }; in { packages.routemon = routemon; devShells.default = pkgs.mkShell.override { inherit stdenv; } { buildInputs = [ pkgs.nix-index pkgs.nix-tree ]; inputsFrom = [ routemon ]; }; formatter = pkgs.nixpkgs-fmt; }); }