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 buildLlvmTools,
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 (lib.cmakeFeature "LLVM_TOOLS_BINARY_DIR" "${buildLlvmTools.tblgen}/bin/")
68 (lib.cmakeFeature "LLVM_EXTERNAL_LIT" "${buildLlvmTools.tblgen}/bin/llvm-lit")
69 (lib.cmakeFeature "CLANG_DIR" "${libclang.dev}/lib/cmake/clang")
70 (lib.cmakeFeature "MLIR_DIR" "${mlir.dev}/lib/cmake/mlir")
71 (lib.cmakeFeature "MLIR_TABLEGEN_EXE" "${buildLlvmTools.tblgen}/bin/mlir-tblgen")
72 (lib.cmakeFeature "MLIR_TABLEGEN_TARGET" "MLIR-TBLGen")
73 (lib.cmakeBool "LLVM_BUILD_EXAMPLES" false)
74 (lib.cmakeBool "LLVM_ENABLE_PLUGINS" false)
75 (lib.cmakeBool "FLANG_STANDALONE_BUILD" true)
76 (lib.cmakeBool "LLVM_INCLUDE_EXAMPLES" false)
77 (lib.cmakeBool "FLANG_INCLUDE_TESTS" false)
78
79 ]
80 ++ devExtraCmakeFlags;
81
82 postUnpack = ''
83 chmod -R u+w -- $sourceRoot/..
84 '';
85
86 outputs = [ "out" ];
87 requiredSystemFeatures = [ "big-parallel" ];
88 meta = llvm_meta // {
89 homepage = "https://flang.llvm.org/";
90 description = "LLVM-based Fortran frontend";
91 license = lib.licenses.ncsa;
92 mainProgram = "flang";
93 maintainers = with lib.maintainers; [ acture ];
94 };
95})