CMakeLists.txt 3.18 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
12
13
14
15
OPTION(USE_OPENMP "Enable OpenMP" ON)

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

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

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

Guolin Ke's avatar
Guolin Ke committed
37
if(UNIX OR MINGW OR CYGWIN)
Guolin Ke's avatar
Guolin Ke committed
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -O3 -Wall -std=c++11")
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
64
65
66
67
endif()


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

Guolin Ke's avatar
Guolin Ke committed
69
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
Guolin Ke's avatar
Guolin Ke committed
70
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
Guolin Ke's avatar
Guolin Ke committed
71

Guolin Ke's avatar
Guolin Ke committed
72
73
74
include_directories (${LightGBM_HEADER_DIR})

if(APPLE)
75
76
77
78
79
  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
80
81
82
83
endif(APPLE)

if(USE_MPI)
  include_directories(${MPI_CXX_INCLUDE_PATH})
Guolin Ke's avatar
Guolin Ke committed
84
endif(USE_MPI)
Guolin Ke's avatar
Guolin Ke committed
85
86
87
88
89
90
91
92
93
94
95
96
97
98

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
99
if(MSVC)
Guolin Ke's avatar
Guolin Ke committed
100
    set_target_properties(_lightgbm PROPERTIES OUTPUT_NAME "lib_lightgbm")
Guolin Ke's avatar
Guolin Ke committed
101
102
endif(MSVC)

Guolin Ke's avatar
Guolin Ke committed
103
104
105
106
107
if(USE_MPI)
  TARGET_LINK_LIBRARIES(lightgbm ${MPI_CXX_LIBRARIES})
  TARGET_LINK_LIBRARIES(_lightgbm ${MPI_CXX_LIBRARIES})
endif(USE_MPI)

Guolin Ke's avatar
Guolin Ke committed
108
if(WIN32 AND (MINGW OR CYGWIN))
Guolin Ke's avatar
Guolin Ke committed
109
110
111
112
    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
113
endif()
Guolin Ke's avatar
Guolin Ke committed
114

Guolin Ke's avatar
Guolin Ke committed
115
116
install(TARGETS lightgbm _lightgbm
        RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
117
118
119
120
        LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
        ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

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