diff --git a/ports/lightgbm/portfile.cmake b/ports/lightgbm/portfile.cmake new file mode 100644 index 00000000000000..86550dc17fcced --- /dev/null +++ b/ports/lightgbm/portfile.cmake @@ -0,0 +1,34 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO microsoft/LightGBM + REF v${VERSION} + SHA512 295ea23ec55164232f1dde6aa46bcfa616e2fe4852eb2e3492e681477a8d7757875d60379c4d463a35a6a9db56b1f4bce86b3a03bed56ea3d36aadb94a3b38eb + PATCHES + vcpkg_lightgbm_use_vcpkg_libs.patch +) + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + gpu USE_GPU +) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + set(BUILD_STATIC_LIB "OFF") +else() + set(BUILD_STATIC_LIB "ON") +endif() + + +vcpkg_cmake_configure( + SOURCE_PATH ${SOURCE_PATH} + OPTIONS + -DBUILD_STATIC_LIB=${BUILD_STATIC_LIB} + ${FEATURE_OPTIONS} +) + +vcpkg_cmake_install() + +vcpkg_copy_tools(TOOL_NAMES lightgbm AUTO_CLEAN) + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/ports/lightgbm/vcpkg.json b/ports/lightgbm/vcpkg.json new file mode 100644 index 00000000000000..5715f8d6a6df2b --- /dev/null +++ b/ports/lightgbm/vcpkg.json @@ -0,0 +1,29 @@ +{ + "name": "lightgbm", + "version": "4.4.0", + "description": [ + "A fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms.", + "Designed to be distributed and efficient and comes with faster training speeds, higher efficiency, lower memory usage and support of parallel, distributed, and GPU learning." + ], + "homepage": "https://github.com/microsoft/LightGBM", + "license": "Apache-2.0", + "supports": "!android & !osx & !uwp", + "dependencies": [ + "eigen3", + "fast-double-parser", + "fmt", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "features": { + "gpu": { + "description": "GPU support using Boost.Compute", + "dependencies": [ + "boost-compute", + "opencl" + ] + } + } +} diff --git a/ports/lightgbm/vcpkg_lightgbm_use_vcpkg_libs.patch b/ports/lightgbm/vcpkg_lightgbm_use_vcpkg_libs.patch new file mode 100644 index 00000000000000..65f69548f1356e --- /dev/null +++ b/ports/lightgbm/vcpkg_lightgbm_use_vcpkg_libs.patch @@ -0,0 +1,66 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 3492289b..6284b6e0 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -115,18 +115,17 @@ if(USE_SWIG) + endif() + endif() + +-set(EIGEN_DIR "${PROJECT_SOURCE_DIR}/external_libs/eigen") +-include_directories(${EIGEN_DIR}) ++find_package(Eigen3 CONFIG REQUIRED) + + # See https://gitlab.com/libeigen/eigen/-/blob/master/COPYING.README + add_definitions(-DEIGEN_MPL2_ONLY) + add_definitions(-DEIGEN_DONT_PARALLELIZE) + +-set(FAST_DOUBLE_PARSER_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/external_libs/fast_double_parser/include") +-include_directories(${FAST_DOUBLE_PARSER_INCLUDE_DIR}) ++find_package(fmt CONFIG REQUIRED) ++get_target_property(VCPKG_INCLUDE_DIR fmt::fmt INTERFACE_INCLUDE_DIRECTORIES) ++set(FMT_INCLUDE_DIR ${VCPKG_INCLUDE_DIR}/fmt) + +-set(FMT_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/external_libs/fmt/include") +-include_directories(${FMT_INCLUDE_DIR}) ++find_path(FAST_DOUBLE_PARSER_INCLUDE_DIR fast_double_parser.h) + + if(__BUILD_FOR_R) + find_package(LibR REQUIRED) +@@ -181,15 +180,13 @@ if(USE_OPENMP) + endif() + + if(USE_GPU) +- set(BOOST_COMPUTE_HEADER_DIR ${PROJECT_SOURCE_DIR}/external_libs/compute/include) +- include_directories(${BOOST_COMPUTE_HEADER_DIR}) + find_package(OpenCL REQUIRED) + include_directories(${OpenCL_INCLUDE_DIRS}) + message(STATUS "OpenCL include directory: " ${OpenCL_INCLUDE_DIRS}) + if(WIN32) + set(Boost_USE_STATIC_LIBS ON) + endif() +- find_package(Boost 1.56.0 COMPONENTS filesystem system REQUIRED) ++ find_package(Boost 1.56.0 COMPONENTS filesystem system compute REQUIRED) + if(WIN32) + # disable autolinking in boost + add_definitions(-DBOOST_ALL_NO_LIB) +@@ -458,9 +455,11 @@ endif() + + add_library(lightgbm_objs OBJECT ${SOURCES}) + ++target_link_libraries(lightgbm_objs PUBLIC Eigen3::Eigen fmt::fmt) ++ + if(BUILD_CLI) + add_executable(lightgbm src/main.cpp src/application/application.cpp) +- target_link_libraries(lightgbm PRIVATE lightgbm_objs) ++ target_link_libraries(lightgbm PRIVATE lightgbm_objs Eigen3::Eigen fmt::fmt) + endif() + + set(API_SOURCES "src/c_api.cpp") +@@ -471,6 +470,7 @@ if(__BUILD_FOR_R) + endif() + + add_library(lightgbm_capi_objs OBJECT ${API_SOURCES}) ++target_link_libraries(lightgbm_capi_objs PUBLIC Eigen3::Eigen fmt::fmt) + + if(BUILD_STATIC_LIB) + add_library(_lightgbm STATIC) diff --git a/versions/baseline.json b/versions/baseline.json index f8ed87ef239332..5fd50b540df786 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -5368,6 +5368,10 @@ "baseline": "2020-11-24", "port-version": 0 }, + "lightgbm": { + "baseline": "4.4.0", + "port-version": 0 + }, "lightningscanner": { "baseline": "1.0.1", "port-version": 0 diff --git a/versions/l-/lightgbm.json b/versions/l-/lightgbm.json new file mode 100644 index 00000000000000..0a452be61e7f9c --- /dev/null +++ b/versions/l-/lightgbm.json @@ -0,0 +1,9 @@ +{ + "versions": [ + { + "git-tree": "e8a4ff8e712c8794cc650c722dfd9d65581c68bb", + "version": "4.4.0", + "port-version": 0 + } + ] +}