nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 llvm_meta,
4 monorepoSrc,
5 release_version,
6 runCommand,
7 cmake,
8 libxml2,
9 libllvm,
10 ninja,
11 libffi,
12 libclang,
13 stdenv,
14 clang,
15 mlir,
16 version,
17 python3,
18 buildLlvmPackages,
19 devExtraCmakeFlags ? [ ],
20}:
21
22stdenv.mkDerivation (finalAttrs: {
23 pname = "flang";
24 inherit version;
25
26 src = runCommand "flang-src-${version}" { inherit (monorepoSrc) passthru; } ''
27 mkdir -p "$out"
28 cp -r ${monorepoSrc}/${finalAttrs.pname} "$out"
29 cp -r ${monorepoSrc}/cmake "$out"
30 cp -r ${monorepoSrc}/llvm "$out"
31 cp -r ${monorepoSrc}/clang "$out"
32 cp -r ${monorepoSrc}/mlir "$out"
33 cp -r ${monorepoSrc}/third-party "$out"
34 chmod -R +w $out/llvm
35 '';
36
37 patches = [
38 ./dummy_target_19+.patch
39 ];
40 patchFlags = [ "-p2" ];
41
42 sourceRoot = "${finalAttrs.src.name}/flang";
43
44 buildInputs = [
45 libffi
46 libxml2
47 libllvm
48 libclang
49 mlir
50 ];
51 nativeBuildInputs = [
52 cmake
53 clang
54 ninja
55 python3
56 libllvm.dev
57 mlir.dev
58 ];
59 preConfigure = ''
60 ls -l ${libllvm.dev}/lib/cmake/llvm/LLVMConfig.cmake
61 ls -l ${libclang.dev}/lib/cmake/clang/ClangConfig.cmake
62 ls -l ${mlir.dev}/lib/cmake/mlir/MLIRConfig.cmake
63 '';
64 cmakeFlags = [
65 (lib.cmakeBool "CMAKE_VERBOSE_MAKEFILE" true)
66 (lib.cmakeFeature "LLVM_DIR" "${libllvm.dev}/lib/cmake/llvm")
67 # TODO: Needs patches and the `lit` package like other LLVM builds?
68 (lib.cmakeFeature "LLVM_TOOLS_BINARY_DIR" "${buildLlvmPackages.tblgen}/bin/")
69 (lib.cmakeFeature "LLVM_EXTERNAL_LIT" "${buildLlvmPackages.tblgen}/bin/llvm-lit")
70 (lib.cmakeFeature "CLANG_DIR" "${libclang.dev}/lib/cmake/clang")
71 (lib.cmakeFeature "MLIR_DIR" "${mlir.dev}/lib/cmake/mlir")
72 (lib.cmakeFeature "MLIR_TABLEGEN_EXE" "${buildLlvmPackages.tblgen}/bin/mlir-tblgen")
73 (lib.cmakeFeature "MLIR_TABLEGEN_TARGET" "MLIR-TBLGen")
74 (lib.cmakeBool "LLVM_BUILD_EXAMPLES" false)
75 (lib.cmakeBool "LLVM_ENABLE_PLUGINS" false)
76 (lib.cmakeBool "FLANG_STANDALONE_BUILD" true)
77 (lib.cmakeBool "LLVM_INCLUDE_EXAMPLES" false)
78 (lib.cmakeBool "FLANG_INCLUDE_TESTS" false)
79
80 ]
81 ++ devExtraCmakeFlags;
82
83 postUnpack = ''
84 chmod -R u+w -- $sourceRoot/..
85 '';
86
87 outputs = [ "out" ];
88 requiredSystemFeatures = [ "big-parallel" ];
89 meta = llvm_meta // {
90 homepage = "https://flang.llvm.org/";
91 description = "LLVM-based Fortran frontend";
92 license = lib.licenses.ncsa;
93 mainProgram = "flang";
94 maintainers = with lib.maintainers; [ acture ];
95 };
96})