-
-
Notifications
You must be signed in to change notification settings - Fork 187
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add support for nix flakes * Added debug build type for flake.nix; Got rid of redundant version check in nix/default.nix * Added dev shell with compile_commands.json into flake.nix * Fixed issue with generated compile_commands.json while creating c3c derivation with nix. Deduced devShells in flake.nix to nix/shell.nix
- Loading branch information
1 parent
a228eb0
commit e6b6ede
Showing
5 changed files
with
204 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -75,3 +75,6 @@ TAGS | |
/.cache/ | ||
/compile_commands.json | ||
|
||
# 'nix build' resulting symlink | ||
result | ||
|
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
{ | ||
description = "C3 compiler flake"; | ||
|
||
inputs = { | ||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixpkgs-unstable"; | ||
flake-utils.url = "github:numtide/flake-utils"; | ||
}; | ||
|
||
outputs = { self, ... } @ inputs: inputs.flake-utils.lib.eachDefaultSystem | ||
(system: | ||
let pkgs = import inputs.nixpkgs { inherit system; }; in | ||
{ | ||
packages = { | ||
default = self.packages.${system}.c3c; | ||
|
||
c3c = pkgs.callPackage ./nix/default.nix {}; | ||
|
||
c3c-debug = pkgs.callPackage ./nix/default.nix { | ||
debug = true; | ||
}; | ||
|
||
c3c-nochecks = pkgs.callPackage ./nix/default.nix { | ||
debug = true; | ||
checks = false; | ||
}; | ||
}; | ||
|
||
devShells = { | ||
default = pkgs.callPackage ./nix/shell.nix { | ||
c3c = self.packages.${system}.c3c-nochecks; | ||
}; | ||
}; | ||
} | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
{ | ||
lib, | ||
llvmPackages, | ||
cmake, | ||
python3, | ||
curl, | ||
libxml2, | ||
libffi, | ||
xar, | ||
debug ? false, | ||
checks ? true, | ||
}: let | ||
inherit (builtins) baseNameOf toString readFile elemAt; | ||
inherit (lib.sources) cleanSourceWith cleanSource; | ||
inherit (lib.lists) findFirst; | ||
inherit (lib.asserts) assertMsg; | ||
inherit (lib.strings) hasInfix hasSuffix splitString removeSuffix removePrefix optionalString; | ||
in | ||
llvmPackages.stdenv.mkDerivation (finalAttrs: { | ||
pname = "c3c${optionalString debug "-debug"}"; | ||
version = let | ||
findLine = findFirst (x: hasInfix "COMPILER_VERSION" x) "none"; | ||
foundLine = findLine ( splitString "\n" ( readFile ../src/version.h ) ); | ||
version = removeSuffix "\"" ( removePrefix "\"" ( elemAt ( splitString " " foundLine ) 2 ) ); | ||
in | ||
assert assertMsg (foundLine != "none") "No COMPILER_VERSION substring was found in version.h"; | ||
version; | ||
|
||
src = cleanSourceWith { | ||
filter = _path: _type: !(hasSuffix ".nix" (baseNameOf(toString _path))); | ||
src = cleanSource ../.; | ||
}; | ||
|
||
postPatch = '' | ||
substituteInPlace CMakeLists.txt \ | ||
--replace-fail "\''${LLVM_LIBRARY_DIRS}" "${llvmPackages.lld.lib}/lib ${llvmPackages.llvm.lib}/lib" | ||
''; | ||
|
||
cmakeBuildType = if debug then "Debug" else "Release"; | ||
|
||
cmakeFlags = [ | ||
"-DC3_ENABLE_CLANGD_LSP=${if debug then "ON" else "OFF"}" | ||
]; | ||
|
||
nativeBuildInputs = [ cmake ]; | ||
|
||
postBuild = optionalString debug '' | ||
mkdir $out | ||
substituteInPlace compile_commands.json \ | ||
--replace "/build/source/" "$src/" | ||
cp compile_commands.json $out/compile_commands.json | ||
''; | ||
|
||
buildInputs = [ | ||
llvmPackages.llvm | ||
llvmPackages.lld | ||
curl | ||
libxml2 | ||
libffi | ||
] ++ lib.optionals llvmPackages.stdenv.hostPlatform.isDarwin [ xar ]; | ||
|
||
nativeCheckInputs = [ python3 ]; | ||
|
||
doCheck = llvmPackages.stdenv.system == "x86_64-linux" && checks; | ||
|
||
checkPhase = '' | ||
runHook preCheck | ||
( cd ../resources/testproject; ../../build/c3c build ) | ||
( cd ../test; python src/tester.py ../build/c3c test_suite ) | ||
runHook postCheck | ||
''; | ||
|
||
meta = with lib; { | ||
description = "Compiler for the C3 language"; | ||
homepage = "https://github.com/c3lang/c3c"; | ||
license = licenses.lgpl3Only; | ||
maintainers = with maintainers; [ | ||
luc65r | ||
anas | ||
]; | ||
platforms = platforms.all; | ||
mainProgram = "c3c"; | ||
}; | ||
}) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
{ | ||
mkShell, | ||
clang-tools, | ||
c3c, | ||
}: | ||
|
||
mkShell { | ||
inputsFrom = [ | ||
c3c | ||
]; | ||
|
||
packages = [ | ||
clang-tools | ||
c3c | ||
]; | ||
|
||
shellHook = '' | ||
ln -sf ${c3c}/compile_commands.json compile_commands.json | ||
''; | ||
} |