-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathCMakeLists.txt
156 lines (101 loc) · 4.3 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.8)
set(CMAKE_VERBOSE_MAKEFILE on)
project(v8toolkit)
set (CMAKE_CXX_STANDARD 17)
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake-modules)
include(ucm)
include(clang-build-triple)
ucm_set_runtime(STATIC)
set(V8TOOLKIT_VERSION 0.1.0)
include(v8)
set(CLANG_HOME $ENV{CLANG_HOME})
link_directories(. ${CLANG_HOME}/lib)
add_definitions(-DXL_USE_BOOST -DXL_USE_LIB_FMT)
file(GLOB HEADER_FILES
include/*.h
include/*.hpp
include/debugger_message_types/*.h
class_parser/class_parser.h)
file(GLOB SOURCE_FILES
src/*.cpp
src/debugger_message_types/*.cpp)
# https://github.com/fmtlib/fmt
find_package(FMT REQUIRED)
# https://github.com/zaphoyd/websocketpp
find_package(websocketpp REQUIRED)
# http://www.boost.org/
find_package(Boost REQUIRED COMPONENTS system)
# bring in libv8toolkit and make require that it have access to libfmt for additional logging functionality
set(v8toolkit::USE_LIB_FMT REQUIRED)
find_package(xl REQUIRED)
if(WIN32)
else()
# -fsanitize=undefined -fno-sanitize=vptr
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -g -Werror=return-type -Wall -target ${TARGET_TRIPLE}")
endif()
set(V8_LIB_DIR CACHE PATH "full path containing V8 library files")
# -DV8_INCLUDE_DIR:PATH=/path/to/v8/include/
include_directories(./include ${V8_INCLUDE_DIR})
# only use this against a shared-object-built V8
# library=shared snapshot=off
add_library(v8toolkit_shared SHARED ${SOURCE_FILES})
add_library(v8toolkit::v8toolkit_shared ALIAS v8toolkit_shared)
# make sure that libc++experimental.a from clang can be found. May need to move it from clang distribution into /usr/lib
target_link_libraries(v8toolkit_shared xl::xl ${V8_LIBS} ${Boost_LIBRARIES} c++experimental fmt ${Boost_LIBRARIES} websocketpp::websocketpp c++fs)
add_library(v8toolkit_static STATIC ${SOURCE_FILES})
add_library(v8toolkit::v8toolkit_static ALIAS v8toolkit_static)
set_target_properties(v8toolkit_static PROPERTIES OUTPUT_NAME "v8toolkit")
target_link_libraries(v8toolkit_static fmt ${Boost_LIBRARIES})
if(WIN32)
target_link_libraries(v8toolkit_static WinMM)
endif()
set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries")
set(INSTALL_INCLUDE_DIR "include/v8toolkit" CACHE PATH "Installation directory for header files")
install(FILES ${HEADER_FILES} DESTINATION ${INSTALL_INCLUDE_DIR})
install(TARGETS v8toolkit_static v8toolkit_shared DESTINATION ${INSTALL_LIB_DIR})
link_directories(${PROJECT_BINARY_DIR})
add_custom_target(copy_snapshots)
add_custom_command(TARGET copy_snapshots PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${V8_LIB_DIR}/*_blob.bin ${PROJECT_BINARY_DIR})
add_subdirectory(googletest EXCLUDE_FROM_ALL)
add_subdirectory(test EXCLUDE_FROM_ALL)
# turn off adding "d" suffix to debug versions of libraries
set_target_properties(v8toolkit_shared PROPERTIES
DEBUG_POSTFIX "d")
set_target_properties(v8toolkit_static PROPERTIES
DEBUG_POSTFIX "d")
add_subdirectory(class_parser)
set(INCLUDE_INSTALL_DIR "include/" CACHE PATH "Installation directory for header files")
install(TARGETS v8toolkit_static v8toolkit_shared
EXPORT V8TOOLKIT_TARGETS
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include)
install(DIRECTORY include/v8toolkit DESTINATION ${INCLUDE_INSTALL_DIR})
export(EXPORT V8TOOLKIT_TARGETS
FILE "${CMAKE_CURRENT_BINARY_DIR}/v8toolkitTargets.cmake"
NAMESPACE v8toolkit::
)
set(CONFIG_PACKAGE_LOCATION lib/cmake/v8toolkit)
# This complains about "INTERFACE_SOURCES property contains path "..." which is prefixed in the source directory"
install(EXPORT V8TOOLKIT_TARGETS
FILE
v8toolkitTargets.cmake
NAMESPACE
v8toolkit::
DESTINATION
${CONFIG_PACKAGE_LOCATION}
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/v8toolkitConfigVersion.cmake"
VERSION $V8TOOLKIT_VERSION
COMPATIBILITY SameMajorVersion
)
set(CONFIG_PACKAGE_LOCATION lib/cmake/v8toolkit)
configure_package_config_file(v8toolkitConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/v8toolkitConfig.cmake
INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION}
PATH_VARS INCLUDE_INSTALL_DIR V8TOOLKIT_VERSION)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/v8toolkitConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/v8toolkitConfigVersion.cmake
DESTINATION ${CONFIG_PACKAGE_LOCATION})