flakes/cpp/flake.nix
2023-06-30 23:37:02 +05:30

40 lines
1.6 KiB
Nix

{
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'
'';
};
};
}