89 lines
1.9 KiB
Nix
89 lines
1.9 KiB
Nix
{
|
|
llvmPackages,
|
|
lib,
|
|
fetchFromGitHub,
|
|
cmake,
|
|
python3,
|
|
curl,
|
|
libxml2,
|
|
libffi,
|
|
xar,
|
|
versionCheckHook,
|
|
rev ? "unknown",
|
|
debug ? false,
|
|
checks ? true,
|
|
}:
|
|
let
|
|
inherit (lib.strings) optionalString;
|
|
in
|
|
llvmPackages.stdenv.mkDerivation (finalAttrs: {
|
|
|
|
pname = "c3c${optionalString debug "-debug"}";
|
|
version = "0.7.4";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "c3lang";
|
|
repo = "c3c";
|
|
tag = "v${finalAttrs.version}";
|
|
hash = "sha256-LIwav9ZvNRn4tGh+MGEhimSIKROU3H+R1pc3oyGDb18=";
|
|
};
|
|
|
|
cmakeBuildType = if debug then "Debug" else "Release";
|
|
|
|
postPatch = ''
|
|
substituteInPlace git_hash.cmake \
|
|
--replace-fail "\''${GIT_HASH}" "${rev}"
|
|
substituteInPlace CMakeLists.txt \
|
|
--replace-fail "-Werror" ""
|
|
'';
|
|
|
|
nativeBuildInputs = [ cmake ];
|
|
cmakeFlags = [
|
|
"-DC3_ENABLE_CLANGD_LSP=${if debug then "ON" else "OFF"}"
|
|
"-DC3_LLD_DIR=${llvmPackages.lld.lib}/lib"
|
|
"-DLLVM_CRT_LIBRARY_DIR=${llvmPackages.compiler-rt}/lib/darwin"
|
|
];
|
|
|
|
buildInputs = [
|
|
llvmPackages.llvm
|
|
llvmPackages.lld
|
|
llvmPackages.compiler-rt
|
|
curl
|
|
libxml2
|
|
libffi
|
|
]
|
|
++ lib.optionals llvmPackages.stdenv.hostPlatform.isDarwin [ xar ];
|
|
|
|
nativeCheckInputs = [ python3 ];
|
|
|
|
doCheck =
|
|
lib.elem llvmPackages.stdenv.system [
|
|
"x86_64-linux"
|
|
"x86_64-darwin"
|
|
"aarch64-darwin"
|
|
]
|
|
&& checks;
|
|
|
|
checkPhase = ''
|
|
runHook preCheck
|
|
( cd ../resources/testproject; ../../build/c3c build --trust=full )
|
|
( cd ../test; ../build/c3c compile-run -O1 src/test_suite_runner.c3 -- ../build/c3c test_suite )
|
|
runHook postCheck
|
|
'';
|
|
|
|
nativeInstallCheckInputs = [ versionCheckHook ];
|
|
doInstallCheck = true;
|
|
|
|
meta = with lib; {
|
|
description = "Compiler for the C3 language";
|
|
homepage = "https://github.com/c3lang/c3c";
|
|
license = licenses.lgpl3Only;
|
|
maintainers = with maintainers; [
|
|
hucancode
|
|
anas
|
|
];
|
|
platforms = platforms.all;
|
|
mainProgram = "c3c";
|
|
};
|
|
})
|