mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-26 14:53:52 +00:00
4f0dadbf38
After final improvements to the official formatter implementation, this commit now performs the first treewide reformat of Nix files using it. This is part of the implementation of RFC 166. Only "inactive" files are reformatted, meaning only files that aren't being touched by any PR with activity in the past 2 months. This is to avoid conflicts for PRs that might soon be merged. Later we can do a full treewide reformat to get the rest, which should not cause as many conflicts. A CI check has already been running for some time to ensure that new and already-formatted files are formatted, so the files being reformatted here should also stay formatted. This commit was automatically created and can be verified using nix-builda08b3a4d19
.tar.gz \ --argstr baseRevb32a094368
result/bin/apply-formatting $NIXPKGS_PATH
198 lines
6.0 KiB
Nix
198 lines
6.0 KiB
Nix
{
|
|
config,
|
|
stdenv,
|
|
lib,
|
|
fetchFromGitHub,
|
|
cmake,
|
|
gtest,
|
|
doCheck ? true,
|
|
cudaSupport ? config.cudaSupport or false,
|
|
openclSupport ? false,
|
|
mpiSupport ? false,
|
|
javaWrapper ? false,
|
|
hdfsSupport ? false,
|
|
pythonLibrary ? false,
|
|
rLibrary ? false,
|
|
cudaPackages,
|
|
opencl-headers,
|
|
ocl-icd,
|
|
boost,
|
|
llvmPackages,
|
|
openmpi,
|
|
openjdk,
|
|
swig,
|
|
hadoop,
|
|
R,
|
|
rPackages,
|
|
pandoc,
|
|
}:
|
|
|
|
assert doCheck -> !mpiSupport;
|
|
assert openclSupport -> !cudaSupport;
|
|
assert cudaSupport -> !openclSupport;
|
|
|
|
stdenv.mkDerivation rec {
|
|
pnameBase = "lightgbm";
|
|
# prefix with r when building the R library
|
|
# The R package build results in a special binary file
|
|
# that contains a subset of the .so file use for the CLI
|
|
# and python version. In general, the CRAN version from
|
|
# nixpkgs's r-modules should be used, but this non-standard
|
|
# build allows for enabling CUDA support and other features
|
|
# which aren't included in the CRAN release. Build with:
|
|
# nix-build -E "with (import $NIXPKGS{}); \
|
|
# let \
|
|
# lgbm = lightgbm.override{rLibrary = true; doCheck = false;}; \
|
|
# in \
|
|
# rWrapper.override{ packages = [ lgbm ]; }"
|
|
pname = lib.optionalString rLibrary "r-" + pnameBase;
|
|
version = "4.5.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "microsoft";
|
|
repo = pnameBase;
|
|
rev = "v${version}";
|
|
fetchSubmodules = true;
|
|
hash = "sha256-nST6+/c3Y4/hqwgEUhx03gWtjxhlmUu1XKDCy2pSsvU=";
|
|
};
|
|
|
|
nativeBuildInputs =
|
|
[ cmake ]
|
|
++ lib.optionals stdenv.hostPlatform.isDarwin [ llvmPackages.openmp ]
|
|
++ lib.optionals openclSupport [
|
|
opencl-headers
|
|
ocl-icd
|
|
boost
|
|
]
|
|
++ lib.optionals mpiSupport [ openmpi ]
|
|
++ lib.optionals hdfsSupport [ hadoop ]
|
|
++ lib.optionals (hdfsSupport || javaWrapper) [ openjdk ]
|
|
++ lib.optionals javaWrapper [ swig ]
|
|
++ lib.optionals rLibrary [
|
|
R
|
|
pandoc
|
|
];
|
|
|
|
buildInputs = [ gtest ] ++ lib.optional cudaSupport cudaPackages.cudatoolkit;
|
|
|
|
propagatedBuildInputs = lib.optionals rLibrary [
|
|
rPackages.data_table
|
|
rPackages.markdown
|
|
rPackages.rmarkdown
|
|
rPackages.jsonlite
|
|
rPackages.Matrix
|
|
rPackages.R6
|
|
];
|
|
|
|
# Skip APPLE in favor of linux build for .so files
|
|
postPatch = ''
|
|
export PROJECT_SOURCE_DIR=./
|
|
substituteInPlace CMakeLists.txt \
|
|
--replace "find_package(GTest CONFIG)" "find_package(GTest REQUIRED)" \
|
|
--replace "OpenCL_INCLUDE_DIRS}" "OpenCL_INCLUDE_DIRS}" \
|
|
--replace "elseif(APPLE)" "elseif(APPLESKIP)"
|
|
substituteInPlace \
|
|
external_libs/compute/include/boost/compute/cl.hpp \
|
|
external_libs/compute/include/boost/compute/cl_ext.hpp \
|
|
--replace "include <OpenCL/" "include <CL/"
|
|
substituteInPlace build_r.R \
|
|
--replace "shQuote(normalizePath" "shQuote(type = 'cmd', string = normalizePath" \
|
|
--replace "file.path(getwd(), \"lightgbm_r\")" "'$out/tmp'" \
|
|
--replace \
|
|
"install_args <- c(\"CMD\", \"INSTALL\", \"--no-multiarch\", \"--with-keep.source\", tarball)" \
|
|
"install_args <- c(\"CMD\", \"INSTALL\", \"--no-multiarch\", \"--with-keep.source\", \"-l $out/library\", tarball)"
|
|
|
|
# Retry this test in next release. Something fails in the setup, so GTEST_FILTER is not enough
|
|
rm tests/cpp_tests/test_arrow.cpp
|
|
'';
|
|
|
|
cmakeFlags =
|
|
lib.optionals doCheck [ "-DBUILD_CPP_TEST=ON" ]
|
|
++ lib.optionals cudaSupport [
|
|
"-DUSE_CUDA=1"
|
|
"-DCMAKE_CXX_COMPILER=${cudaPackages.backendStdenv.cc}/bin/cc"
|
|
]
|
|
++ lib.optionals openclSupport [ "-DUSE_GPU=ON" ]
|
|
++ lib.optionals mpiSupport [ "-DUSE_MPI=ON" ]
|
|
++ lib.optionals hdfsSupport [
|
|
"-DUSE_HDFS=ON"
|
|
"-DHDFS_LIB=${hadoop}/lib/hadoop-${hadoop.version}/lib/native/libhdfs.so"
|
|
"-DHDFS_INCLUDE_DIR=${hadoop}/lib/hadoop-${hadoop.version}/include"
|
|
]
|
|
++ lib.optionals javaWrapper [
|
|
"-DUSE_SWIG=ON"
|
|
# RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/
|
|
"-DCMAKE_SKIP_BUILD_RPATH=ON"
|
|
]
|
|
++ lib.optionals rLibrary [ "-D__BUILD_FOR_R=ON" ]
|
|
++ lib.optionals pythonLibrary [ "-D__BUILD_FOR_PYTHON=ON" ];
|
|
|
|
configurePhase = lib.optionals rLibrary ''
|
|
export R_LIBS_SITE="$out/library:$R_LIBS_SITE''${R_LIBS_SITE:+:}"
|
|
'';
|
|
|
|
# set the R package buildPhase to null because lightgbm has a
|
|
# custom builder script that builds and installs in one step
|
|
buildPhase = lib.optionals rLibrary '''';
|
|
|
|
inherit doCheck;
|
|
|
|
installPhase =
|
|
''
|
|
runHook preInstall
|
|
''
|
|
+ lib.optionalString (!rLibrary) ''
|
|
mkdir -p $out
|
|
mkdir -p $out/lib
|
|
mkdir -p $out/bin
|
|
cp -r ../include $out
|
|
install -Dm755 ../lib_lightgbm${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/lib_lightgbm${stdenv.hostPlatform.extensions.sharedLibrary}
|
|
''
|
|
+ lib.optionalString (!rLibrary && !pythonLibrary) ''
|
|
install -Dm755 ../lightgbm $out/bin/lightgbm
|
|
''
|
|
+ lib.optionalString javaWrapper ''
|
|
cp -r java $out
|
|
cp -r com $out
|
|
cp -r lightgbmlib.jar $out
|
|
''
|
|
+ ''''
|
|
+ lib.optionalString rLibrary ''
|
|
mkdir $out
|
|
mkdir $out/tmp
|
|
mkdir $out/library
|
|
mkdir $out/library/lightgbm
|
|
''
|
|
+ lib.optionalString (rLibrary && (!openclSupport)) ''
|
|
Rscript build_r.R \
|
|
-j$NIX_BUILD_CORES
|
|
rm -rf $out/tmp
|
|
''
|
|
+ lib.optionalString (rLibrary && openclSupport) ''
|
|
Rscript build_r.R --use-gpu \
|
|
--opencl-library=${ocl-icd}/lib/libOpenCL.so \
|
|
--opencl-include-dir=${opencl-headers}/include \
|
|
--boost-librarydir=${boost} \
|
|
-j$NIX_BUILD_CORES
|
|
rm -rf $out/tmp
|
|
''
|
|
+ ''
|
|
runHook postInstall
|
|
'';
|
|
|
|
postFixup = lib.optionalString rLibrary ''
|
|
if test -e $out/nix-support/propagated-build-inputs; then
|
|
ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages
|
|
fi
|
|
'';
|
|
|
|
meta = with lib; {
|
|
description = "LightGBM is a gradient boosting framework that uses tree based learning algorithms.";
|
|
mainProgram = "lightgbm";
|
|
homepage = "https://github.com/microsoft/LightGBM";
|
|
license = licenses.mit;
|
|
platforms = platforms.unix;
|
|
maintainers = with maintainers; [ nviets ];
|
|
};
|
|
}
|