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

3
4
5
6
7
if(APPLE)
    SET(CMAKE_CXX_COMPILER "g++-6")
    SET(CMAKE_C_COMPILER "gcc-6")
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)
13
14
15
16

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

if(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
19
20
21
22
    find_package(MPI REQUIRED)
    ADD_DEFINITIONS(-DUSE_MPI)
    MESSAGE(${MPI_LIBRARIES})
    MESSAGE(${MPI_CXX_LIBRARIES})
Guolin Ke's avatar
Guolin Ke committed
23
else()
Guolin Ke's avatar
Guolin Ke committed
24
    ADD_DEFINITIONS(-DUSE_SOCKET)
Guolin Ke's avatar
Guolin Ke committed
25
endif(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
26

27
28
29
30
31
32
33
34
35
36
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
37

38
39
40
41
42
43
44
45
46
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)

Guolin Ke's avatar
Guolin Ke committed
47
if(UNIX OR MINGW OR CYGWIN)
48
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -O3 -Wall -std=c++11 -Wno-ignored-attributes")
Guolin Ke's avatar
Guolin Ke committed
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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")
Guolin Ke's avatar
Guolin Ke committed
74
75
76
77
endif()


SET(LightGBM_HEADER_DIR ${PROJECT_SOURCE_DIR}/include)
78
SET(BOOST_COMPUTE_HEADER_DIR ${PROJECT_SOURCE_DIR}/compute/include)
Guolin Ke's avatar
Guolin Ke committed
79

Guolin Ke's avatar
Guolin Ke committed
80
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
Guolin Ke's avatar
Guolin Ke committed
81
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
Guolin Ke's avatar
Guolin Ke committed
82

Guolin Ke's avatar
Guolin Ke committed
83
include_directories (${LightGBM_HEADER_DIR})
84
include_directories (${BOOST_COMPUTE_HEADER_DIR})
Guolin Ke's avatar
Guolin Ke committed
85
86

if(APPLE)
87
88
89
90
91
  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
92
93
94
95
endif(APPLE)

if(USE_MPI)
  include_directories(${MPI_CXX_INCLUDE_PATH})
Guolin Ke's avatar
Guolin Ke committed
96
endif(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
97
98
99
100
101
102
103
104
105
106
107
108
109
110

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})

Guolin Ke's avatar
Guolin Ke committed
111
if(MSVC)
Guolin Ke's avatar
Guolin Ke committed
112
    set_target_properties(_lightgbm PROPERTIES OUTPUT_NAME "lib_lightgbm")
Guolin Ke's avatar
Guolin Ke committed
113
114
endif(MSVC)

Guolin Ke's avatar
Guolin Ke committed
115
116
117
118
119
if(USE_MPI)
  TARGET_LINK_LIBRARIES(lightgbm ${MPI_CXX_LIBRARIES})
  TARGET_LINK_LIBRARIES(_lightgbm ${MPI_CXX_LIBRARIES})
endif(USE_MPI)

120
121
122
123
124
if(USE_GPU)
  TARGET_LINK_LIBRARIES(lightgbm ${OpenCL_LIBRARY} ${Boost_LIBRARIES})
  TARGET_LINK_LIBRARIES(_lightgbm ${OpenCL_LIBRARY} ${Boost_LIBRARIES})
endif(USE_GPU)

Guolin Ke's avatar
Guolin Ke committed
125
if(WIN32 AND (MINGW OR CYGWIN))
Guolin Ke's avatar
Guolin Ke committed
126
127
128
129
    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
130
endif()
Guolin Ke's avatar
Guolin Ke committed
131

Guolin Ke's avatar
Guolin Ke committed
132
133
install(TARGETS lightgbm _lightgbm
        RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
134
135
136
137
        LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
        ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

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