Unverified Commit a94aef18 authored by Dmitry Kalinkin's avatar Dmitry Kalinkin Committed by GitHub
Browse files

Merge pull request #308497 from guitargeek/root_clad

root: enable `clad` for automatic differentiation and clean CMake flags
parents f3364d32 db942c10
Loading
Loading
Loading
Loading
+28 −23
Original line number Diff line number Diff line
{ stdenv
, lib
, callPackage
, fetchgit
, fetchurl
, fetchpatch
, makeWrapper
@@ -68,6 +69,12 @@ stdenv.mkDerivation rec {
    hash = "sha256-MA237RtnjtL7ljXKZ1khoZRcfCED2oQAM7STCR9VcAw=";
  };

  clad_src = fetchgit {
    url = "https://github.com/vgvassilev/clad";
    rev = "refs/tags/v1.4"; # Make sure that this is the same tag as in the ROOT build files!
    hash = "sha256-OI9PaS7kQ/ewD5Soe3gG5FZdlR6qG6Y3mfHwi5dj1sI=";
  };

  nativeBuildInputs = [ makeWrapper cmake pkg-config git ];
  propagatedBuildInputs = [
    nlohmann_json
@@ -131,6 +138,23 @@ stdenv.mkDerivation rec {
    substituteInPlace cmake/modules/SearchInstalledSoftware.cmake \
      --replace 'set(lcgpackages ' '#set(lcgpackages '

    # We have to bypass the connection check, because it would disable clad.
    # This should probably be fixed upstream with a flag to disable the
    # connectivity check!
    substituteInPlace CMakeLists.txt \
      --replace 'if(NO_CONNECTION)' 'if(FALSE)'
    substituteInPlace interpreter/cling/tools/plugins/CMakeLists.txt \
      --replace 'if(NOT DEFINED NO_CONNECTION OR NOT NO_CONNECTION)' 'if(TRUE)'
    # Make sure that clad is not downloaded when building
    substituteInPlace interpreter/cling/tools/plugins/clad/CMakeLists.txt \
      --replace 'UPDATE_COMMAND ""' 'SOURCE_DIR ${clad_src} DOWNLOAD_COMMAND "" UPDATE_COMMAND ""'
    # Make sure that clad is finding the right llvm version
    substituteInPlace interpreter/cling/tools/plugins/clad/CMakeLists.txt \
      --replace '-DLLVM_DIR=''${LLVM_BINARY_DIR}' '-DLLVM_DIR=${llvm_13.dev}/lib/cmake/llvm'
    # Fix that will also be upstream in ROOT 6.32. TODO: remove it when updating to 6.32
    substituteInPlace interpreter/cling/tools/plugins/clad/CMakeLists.txt \
      --replace 'set(_CLAD_LIBRARY_PATH ''${clad_install_dir}/plugins/lib)' 'set(_CLAD_LIBRARY_PATH ''${CMAKE_CURRENT_BINARY_DIR}/clad-prefix/src/clad-build/lib''${LLVM_LIBDIR_SUFFIX})'

    substituteInPlace interpreter/llvm-project/clang/tools/driver/CMakeLists.txt \
      --replace 'add_clang_symlink(''${link} clang)' ""

@@ -151,40 +175,18 @@ stdenv.mkDerivation rec {
  '';

  cmakeFlags = [
    "-Drpath=ON"
    "-DCMAKE_INSTALL_BINDIR=bin"
    "-DCMAKE_INSTALL_LIBDIR=lib"
    "-DCMAKE_INSTALL_INCLUDEDIR=include"
    "-Dbuiltin_llvm=OFF"
    "-Dbuiltin_freetype=OFF"
    "-Dbuiltin_gtest=OFF"
    "-Dbuiltin_nlohmannjson=OFF"
    "-Dbuiltin_openui5=ON"
    "-Dclad=OFF"
    "-Ddavix=ON"
    "-Ddcache=OFF"
    "-Dfail-on-missing=ON"
    "-Dfftw3=OFF"
    "-Dfitsio=OFF"
    "-Dfortran=OFF"
    "-Dgnuinstall=ON"
    "-Dimt=ON"
    "-Dgviz=OFF"
    "-Dhttp=ON"
    "-Dmysql=OFF"
    "-Dodbc=OFF"
    "-Dopengl=ON"
    "-Dpgsql=OFF"
    "-Dpythia8=OFF"
    "-Droot7=ON"
    "-Dsqlite=OFF"
    "-Dssl=ON"
    "-Dtmva=ON"
    "-Dtmva-pymva=OFF"
    "-Dvdt=OFF"
    "-Dwebgui=ON"
    "-Dxml=ON"
    "-Dxrootd=ON"
  ]
  ++ lib.optional (stdenv.cc.libc != null) "-DC_INCLUDE_DIRS=${lib.getDev stdenv.cc.libc}/include"
  ++ lib.optionals stdenv.isDarwin [
@@ -195,6 +197,9 @@ stdenv.mkDerivation rec {
    "-Druntime_cxxmodules=OFF"
  ];

  # suppress warnings from compilation of the vendored clang to avoid running into log limits on the Hydra
  NIX_CFLAGS_COMPILE = lib.optionals stdenv.cc.isGNU [ "-Wno-shadow" "-Wno-maybe-uninitialized" ];

  postInstall = ''
    for prog in rootbrowse rootcp rooteventselector rootls rootmkdir rootmv rootprint rootrm rootslimtree; do
      wrapProgram "$out/bin/$prog" \
@@ -251,7 +256,7 @@ stdenv.mkDerivation rec {
  setupHook = ./setup-hook.sh;

  meta = with lib; {
    homepage = "https://root.cern.ch/";
    homepage = "https://root.cern/";
    description = "A data analysis framework";
    platforms = platforms.unix;
    maintainers = [ maintainers.guitargeek maintainers.veprbl ];
+2 −2
Original line number Diff line number Diff line
@@ -12,8 +12,8 @@ thisroot () {

postHooks+=(thisroot)

addRootInludePath() {
addRootIncludePath() {
    addToSearchPath ROOT_INCLUDE_PATH $1/include
}

addEnvHooks "$targetOffset" addRootInludePath
addEnvHooks "$targetOffset" addRootIncludePath
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ diff a/cmake/modules/SetUpMacOS.cmake b/cmake/modules/SetUpMacOS.cmake
   #---Set Linker flags----------------------------------------------------------------------
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mmacosx-version-min=${MACOSX_VERSION}")
 else (CMAKE_SYSTEM_NAME MATCHES Darwin)
   MESSAGE(FATAL_ERROR "There is no setup for this this Apple system up to now. Don't know waht to do. Stop cmake at this point.")
   MESSAGE(FATAL_ERROR "There is no setup for this this Apple system up to now. Don't know what to do. Stop cmake at this point.")
 endif (CMAKE_SYSTEM_NAME MATCHES Darwin)
diff a/config/root-config.in b/config/root-config.in
--- a/config/root-config.in