forked from ray-project/ray
-
Notifications
You must be signed in to change notification settings - Fork 5
/
CMakeLists.txt
156 lines (119 loc) · 4.87 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
cmake_minimum_required(VERSION 3.4)
project(ray)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules")
# This ensures that things like gnu++11 get passed correctly
set(CMAKE_CXX_STANDARD 11)
# Use old C++ ABI to be compatible with TensorFlow
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
# We require a C++11 compliant compiler
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# ray build options
option(RAY_BUILD_PYTHON
"build python library"
OFF)
option(RAY_BUILD_JAVA
"build java library"
OFF)
option(RAY_BUILD_STATIC
"Build the libray static libraries"
ON)
option(RAY_BUILD_SHARED
"Build the libray shared libraries"
ON)
option(RAY_BUILD_TESTS
"Build the Ray googletest unit tests"
ON)
option(RAY_USE_NEW_GCS
"Use the new GCS implementation"
OFF)
option(RAY_USE_GLOG
"Build the logging system using glog"
ON)
if (RAY_BUILD_PYTHON)
set(CMAKE_RAY_LANG_PYTHON YES)
endif ()
if (RAY_BUILD_JAVA)
set(CMAKE_RAY_LANG_JAVA YES)
endif ()
if ("${CMAKE_RAY_LANG_JAVA}" STREQUAL "NO" AND "${CMAKE_RAY_LANG_PYTHON}" STREQUAL "NO")
message(FATAL_ERROR "Please specify which language support you want to build by passing \
-DRAY_BUILD_PYTHON=on and/or -DRAY_BUILD_JAVA=on to CMake")
endif ()
if (RAY_USE_NEW_GCS)
add_definitions(-DRAY_USE_NEW_GCS)
endif()
include(ExternalProject)
include(GNUInstallDirs)
include(BuildUtils)
enable_testing()
include(ThirdpartyToolchain)
include(Common)
# TODO(rkn): Fix all of this. This include is needed for the following
# reason. The local scheduler depends on tables.cc which depends on
# node_manager_generated.h which depends on gcs_generated.h. However,
# the include statement for gcs_generated.h doesn't include the file
# path, so we include the relevant directory here.
set(GCS_FBS_OUTPUT_DIRECTORY
"${CMAKE_CURRENT_LIST_DIR}/src/ray/gcs/format")
include_directories(${GCS_FBS_OUTPUT_DIRECTORY})
include_directories(SYSTEM ${ARROW_INCLUDE_DIR})
include_directories(SYSTEM ${PLASMA_INCLUDE_DIR})
include_directories("${CMAKE_CURRENT_LIST_DIR}/src/")
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/src/ray/)
# final target copy_ray
add_custom_target(copy_ray ALL)
# copy plasma_store_server
add_custom_command(TARGET copy_ray POST_BUILD
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/src/plasma
COMMAND ${CMAKE_COMMAND} -E
copy ${ARROW_HOME}/bin/plasma_store_server ${CMAKE_CURRENT_BINARY_DIR}/src/plasma/)
if ("${CMAKE_RAY_LANG_PYTHON}" STREQUAL "YES")
# add pyarrow as the dependency
add_dependencies(copy_ray pyarrow_ext)
# NOTE: The lists below must be kept in sync with ray/python/setup.py.
set(ray_file_list
"src/ray/thirdparty/redis/src/redis-server"
"src/ray/gcs/redis_module/libray_redis_module.so"
"src/ray/raylet/libraylet_library_python.so"
"src/ray/raylet/raylet_monitor"
"src/ray/raylet/raylet")
if (RAY_USE_NEW_GCS)
list(APPEND ray_file_list "src/credis/build/src/libmember.so")
list(APPEND ray_file_list "src/credis/build/src/libmaster.so")
list(APPEND ray_file_list "src/credis/redis/src/redis-server")
endif()
# The goal of the if statement below is to require the catapult files to be
# present INCLUDE_UI=1 is set and to include the UI files if they are present.
# This should match the logic in build_ui.sh.
if (EXISTS "${CMAKE_BINARY_DIR}/src/catapult_files/index.html" OR "$ENV{INCLUDE_UI}" STREQUAL "1")
list(APPEND ray_file_list "src/catapult_files/index.html")
list(APPEND ray_file_list "src/catapult_files/trace_viewer_full.html")
endif()
set(build_ray_file_list)
foreach(file ${ray_file_list})
list(APPEND build_ray_file_list ${CMAKE_BINARY_DIR}/${file})
endforeach()
add_custom_target(copy_ray_files DEPENDS ${build_ray_file_list} copy_redis ray_redis_module)
add_dependencies(copy_ray copy_ray_files)
# Make sure that the Python extensions are built before copying the files.
get_raylet_library("python" RAYLET_LIBRARY_PYTHON)
add_dependencies(copy_ray ${RAYLET_LIBRARY_PYTHON})
foreach(file ${ray_file_list})
add_custom_command(TARGET copy_ray POST_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_BINARY_DIR}/${file}
${CMAKE_BINARY_DIR}/../python/ray/core/${file})
endforeach()
# copy plasma_store_server to python
add_custom_command(TARGET copy_ray POST_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${ARROW_HOME}/bin/plasma_store_server ${CMAKE_SOURCE_DIR}/python/ray/core/src/plasma/)
endif()
if ("${CMAKE_RAY_LANG_JAVA}" STREQUAL "YES")
get_raylet_library("java" RAYLET_LIBRARY_JAVA)
add_dependencies(copy_ray ${RAYLET_LIBRARY_JAVA})
# copy libplasma_java files
add_custom_command(TARGET copy_ray POST_BUILD
COMMAND bash -c "mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/src/plasma"
COMMAND bash -c "cp ${ARROW_LIBRARY_DIR}/libplasma_java.* ${CMAKE_CURRENT_BINARY_DIR}/src/plasma/")
endif()