CMakeLists.txt 4.55 KB
Newer Older
1
2
if(MSVC)
  cmake_minimum_required(VERSION 3.8)
Guolin Ke's avatar
Guolin Ke committed
3
elseif(USE_GPU OR APPLE)
4
5
6
7
  cmake_minimum_required(VERSION 3.2)
else()
  cmake_minimum_required(VERSION 2.8)
endif()
Guolin Ke's avatar
Guolin Ke committed
8

9
PROJECT(lightgbm)
Guolin Ke's avatar
Guolin Ke committed
10
11

OPTION(USE_MPI "MPI based parallel learning" OFF)
12
OPTION(USE_OPENMP "Enable OpenMP" ON)
13
OPTION(USE_GPU "Enable GPU-acclerated training (EXPERIMENTAL)" OFF)
14

Qiwei Ye's avatar
Qiwei Ye committed
15
16
17
18
19
20
21
22
23
24
25
26
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.2")
    message(FATAL_ERROR "Insufficient gcc version")
  endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.8")
    message(FATAL_ERROR "Insufficient Clang version")
  endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
    message(FATAL_ERROR "AppleClang wasn't supported. Please see https://github.com/Microsoft/LightGBM/wiki/Installation-Guide#osx")
endif()

27
28
29
if(APPLE)
    OPTION(APPLE_OUTPUT_DYLIB "Output dylib shared library" OFF)
endif()
Guolin Ke's avatar
Guolin Ke committed
30
31

if(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
32
33
34
35
    find_package(MPI REQUIRED)
    ADD_DEFINITIONS(-DUSE_MPI)
    MESSAGE(${MPI_LIBRARIES})
    MESSAGE(${MPI_CXX_LIBRARIES})
Guolin Ke's avatar
Guolin Ke committed
36
else()
Guolin Ke's avatar
Guolin Ke committed
37
    ADD_DEFINITIONS(-DUSE_SOCKET)
Guolin Ke's avatar
Guolin Ke committed
38
endif(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
39

40
41
42
43
44
45
46
47
48
49
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)
Guolin Ke's avatar
Guolin Ke committed
50

51
if(USE_GPU)
52
53
    SET(BOOST_COMPUTE_HEADER_DIR ${PROJECT_SOURCE_DIR}/compute/include)
    include_directories (${BOOST_COMPUTE_HEADER_DIR})
54
55
56
    find_package(OpenCL REQUIRED)
    include_directories(${OpenCL_INCLUDE_DIRS})
    MESSAGE(STATUS "OpenCL include directory:" ${OpenCL_INCLUDE_DIRS})
Guolin Ke's avatar
Guolin Ke committed
57
58
59
    if (WIN32)
        set(Boost_USE_STATIC_LIBS ON)
    endif()
60
    find_package(Boost 1.56.0 COMPONENTS filesystem system REQUIRED)
61
62
    if (WIN32)
        # disable autolinking in boost
Guolin Ke's avatar
Guolin Ke committed
63
        add_definitions( -DBOOST_ALL_NO_LIB )
64
    endif()
Guolin Ke's avatar
Guolin Ke committed
65
    include_directories(${Boost_INCLUDE_DIRS})
66
67
68
    ADD_DEFINITIONS(-DUSE_GPU)
endif(USE_GPU)

Guolin Ke's avatar
Guolin Ke committed
69
if(UNIX OR MINGW OR CYGWIN)
70
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -O3 -Wextra -Wall -Wno-ignored-attributes -Wno-unknown-pragmas")
Guolin Ke's avatar
Guolin Ke committed
71
72
endif()

Nikita Titov's avatar
Nikita Titov committed
73
74
75
76
if(WIN32 AND MINGW)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++")
endif()

Guolin Ke's avatar
Guolin Ke committed
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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
    )
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /O2 /Ob2 /Oi /Ot /Oy /GL")
else()
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
Guolin Ke's avatar
Guolin Ke committed
95
96
97
98
endif()


SET(LightGBM_HEADER_DIR ${PROJECT_SOURCE_DIR}/include)
Guolin Ke's avatar
Guolin Ke committed
99

Guolin Ke's avatar
Guolin Ke committed
100
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
Guolin Ke's avatar
Guolin Ke committed
101
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
Guolin Ke's avatar
Guolin Ke committed
102

Guolin Ke's avatar
Guolin Ke committed
103
104
105
include_directories (${LightGBM_HEADER_DIR})

if(APPLE)
106
107
108
109
110
  if (APPLE_OUTPUT_DYLIB)
    SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
  else()
    SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
  endif()
Guolin Ke's avatar
Guolin Ke committed
111
112
113
114
endif(APPLE)

if(USE_MPI)
  include_directories(${MPI_CXX_INCLUDE_PATH})
Guolin Ke's avatar
Guolin Ke committed
115
endif(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
116
117
118
119
120
121
122
123
124
125
126

file(GLOB SOURCES 
    src/application/*.cpp
    src/boosting/*.cpp
    src/io/*.cpp
    src/metric/*.cpp
    src/objective/*.cpp
    src/network/*.cpp
    src/treelearner/*.cpp
)

Guolin Ke's avatar
Guolin Ke committed
127
128
add_executable(lightgbm src/main.cpp ${SOURCES})
add_library(_lightgbm SHARED src/c_api.cpp src/lightgbm_R.cpp ${SOURCES})
Guolin Ke's avatar
Guolin Ke committed
129

Guolin Ke's avatar
Guolin Ke committed
130
if(MSVC)
Guolin Ke's avatar
Guolin Ke committed
131
    set_target_properties(_lightgbm PROPERTIES OUTPUT_NAME "lib_lightgbm")
Guolin Ke's avatar
Guolin Ke committed
132
endif(MSVC)
Guolin Ke's avatar
Guolin Ke committed
133

Guolin Ke's avatar
Guolin Ke committed
134
if(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
135
136
  TARGET_LINK_LIBRARIES(lightgbm ${MPI_CXX_LIBRARIES})
  TARGET_LINK_LIBRARIES(_lightgbm ${MPI_CXX_LIBRARIES})
Guolin Ke's avatar
Guolin Ke committed
137
138
endif(USE_MPI)

139
if(USE_GPU)
Guolin Ke's avatar
Guolin Ke committed
140
141
  TARGET_LINK_LIBRARIES(lightgbm ${OpenCL_LIBRARY} ${Boost_LIBRARIES})
  TARGET_LINK_LIBRARIES(_lightgbm ${OpenCL_LIBRARY} ${Boost_LIBRARIES})
142
143
endif(USE_GPU)

Guolin Ke's avatar
Guolin Ke committed
144
if(WIN32 AND (MINGW OR CYGWIN))
Guolin Ke's avatar
Guolin Ke committed
145
146
147
148
    TARGET_LINK_LIBRARIES(lightgbm Ws2_32)
    TARGET_LINK_LIBRARIES(_lightgbm Ws2_32)
    TARGET_LINK_LIBRARIES(lightgbm IPHLPAPI)
    TARGET_LINK_LIBRARIES(_lightgbm IPHLPAPI)
Guolin Ke's avatar
Guolin Ke committed
149
endif()
Guolin Ke's avatar
Guolin Ke committed
150

Guolin Ke's avatar
Guolin Ke committed
151
152
153
154
install(TARGETS lightgbm _lightgbm
        RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
        LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
        ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
155

156
install(DIRECTORY ${LightGBM_HEADER_DIR}/LightGBM DESTINATION ${CMAKE_INSTALL_PREFIX}/include)