CMakeLists.txt 4.47 KB
Newer Older
Guolin Ke's avatar
Guolin Ke committed
1
2
cmake_minimum_required(VERSION 2.8)

3
if(APPLE)
Tsukasa OMOTO's avatar
Tsukasa OMOTO committed
4
5
    SET(CMAKE_CXX_COMPILER "g++-7")
    SET(CMAKE_C_COMPILER "gcc-7")
6
7
endif()

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

OPTION(USE_MPI "MPI based parallel learning" OFF)
11
OPTION(USE_OPENMP "Enable OpenMP" ON)
12
OPTION(USE_GPU "Enable GPU-acclerated training (EXPERIMENTAL)" OFF)
Guolin Ke's avatar
Guolin Ke committed
13
14
15
16
17
18
OPTION(BUILD_EXE "Build execute program" ON)
OPTION(BUILD_LIB "Build dynamic library" OFF)

if(NOT BUILD_EXE AND NOT BUILD_LIB)
    message( FATAL_ERROR "You cannot disable BUILD_EXE and BUILD_LIB at the same time." )
endif()
19
20
21
22

if(APPLE)
    OPTION(APPLE_OUTPUT_DYLIB "Output dylib shared library" OFF)
endif()
Guolin Ke's avatar
Guolin Ke committed
23
24

if(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
25
26
27
28
    find_package(MPI REQUIRED)
    ADD_DEFINITIONS(-DUSE_MPI)
    MESSAGE(${MPI_LIBRARIES})
    MESSAGE(${MPI_CXX_LIBRARIES})
Guolin Ke's avatar
Guolin Ke committed
29
else()
Guolin Ke's avatar
Guolin Ke committed
30
    ADD_DEFINITIONS(-DUSE_SOCKET)
Guolin Ke's avatar
Guolin Ke committed
31
endif(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
32

33
34
35
36
37
38
39
40
41
42
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
43

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

Guolin Ke's avatar
Guolin Ke committed
62
if(UNIX OR MINGW OR CYGWIN)
63
    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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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
    )
    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
84
85
86
87
endif()


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

Guolin Ke's avatar
Guolin Ke committed
89
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
Guolin Ke's avatar
Guolin Ke committed
90
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
Guolin Ke's avatar
Guolin Ke committed
91

Guolin Ke's avatar
Guolin Ke committed
92
93
94
include_directories (${LightGBM_HEADER_DIR})

if(APPLE)
95
96
97
98
99
  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
100
101
102
103
endif(APPLE)

if(USE_MPI)
  include_directories(${MPI_CXX_INCLUDE_PATH})
Guolin Ke's avatar
Guolin Ke committed
104
endif(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
105
106
107
108
109
110
111
112
113
114
115

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
116
117
118
119
120
121
if(BUILD_EXE)
    add_executable(lightgbm src/main.cpp ${SOURCES})
endif()
if(BUILD_LIB)
    add_library(_lightgbm SHARED src/c_api.cpp src/lightgbm_R.cpp ${SOURCES})
endif()
Guolin Ke's avatar
Guolin Ke committed
122

Guolin Ke's avatar
Guolin Ke committed
123
if(MSVC AND BUILD_LIB)
Guolin Ke's avatar
Guolin Ke committed
124
    set_target_properties(_lightgbm PROPERTIES OUTPUT_NAME "lib_lightgbm")
Guolin Ke's avatar
Guolin Ke committed
125
endif()
Guolin Ke's avatar
Guolin Ke committed
126

Guolin Ke's avatar
Guolin Ke committed
127
if(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
128
129
130
131
132
133
    if(BUILD_EXE)
        TARGET_LINK_LIBRARIES(lightgbm ${MPI_CXX_LIBRARIES})
    endif()
    if(BUILD_LIB)
        TARGET_LINK_LIBRARIES(_lightgbm ${MPI_CXX_LIBRARIES})
    endif()
Guolin Ke's avatar
Guolin Ke committed
134
135
endif(USE_MPI)

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

Guolin Ke's avatar
Guolin Ke committed
145
if(WIN32 AND (MINGW OR CYGWIN))
Guolin Ke's avatar
Guolin Ke committed
146
147
148
149
150
151
152
153
    if(BUILD_EXE)
        TARGET_LINK_LIBRARIES(lightgbm Ws2_32)
        TARGET_LINK_LIBRARIES(lightgbm IPHLPAPI)
    endif()
    if(BUILD_LIB)
        TARGET_LINK_LIBRARIES(_lightgbm Ws2_32)
        TARGET_LINK_LIBRARIES(_lightgbm IPHLPAPI)
    endif()
Guolin Ke's avatar
Guolin Ke committed
154
endif()
Guolin Ke's avatar
Guolin Ke committed
155

Guolin Ke's avatar
Guolin Ke committed
156
157
158
159
160
161
162
if(BUILD_EXE AND BUILD_LIB)
    install(TARGETS lightgbm _lightgbm
            RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
            LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
            ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
    install(DIRECTORY ${LightGBM_HEADER_DIR}/LightGBM DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
endif()
163