2016-08-05 09:06:01 +03:00
|
|
|
cmake_minimum_required(VERSION 2.8)
|
|
|
|
|
2017-03-18 07:55:02 +03:00
|
|
|
if(APPLE)
|
|
|
|
SET(CMAKE_CXX_COMPILER "g++-6")
|
|
|
|
SET(CMAKE_C_COMPILER "gcc-6")
|
|
|
|
endif()
|
|
|
|
|
2016-10-08 11:13:56 +03:00
|
|
|
PROJECT(lightgbm)
|
2016-08-05 09:06:01 +03:00
|
|
|
|
|
|
|
OPTION(USE_MPI "MPI based parallel learning" OFF)
|
2017-01-12 17:46:09 +03:00
|
|
|
OPTION(USE_OPENMP "Enable OpenMP" ON)
|
2017-04-09 16:53:14 +03:00
|
|
|
OPTION(USE_GPU "Enable GPU-acclerated training (EXPERIMENTAL)" OFF)
|
2017-01-12 17:46:09 +03:00
|
|
|
|
|
|
|
if(APPLE)
|
|
|
|
OPTION(APPLE_OUTPUT_DYLIB "Output dylib shared library" OFF)
|
|
|
|
endif()
|
2016-08-05 09:06:01 +03:00
|
|
|
|
|
|
|
if(USE_MPI)
|
2016-12-07 06:31:31 +03:00
|
|
|
find_package(MPI REQUIRED)
|
|
|
|
ADD_DEFINITIONS(-DUSE_MPI)
|
|
|
|
MESSAGE(${MPI_LIBRARIES})
|
|
|
|
MESSAGE(${MPI_CXX_LIBRARIES})
|
2016-08-05 09:06:01 +03:00
|
|
|
else()
|
2016-12-07 06:31:31 +03:00
|
|
|
ADD_DEFINITIONS(-DUSE_SOCKET)
|
2016-12-07 06:45:55 +03:00
|
|
|
endif(USE_MPI)
|
2016-08-05 09:06:01 +03:00
|
|
|
|
2017-01-12 17:46:09 +03:00
|
|
|
if(USE_OPENMP)
|
|
|
|
find_package(OpenMP REQUIRED)
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
|
|
|
else()
|
|
|
|
# Ignore unknown #pragma warning
|
|
|
|
if( (CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]")
|
|
|
|
OR (CMAKE_CXX_COMPILER_ID MATCHES "[gG][nN][uU]"))
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas")
|
|
|
|
endif()
|
|
|
|
endif(USE_OPENMP)
|
2016-12-07 06:31:31 +03:00
|
|
|
|
2017-04-09 16:53:14 +03:00
|
|
|
if(USE_GPU)
|
|
|
|
find_package(OpenCL REQUIRED)
|
|
|
|
include_directories(${OpenCL_INCLUDE_DIRS})
|
|
|
|
MESSAGE(STATUS "OpenCL include directory:" ${OpenCL_INCLUDE_DIRS})
|
|
|
|
find_package(Boost 1.56.0 COMPONENTS filesystem system REQUIRED)
|
|
|
|
include_directories(${Boost_INCLUDE_DIRS})
|
|
|
|
ADD_DEFINITIONS(-DUSE_GPU)
|
|
|
|
endif(USE_GPU)
|
|
|
|
|
2016-12-07 06:45:55 +03:00
|
|
|
if(UNIX OR MINGW OR CYGWIN)
|
2017-04-09 16:53:14 +03:00
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -O3 -Wall -std=c++11 -Wno-ignored-attributes")
|
2016-12-07 06:31:31 +03:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(MSVC)
|
|
|
|
if(MSVC_VERSION LESS 1800)
|
|
|
|
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a newer msvc.")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
SET(variables
|
|
|
|
CMAKE_C_FLAGS_DEBUG
|
|
|
|
CMAKE_C_FLAGS_MINSIZEREL
|
|
|
|
CMAKE_C_FLAGS_RELEASE
|
|
|
|
CMAKE_C_FLAGS_RELWITHDEBINFO
|
|
|
|
CMAKE_CXX_FLAGS_DEBUG
|
|
|
|
CMAKE_CXX_FLAGS_MINSIZEREL
|
|
|
|
CMAKE_CXX_FLAGS_RELEASE
|
|
|
|
CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
|
|
|
)
|
|
|
|
foreach(variable ${variables})
|
|
|
|
if(${variable} MATCHES "/MD")
|
|
|
|
string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}")
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /O2 /Ob2 /Oi /Ot /Oy /GL")
|
|
|
|
else()
|
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
2016-08-05 09:06:01 +03:00
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
SET(LightGBM_HEADER_DIR ${PROJECT_SOURCE_DIR}/include)
|
2017-04-09 16:53:14 +03:00
|
|
|
SET(BOOST_COMPUTE_HEADER_DIR ${PROJECT_SOURCE_DIR}/compute/include)
|
2016-12-07 06:31:31 +03:00
|
|
|
|
2016-08-05 09:06:01 +03:00
|
|
|
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
|
2016-11-08 16:24:05 +03:00
|
|
|
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
|
2016-08-05 09:06:01 +03:00
|
|
|
|
2016-12-07 06:31:31 +03:00
|
|
|
include_directories (${LightGBM_HEADER_DIR})
|
2017-04-09 16:53:14 +03:00
|
|
|
include_directories (${BOOST_COMPUTE_HEADER_DIR})
|
2016-12-07 06:31:31 +03:00
|
|
|
|
|
|
|
if(APPLE)
|
2017-01-12 17:46:09 +03:00
|
|
|
if (APPLE_OUTPUT_DYLIB)
|
|
|
|
SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
|
|
|
|
else()
|
|
|
|
SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
|
|
|
|
endif()
|
2016-12-07 06:31:31 +03:00
|
|
|
endif(APPLE)
|
|
|
|
|
|
|
|
if(USE_MPI)
|
|
|
|
include_directories(${MPI_CXX_INCLUDE_PATH})
|
2016-12-07 06:45:55 +03:00
|
|
|
endif(USE_MPI)
|
2016-12-07 06:31:31 +03:00
|
|
|
|
|
|
|
file(GLOB SOURCES
|
|
|
|
src/application/*.cpp
|
|
|
|
src/boosting/*.cpp
|
|
|
|
src/io/*.cpp
|
|
|
|
src/metric/*.cpp
|
|
|
|
src/objective/*.cpp
|
|
|
|
src/network/*.cpp
|
|
|
|
src/treelearner/*.cpp
|
|
|
|
)
|
|
|
|
|
|
|
|
add_executable(lightgbm src/main.cpp ${SOURCES})
|
|
|
|
add_library(_lightgbm SHARED src/c_api.cpp ${SOURCES})
|
|
|
|
|
2016-12-07 07:25:42 +03:00
|
|
|
if(MSVC)
|
2016-12-08 16:36:11 +03:00
|
|
|
set_target_properties(_lightgbm PROPERTIES OUTPUT_NAME "lib_lightgbm")
|
2016-12-07 07:25:42 +03:00
|
|
|
endif(MSVC)
|
|
|
|
|
2016-12-07 06:31:31 +03:00
|
|
|
if(USE_MPI)
|
|
|
|
TARGET_LINK_LIBRARIES(lightgbm ${MPI_CXX_LIBRARIES})
|
|
|
|
TARGET_LINK_LIBRARIES(_lightgbm ${MPI_CXX_LIBRARIES})
|
|
|
|
endif(USE_MPI)
|
|
|
|
|
2017-04-09 16:53:14 +03:00
|
|
|
if(USE_GPU)
|
|
|
|
TARGET_LINK_LIBRARIES(lightgbm ${OpenCL_LIBRARY} ${Boost_LIBRARIES})
|
|
|
|
TARGET_LINK_LIBRARIES(_lightgbm ${OpenCL_LIBRARY} ${Boost_LIBRARIES})
|
|
|
|
endif(USE_GPU)
|
|
|
|
|
2016-12-07 06:45:55 +03:00
|
|
|
if(WIN32 AND (MINGW OR CYGWIN))
|
2016-12-07 06:31:31 +03:00
|
|
|
TARGET_LINK_LIBRARIES(lightgbm Ws2_32)
|
|
|
|
TARGET_LINK_LIBRARIES(_lightgbm Ws2_32)
|
|
|
|
TARGET_LINK_LIBRARIES(lightgbm IPHLPAPI)
|
|
|
|
TARGET_LINK_LIBRARIES(_lightgbm IPHLPAPI)
|
2016-12-07 06:45:55 +03:00
|
|
|
endif()
|
2016-08-05 09:06:01 +03:00
|
|
|
|
2016-12-07 06:31:31 +03:00
|
|
|
install(TARGETS lightgbm _lightgbm
|
|
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
|
2017-01-24 11:53:58 +03:00
|
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
|
|
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
|
|
|
|
|
|
|
|
install(DIRECTORY ${LightGBM_HEADER_DIR}/LightGBM DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
|