flang: init at 20.x

acture 8c68eb97 6ff74a4d

Changed files
+132
pkgs
development
compilers
top-level
+5
pkgs/development/compilers/llvm/common/default.nix
···
{
libclc = callPackage ./libclc { };
}
+
// lib.optionalAttrs (lib.versionAtLeast metadata.release_version "20") {
+
flang = callPackage ./flang {
+
mlir = tools.mlir;
+
};
+
}
);
libraries = lib.makeExtensible (
+95
pkgs/development/compilers/llvm/common/flang/default.nix
···
+
{
+
lib,
+
llvm_meta,
+
monorepoSrc,
+
release_version,
+
runCommand,
+
cmake,
+
libxml2,
+
libllvm,
+
ninja,
+
libffi,
+
libclang,
+
stdenv,
+
clang,
+
mlir,
+
version,
+
python3,
+
buildLlvmTools,
+
devExtraCmakeFlags ? [ ],
+
}:
+
+
stdenv.mkDerivation (finalAttrs: {
+
pname = "flang";
+
inherit version;
+
+
src = runCommand "flang-src-${version}" { inherit (monorepoSrc) passthru; } ''
+
mkdir -p "$out"
+
cp -r ${monorepoSrc}/${finalAttrs.pname} "$out"
+
cp -r ${monorepoSrc}/cmake "$out"
+
cp -r ${monorepoSrc}/llvm "$out"
+
cp -r ${monorepoSrc}/clang "$out"
+
cp -r ${monorepoSrc}/mlir "$out"
+
cp -r ${monorepoSrc}/third-party "$out"
+
chmod -R +w $out/llvm
+
'';
+
+
patches = [
+
./dummy_target_19+.patch
+
];
+
patchFlags = [ "-p2" ];
+
+
sourceRoot = "${finalAttrs.src.name}/flang";
+
+
buildInputs = [
+
libffi
+
libxml2
+
libllvm
+
libclang
+
mlir
+
];
+
nativeBuildInputs = [
+
cmake
+
clang
+
ninja
+
python3
+
libllvm.dev
+
mlir.dev
+
];
+
preConfigure = ''
+
ls -l ${libllvm.dev}/lib/cmake/llvm/LLVMConfig.cmake
+
ls -l ${libclang.dev}/lib/cmake/clang/ClangConfig.cmake
+
ls -l ${mlir.dev}/lib/cmake/mlir/MLIRConfig.cmake
+
'';
+
cmakeFlags = [
+
(lib.cmakeBool "CMAKE_VERBOSE_MAKEFILE" true)
+
(lib.cmakeFeature "LLVM_DIR" "${libllvm.dev}/lib/cmake/llvm")
+
(lib.cmakeFeature "LLVM_TOOLS_BINARY_DIR" "${buildLlvmTools.tblgen}/bin/")
+
(lib.cmakeFeature "LLVM_EXTERNAL_LIT" "${buildLlvmTools.tblgen}/bin/llvm-lit")
+
(lib.cmakeFeature "CLANG_DIR" "${libclang.dev}/lib/cmake/clang")
+
(lib.cmakeFeature "MLIR_DIR" "${mlir.dev}/lib/cmake/mlir")
+
(lib.cmakeFeature "MLIR_TABLEGEN_EXE" "${buildLlvmTools.tblgen}/bin/mlir-tblgen")
+
(lib.cmakeFeature "MLIR_TABLEGEN_TARGET" "MLIR-TBLGen")
+
(lib.cmakeBool "LLVM_BUILD_EXAMPLES" false)
+
(lib.cmakeBool "LLVM_ENABLE_PLUGINS" false)
+
(lib.cmakeBool "FLANG_STANDALONE_BUILD" true)
+
(lib.cmakeBool "LLVM_INCLUDE_EXAMPLES" false)
+
(lib.cmakeBool "FLANG_INCLUDE_TESTS" false)
+
+
]
+
++ devExtraCmakeFlags;
+
+
postUnpack = ''
+
chmod -R u+w -- $sourceRoot/..
+
'';
+
+
outputs = [ "out" ];
+
requiredSystemFeatures = [ "big-parallel" ];
+
meta = llvm_meta // {
+
homepage = "https://flang.llvm.org/";
+
description = "LLVM-based Fortran frontend";
+
license = lib.licenses.ncsa;
+
mainProgram = "flang";
+
maintainers = with lib.maintainers; [ acture ];
+
};
+
})
+27
pkgs/development/compilers/llvm/common/flang/dummy_target_19+.patch
···
+
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
+
index 070c39eb6e9a..168c97524943 100644
+
--- a/flang/CMakeLists.txt
+
+++ b/flang/CMakeLists.txt
+
@@ -1,6 +1,22 @@
+
cmake_minimum_required(VERSION 3.20.0)
+
set(LLVM_SUBPROJECT_TITLE "Flang")
+
+
+# Patch: define dummy mlir-tblgen target for TableGen.cmake
+
+if(DEFINED MLIR_TABLEGEN_EXE AND NOT TARGET mlir-tblgen)
+
+ add_executable(mlir-tblgen IMPORTED GLOBAL)
+
+ set_target_properties(mlir-tblgen PROPERTIES
+
+ IMPORTED_LOCATION "${MLIR_TABLEGEN_EXE}"
+
+ )
+
+endif()
+
+
+
+if(DEFINED MLIR_TABLEGEN_EXE AND NOT TARGET MLIR-TBLGen)
+
+ add_executable(MLIR-TBLGen IMPORTED GLOBAL)
+
+ set_target_properties(MLIR-TBLGen PROPERTIES
+
+ IMPORTED_LOCATION "${MLIR_TABLEGEN_EXE}"
+
+ )
+
+endif()
+
+
+
+
+
if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
+
set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
+
endif()
+5
pkgs/top-level/all-packages.nix
···
mlir_16 = llvmPackages_16.mlir;
mlir_17 = llvmPackages_17.mlir;
+
flang = llvmPackages_20.flang;
libclc = llvmPackages.libclc;
libllvm = llvmPackages.libllvm;
···
lldb_20 = llvmPackages_20.lldb;
llvm_20 = llvmPackages_20.llvm;
bolt_20 = llvmPackages_20.bolt;
+
flang_20 = llvmPackages_20.flang;
llvmPackages_21 = llvmPackagesSet."21";
clang_21 = llvmPackages_21.clang;
···
lldb_21 = llvmPackages_21.lldb;
llvm_21 = llvmPackages_21.llvm;
bolt_21 = llvmPackages_21.bolt;
+
flang_21 = llvmPackages_21.flang;
mkLLVMPackages = llvmPackagesSet.mkPackage;
})
···
lldb_20
llvm_20
bolt_20
+
flang_20
llvmPackages_21
clang_21
lld_21
lldb_21
llvm_21
bolt_21
+
flang_21
mkLLVMPackages