nixpkgs/pkgs/by-name/c3/c3c/package.nix
2025-08-01 14:50:10 +00:00

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";
};
})