{ 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-server = stdenv.mkDerivation { name = "routemon-server"; 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" ]; }; routemon-web = pkgs.stdenvNoCC.mkDerivation { name = "routemon-web"; src = ./web; installPhase = '' runHook preInstall mkdir -p $out/usr/lib/routemon-web/htdocs cp -rv index.html index.js style.css $out/usr/lib/routemon-web/htdocs runHook postInstall ''; }; in { packages.routemon-server = routemon-server; packages.routemon-web = routemon-web; devShells.default = pkgs.mkShell.override { inherit stdenv; } { buildInputs = [ pkgs.nix-index pkgs.nix-tree ]; inputsFrom = [ routemon-server ]; }; formatter = pkgs.nixpkgs-fmt; }); }