diff --git a/flake-cpp.nix b/flake-cpp.nix new file mode 100644 index 0000000..26f4181 --- /dev/null +++ b/flake-cpp.nix @@ -0,0 +1,40 @@ +{ + description = "A build environment for C++ programs"; + + inputs = { nixpkgs.url = "github:nixos/nixpkgs/master"; }; + + outputs = { self, nixpkgs }: + let + pkgs = nixpkgs.legacyPackages.x86_64-linux.pkgs; + in { + devShell.x86_64-linux = pkgs.llvmPackages_16.libcxxStdenv.mkDerivation { + name = "A build environment for C++ programs"; + buildInputs = [ + pkgs.clang_16 + pkgs.clang-tools + pkgs.clang-analyzer + pkgs.lldb_16 + pkgs.llvmPackages_16.stdenv + pkgs.llvmPackages_16.libcxxStdenv + pkgs.llvmPackages_16.libcxxClang + pkgs.llvmPackages_16.compiler-rt + pkgs.llvmPackages_16.compiler-rt-libc + pkgs.llvmPackages_16.bintools + pkgs.llvmPackages_16.clangUseLLVM + pkgs.llvmPackages_16.libcxxabi + pkgs.llvmPackages_16.libcxx + pkgs.llvmPackages_16.libllvm + pkgs.llvmPackages_16.lld + pkgs.llvmPackages_16.bintools + ]; + shellHook = '' + echo "Usage: cxx -o bin source.cc" + export CXX_MODULE_FLAGS='-fimplicit-modules -fimplicit-module-maps -fprebuilt-module-path=.' + export CXX_SANITIZE_FLAGS='-fsanitize=address -fsanitize=leak -fsanitize=undefined -fsanitize=bounds -fsanitize=float-divide-by-zero -fsanitize=integer-divide-by-zero -fsanitize=nonnull-attribute -fsanitize=null -fsanitize=pointer-overflow -fsanitize=integer -fno-omit-frame-pointer' + export CXX_WARNING_FLAGS='-Weverything -Wno-c++98-compat' + alias cxx='clang++ -O1 -std=c++20 -stdlib=libc++ $(echo $CXX_MODULE_FLAGS $CXX_SANITIZE_FLAGS $CXX_WARNING_FLAGS) -g' + ''; + }; + }; +} +