Optional find dependency in installed cmake config. (#7099)
* Find dependency only when xgboost is built as static library. * Resolve msvc warning. * Add test for linking shared library.
This commit is contained in:
@@ -14,8 +14,6 @@ target_sources(objxgboost PRIVATE ${RABIT_SOURCES})
|
||||
if (USE_CUDA)
|
||||
file(GLOB_RECURSE CUDA_SOURCES *.cu *.cuh)
|
||||
target_sources(objxgboost PRIVATE ${CUDA_SOURCES})
|
||||
xgboost_set_cuda_flags(objxgboost)
|
||||
target_link_libraries(objxgboost PRIVATE GPUTreeShap)
|
||||
endif (USE_CUDA)
|
||||
|
||||
target_include_directories(objxgboost
|
||||
@@ -23,66 +21,11 @@ target_include_directories(objxgboost
|
||||
${xgboost_SOURCE_DIR}/include
|
||||
${xgboost_SOURCE_DIR}/dmlc-core/include
|
||||
${xgboost_SOURCE_DIR}/rabit/include)
|
||||
target_compile_options(objxgboost
|
||||
PRIVATE
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<COMPILE_LANGUAGE:CXX>>:/MP>
|
||||
$<$<AND:$<NOT:$<CXX_COMPILER_ID:MSVC>>,$<COMPILE_LANGUAGE:CXX>>:-funroll-loops>)
|
||||
if (WIN32 AND MINGW)
|
||||
target_compile_options(objxgboost PUBLIC -static-libstdc++)
|
||||
endif (WIN32 AND MINGW)
|
||||
|
||||
if (MSVC)
|
||||
target_compile_options(objxgboost PRIVATE
|
||||
$<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:/utf-8>
|
||||
-D_CRT_SECURE_NO_WARNINGS
|
||||
-D_CRT_SECURE_NO_DEPRECATE
|
||||
)
|
||||
endif (MSVC)
|
||||
|
||||
if (ENABLE_ALL_WARNINGS)
|
||||
target_compile_options(objxgboost PUBLIC
|
||||
$<IF:$<COMPILE_LANGUAGE:CUDA>,-Xcompiler=-Wall -Xcompiler=-Wextra,-Wall -Wextra>)
|
||||
endif (ENABLE_ALL_WARNINGS)
|
||||
if (LOG_CAPI_INVOCATION)
|
||||
target_compile_definitions(objxgboost PUBLIC -DLOG_CAPI_INVOCATION=1)
|
||||
target_compile_definitions(objxgboost PRIVATE -DLOG_CAPI_INVOCATION=1)
|
||||
endif (LOG_CAPI_INVOCATION)
|
||||
|
||||
set_target_properties(objxgboost PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
CXX_STANDARD 14
|
||||
CXX_STANDARD_REQUIRED ON)
|
||||
target_compile_definitions(objxgboost
|
||||
PRIVATE
|
||||
-DDMLC_LOG_CUSTOMIZE=1 # enable custom logging
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:_MWAITXINTRIN_H_INCLUDED>)
|
||||
if (USE_DEBUG_OUTPUT)
|
||||
target_compile_definitions(objxgboost PRIVATE -DXGBOOST_USE_DEBUG_OUTPUT=1)
|
||||
endif (USE_DEBUG_OUTPUT)
|
||||
|
||||
if (XGBOOST_MM_PREFETCH_PRESENT)
|
||||
target_compile_definitions(objxgboost
|
||||
PRIVATE
|
||||
-DXGBOOST_MM_PREFETCH_PRESENT=1)
|
||||
endif(XGBOOST_MM_PREFETCH_PRESENT)
|
||||
if (XGBOOST_BUILTIN_PREFETCH_PRESENT)
|
||||
target_compile_definitions(objxgboost
|
||||
PRIVATE
|
||||
-DXGBOOST_BUILTIN_PREFETCH_PRESENT=1)
|
||||
endif (XGBOOST_BUILTIN_PREFETCH_PRESENT)
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(objxgboost PUBLIC Threads::Threads ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
if (USE_OPENMP OR USE_CUDA) # CUDA requires OpenMP
|
||||
find_package(OpenMP REQUIRED)
|
||||
target_link_libraries(objxgboost PUBLIC OpenMP::OpenMP_CXX)
|
||||
endif (USE_OPENMP OR USE_CUDA)
|
||||
|
||||
if (RABIT_BUILD_MPI)
|
||||
find_package(MPI REQUIRED)
|
||||
target_link_libraries(objxgboost PUBLIC MPI::MPI_CXX)
|
||||
endif (RABIT_BUILD_MPI)
|
||||
|
||||
# For MSVC: Call msvc_use_static_runtime() once again to completely
|
||||
# replace /MD with /MT. See https://github.com/dmlc/xgboost/issues/4462
|
||||
# for issues caused by mixing of /MD and /MT flags
|
||||
|
||||
Reference in New Issue
Block a user