Commit 8c68eb97 authored by acture's avatar acture Committed by Alyssa Ross
Browse files

flang: init at 20.x

parent 6ff74a4d
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -488,6 +488,11 @@ let
        {
          libclc = callPackage ./libclc { };
        }
    // lib.optionalAttrs (lib.versionAtLeast metadata.release_version "20") {
      flang = callPackage ./flang {
        mlir = tools.mlir;
      };
    }
  );

  libraries = lib.makeExtensible (
+95 −0
Original line number Diff line number Diff line
{
  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 −0
Original line number Diff line number Diff line
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 −0
Original line number Diff line number Diff line
@@ -5580,6 +5580,7 @@ with pkgs;

  mlir_16 = llvmPackages_16.mlir;
  mlir_17 = llvmPackages_17.mlir;
  flang = llvmPackages_20.flang;

  libclc = llvmPackages.libclc;
  libllvm = llvmPackages.libllvm;
@@ -5617,6 +5618,7 @@ with pkgs;
      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;
@@ -5624,6 +5626,7 @@ with pkgs;
      lldb_21 = llvmPackages_21.lldb;
      llvm_21 = llvmPackages_21.llvm;
      bolt_21 = llvmPackages_21.bolt;
      flang_21 = llvmPackages_21.flang;

      mkLLVMPackages = llvmPackagesSet.mkPackage;
    })
@@ -5650,12 +5653,14 @@ with pkgs;
    lldb_20
    llvm_20
    bolt_20
    flang_20
    llvmPackages_21
    clang_21
    lld_21
    lldb_21
    llvm_21
    bolt_21
    flang_21
    mkLLVMPackages
    ;