Unverified Commit 4536f435 authored by James Lamb's avatar James Lamb Committed by GitHub
Browse files

add CMakeLists options to disable building CLI, installing headers (#5880)

parent d47006f4
...@@ -198,7 +198,12 @@ if [[ $TASK == "gpu" ]]; then ...@@ -198,7 +198,12 @@ if [[ $TASK == "gpu" ]]; then
if [[ $METHOD == "pip" ]]; then if [[ $METHOD == "pip" ]]; then
cd $BUILD_DIRECTORY && sh ./build-python.sh sdist || exit -1 cd $BUILD_DIRECTORY && sh ./build-python.sh sdist || exit -1
sh $BUILD_DIRECTORY/.ci/check_python_dists.sh $BUILD_DIRECTORY/dist || exit -1 sh $BUILD_DIRECTORY/.ci/check_python_dists.sh $BUILD_DIRECTORY/dist || exit -1
pip install --user $BUILD_DIRECTORY/dist/lightgbm-$LGB_VER.tar.gz -v --install-option=--gpu || exit -1 pip install \
--user \
-v \
--install-option=--gpu \
$BUILD_DIRECTORY/dist/lightgbm-$LGB_VER.tar.gz \
|| exit -1
pytest $BUILD_DIRECTORY/tests/python_package_test || exit -1 pytest $BUILD_DIRECTORY/tests/python_package_test || exit -1
exit 0 exit 0
elif [[ $METHOD == "wheel" ]]; then elif [[ $METHOD == "wheel" ]]; then
...@@ -221,7 +226,12 @@ elif [[ $TASK == "cuda" ]]; then ...@@ -221,7 +226,12 @@ elif [[ $TASK == "cuda" ]]; then
if [[ $METHOD == "pip" ]]; then if [[ $METHOD == "pip" ]]; then
cd $BUILD_DIRECTORY && sh ./build-python.sh sdist || exit -1 cd $BUILD_DIRECTORY && sh ./build-python.sh sdist || exit -1
sh $BUILD_DIRECTORY/.ci/check_python_dists.sh $BUILD_DIRECTORY/dist || exit -1 sh $BUILD_DIRECTORY/.ci/check_python_dists.sh $BUILD_DIRECTORY/dist || exit -1
pip install --user $BUILD_DIRECTORY/dist/lightgbm-$LGB_VER.tar.gz -v --install-option=--cuda || exit -1 pip install \
--user \
-v \
--install-option=--cuda \
$BUILD_DIRECTORY/dist/lightgbm-$LGB_VER.tar.gz \
|| exit -1
pytest $BUILD_DIRECTORY/tests/python_package_test || exit -1 pytest $BUILD_DIRECTORY/tests/python_package_test || exit -1
exit 0 exit 0
elif [[ $METHOD == "wheel" ]]; then elif [[ $METHOD == "wheel" ]]; then
...@@ -239,7 +249,12 @@ elif [[ $TASK == "mpi" ]]; then ...@@ -239,7 +249,12 @@ elif [[ $TASK == "mpi" ]]; then
if [[ $METHOD == "pip" ]]; then if [[ $METHOD == "pip" ]]; then
cd $BUILD_DIRECTORY && sh ./build-python.sh sdist || exit -1 cd $BUILD_DIRECTORY && sh ./build-python.sh sdist || exit -1
sh $BUILD_DIRECTORY/.ci/check_python_dists.sh $BUILD_DIRECTORY/dist || exit -1 sh $BUILD_DIRECTORY/.ci/check_python_dists.sh $BUILD_DIRECTORY/dist || exit -1
pip install --user $BUILD_DIRECTORY/dist/lightgbm-$LGB_VER.tar.gz -v --install-option=--mpi || exit -1 pip install \
--user \
-v \
--install-option=--mpi \
$BUILD_DIRECTORY/dist/lightgbm-$LGB_VER.tar.gz \
|| exit -1
pytest $BUILD_DIRECTORY/tests/python_package_test || exit -1 pytest $BUILD_DIRECTORY/tests/python_package_test || exit -1
exit 0 exit 0
elif [[ $METHOD == "wheel" ]]; then elif [[ $METHOD == "wheel" ]]; then
......
...@@ -15,8 +15,11 @@ set( ...@@ -15,8 +15,11 @@ set(
"Semicolon separated list of sanitizer names, e.g., 'address;leak'. \ "Semicolon separated list of sanitizer names, e.g., 'address;leak'. \
Supported sanitizers are address, leak, undefined and thread." Supported sanitizers are address, leak, undefined and thread."
) )
option(BUILD_CLI "Build the 'lightbgm' command-line interface in addition to lib_lightgbm" ON)
option(BUILD_CPP_TEST "Build C++ tests with Google Test" OFF) option(BUILD_CPP_TEST "Build C++ tests with Google Test" OFF)
option(BUILD_STATIC_LIB "Build static library" OFF) option(BUILD_STATIC_LIB "Build static library" OFF)
option(INSTALL_HEADERS "Install headers to CMAKE_INSTALL_PREFIX (e.g. '/usr/local/include')" ON)
option(__BUILD_FOR_PYTHON "Set to ON if building lib_lightgbm for use with the Python package" OFF)
option(__BUILD_FOR_R "Set to ON if building lib_lightgbm for use with the R package" OFF) option(__BUILD_FOR_R "Set to ON if building lib_lightgbm for use with the R package" OFF)
option(__INTEGRATE_OPENCL "Set to ON if building LightGBM with the OpenCL ICD Loader and its dependencies included" OFF) option(__INTEGRATE_OPENCL "Set to ON if building LightGBM with the OpenCL ICD Loader and its dependencies included" OFF)
...@@ -55,6 +58,14 @@ if(__INTEGRATE_OPENCL) ...@@ -55,6 +58,14 @@ if(__INTEGRATE_OPENCL)
message(STATUS "Building library with integrated OpenCL components") message(STATUS "Building library with integrated OpenCL components")
endif() endif()
if(__BUILD_FOR_PYTHON OR __BUILD_FOR_R)
# the Python and R package don't require the CLI
set(BUILD_CLI OFF)
# installing the R and Python package shouldn't place LightGBM's headers
# outside of where the package is installed
set(INSTALL_HEADERS OFF)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.2") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.2")
message(FATAL_ERROR "Insufficient gcc version") message(FATAL_ERROR "Insufficient gcc version")
...@@ -421,8 +432,10 @@ endif() ...@@ -421,8 +432,10 @@ endif()
add_library(lightgbm_objs OBJECT ${SOURCES}) add_library(lightgbm_objs OBJECT ${SOURCES})
add_executable(lightgbm src/main.cpp src/application/application.cpp) if(BUILD_CLI)
target_link_libraries(lightgbm PRIVATE lightgbm_objs) add_executable(lightgbm src/main.cpp src/application/application.cpp)
target_link_libraries(lightgbm PRIVATE lightgbm_objs)
endif()
set(API_SOURCES "src/c_api.cpp") set(API_SOURCES "src/c_api.cpp")
# Only build the R part of the library if building for # Only build the R part of the library if building for
...@@ -544,19 +557,25 @@ if(USE_CUDA) ...@@ -544,19 +557,25 @@ if(USE_CUDA)
# each target that contains or depends on cuda source. # each target that contains or depends on cuda source.
set_target_properties(lightgbm_objs PROPERTIES CUDA_ARCHITECTURES OFF) set_target_properties(lightgbm_objs PROPERTIES CUDA_ARCHITECTURES OFF)
set_target_properties(_lightgbm PROPERTIES CUDA_ARCHITECTURES OFF) set_target_properties(_lightgbm PROPERTIES CUDA_ARCHITECTURES OFF)
set_target_properties(lightgbm PROPERTIES CUDA_ARCHITECTURES OFF) if(BUILD_CLI)
set_target_properties(lightgbm PROPERTIES CUDA_ARCHITECTURES OFF)
endif()
set_target_properties(lightgbm_objs PROPERTIES CUDA_SEPARABLE_COMPILATION ON) set_target_properties(lightgbm_objs PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
# Device linking is not supported for object libraries. # Device linking is not supported for object libraries.
# Thus we have to specify them on final targets. # Thus we have to specify them on final targets.
set_target_properties(lightgbm PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) if(BUILD_CLI)
set_target_properties(lightgbm PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
endif()
set_target_properties(_lightgbm PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) set_target_properties(_lightgbm PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
# histograms are list of object libraries. Linking object library to other # histograms are list of object libraries. Linking object library to other
# object libraries only gets usage requirements, the linked objects won't be # object libraries only gets usage requirements, the linked objects won't be
# used. Thus we have to call target_link_libraries on final targets here. # used. Thus we have to call target_link_libraries on final targets here.
target_link_libraries(lightgbm PRIVATE ${histograms}) if(BUILD_CLI)
target_link_libraries(lightgbm PRIVATE ${histograms})
endif()
target_link_libraries(_lightgbm PRIVATE ${histograms}) target_link_libraries(_lightgbm PRIVATE ${histograms})
endif() endif()
...@@ -619,11 +638,20 @@ if(BUILD_CPP_TEST) ...@@ -619,11 +638,20 @@ if(BUILD_CPP_TEST)
target_link_libraries(testlightgbm PRIVATE lightgbm_objs lightgbm_capi_objs GTest::GTest) target_link_libraries(testlightgbm PRIVATE lightgbm_objs lightgbm_capi_objs GTest::GTest)
endif() endif()
if(BUILD_CLI)
install(
TARGETS lightgbm
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
)
endif()
install( install(
TARGETS lightgbm _lightgbm TARGETS _lightgbm
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
) )
install(DIRECTORY ${LightGBM_HEADER_DIR}/LightGBM DESTINATION ${CMAKE_INSTALL_PREFIX}/include) if(INSTALL_HEADERS)
install(DIRECTORY ${LightGBM_HEADER_DIR}/LightGBM DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
endif()
...@@ -91,7 +91,7 @@ def compile_cpp( ...@@ -91,7 +91,7 @@ def compile_cpp(
logger.info("Starting to compile the library.") logger.info("Starting to compile the library.")
cmake_cmd = ["cmake", str(CURRENT_DIR / "compile")] cmake_cmd = ["cmake", str(CURRENT_DIR / "compile"), "-D__BUILD_FOR_PYTHON=ON"]
if integrated_opencl: if integrated_opencl:
use_gpu = False use_gpu = False
cmake_cmd.append("-D__INTEGRATE_OPENCL=ON") cmake_cmd.append("-D__INTEGRATE_OPENCL=ON")
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment