Skip to content

Commit 7d2be72

Browse files
taylorhoward92markandrus
authored andcommitted
Add support for Ninja CMake generator (node-webrtc#582)
1 parent da1a840 commit 7d2be72

File tree

1 file changed

+107
-89
lines changed

1 file changed

+107
-89
lines changed

CMakeLists.txt

Lines changed: 107 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,94 @@ ExternalProject_Add(
3030
ExternalProject_Get_Property(project_depot_tools SOURCE_DIR)
3131
set(depot_tools_install_dir ${SOURCE_DIR})
3232

33+
# libc++
34+
# -----------------------------------------------------------------------------
35+
36+
set(libwebrtc_binary_dir ${CMAKE_BINARY_DIR}/external/libwebrtc/build/${CMAKE_BUILD_TYPE})
37+
set(libwebrtc_src_dir ${CMAKE_BINARY_DIR}/external/libwebrtc/download/src)
38+
39+
add_library(libc++ OBJECT IMPORTED)
40+
add_dependencies(libc++ libwebrtc)
41+
42+
set(libc++_objects
43+
algorithm.o
44+
any.o
45+
bind.o
46+
chrono.o
47+
condition_variable.o
48+
debug.o
49+
exception.o
50+
functional.o
51+
future.o
52+
hash.o
53+
ios.o
54+
iostream.o
55+
locale.o
56+
memory.o
57+
mutex.o
58+
new.o
59+
optional.o
60+
random.o
61+
regex.o
62+
shared_mutex.o
63+
stdexcept.o
64+
string.o
65+
strstream.o
66+
system_error.o
67+
thread.o
68+
typeinfo.o
69+
utility.o
70+
valarray.o
71+
variant.o
72+
vector.o
73+
)
74+
list(TRANSFORM libc++_objects PREPEND ${libwebrtc_binary_dir}/obj/buildtools/third_party/libc++/libc++/)
75+
76+
set_property(TARGET libc++ APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
77+
set_target_properties(libc++ PROPERTIES IMPORTED_OBJECTS_DEBUG "${libc++_objects}" IMPORTED_OBJECTS "${libc++_objects}")
78+
79+
# NOTE(mroberts): I would like this to be INTERFACE.
80+
#
81+
# https://gitlab.kitware.com/cmake/cmake/issues/15052
82+
#
83+
# target_include_directories(libc++ SYSTEM INTERFACE "${libc++_include_dir}")
84+
85+
# libc++abi
86+
# -----------------------------------------------------------------------------
87+
88+
add_library(libc++abi OBJECT IMPORTED)
89+
add_dependencies(libc++abi libwebrtc)
90+
91+
set(libc++abi_objects
92+
abort_message.o
93+
cxa_aux_runtime.o
94+
cxa_default_handlers.o
95+
cxa_demangle.o
96+
cxa_exception.o
97+
cxa_exception_storage.o
98+
cxa_guard.o
99+
cxa_handlers.o
100+
cxa_personality.o
101+
cxa_unexpected.o
102+
cxa_vector.o
103+
cxa_virtual.o
104+
fallback_malloc.o
105+
private_typeinfo.o
106+
stdlib_exception.o
107+
stdlib_stdexcept.o
108+
stdlib_typeinfo.o
109+
)
110+
list(TRANSFORM libc++abi_objects PREPEND ${libwebrtc_binary_dir}/obj/buildtools/third_party/libc++abi/libc++abi/)
111+
112+
set_property(TARGET libc++abi APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
113+
set_target_properties(libc++abi PROPERTIES IMPORTED_OBJECTS_DEBUG "${libc++abi_objects}" IMPORTED_OBJECTS "${libc++abi_objects}")
114+
115+
# NOTE(mroberts): I would like this to be INTERFACE.
116+
#
117+
# https://gitlab.kitware.com/cmake/cmake/issues/15052
118+
#
119+
# target_include_directories(libc++abi SYSTEM INTERFACE "${libc++abi_include_dir}")
120+
33121
# libwebrtc
34122
# -----------------------------------------------------------------------------
35123

@@ -87,6 +175,20 @@ else()
87175
endif()
88176
endif()
89177

178+
if (WIN32)
179+
set(byproducts
180+
${libwebrtc_binary_dir}/obj/webrtc.lib
181+
${libwebrtc_binary_dir}/obj/pc/peerconnection.lib
182+
)
183+
else()
184+
set(byproducts
185+
${libc++_objects}
186+
${libc++abi_objects}
187+
${libwebrtc_binary_dir}/obj/libwebrtc.a
188+
${libwebrtc_binary_dir}/obj/pc/libpeerconnection.a
189+
)
190+
endif()
191+
90192
ExternalProject_Add(
91193
project_libwebrtc
92194

@@ -97,6 +199,8 @@ ExternalProject_Add(
97199
SOURCE_DIR ${CMAKE_BINARY_DIR}/external/libwebrtc/download/src
98200
BINARY_DIR ${CMAKE_BINARY_DIR}/external/libwebrtc/build/${CMAKE_BUILD_TYPE}
99201

202+
BUILD_BYPRODUCTS ${byproducts}
203+
100204
DOWNLOAD_COMMAND ${CMAKE_COMMAND} -E env DEPOT_TOOLS=${depot_tools_install_dir} PLATFORM=${PLATFORM} WEBRTC_REVISION=${WEBRTC_REVISION} ${CMAKE_SOURCE_DIR}/scripts/download-webrtc.${suffix}
101205
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env BINARY_DIR=<BINARY_DIR> DEPOT_TOOLS=${depot_tools_install_dir} GN_GEN_ARGS=${GN_GEN_ARGS} SOURCE_DIR=<SOURCE_DIR> ${CMAKE_SOURCE_DIR}/scripts/configure-webrtc.${suffix}
102206
BUILD_COMMAND ${CMAKE_COMMAND} -E env CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} DEPOT_TOOLS=${depot_tools_install_dir} ${CMAKE_SOURCE_DIR}/scripts/build-webrtc.${suffix}
@@ -129,6 +233,9 @@ else()
129233
set_property(TARGET libpeerconnection PROPERTY IMPORTED_LOCATION "${libwebrtc_binary_dir}/obj/pc/libpeerconnection.a")
130234
endif()
131235

236+
set(libc++_include_dir "${libwebrtc_source_dir}/src/buildtools/third_party/libc++/trunk/include")
237+
set(libc++abi_include_dir "${libwebrtc_source_dir}/src/buildtools/third_party/libc++abi/trunk/include")
238+
132239
# NOTE(mroberts): I would like this to be INTERFACE.
133240
#
134241
# https://gitlab.kitware.com/cmake/cmake/issues/15052
@@ -140,95 +247,6 @@ endif()
140247
# ${libwebrtc_source_dir}/webrtc/third_party/libyuv/include
141248
# )
142249

143-
# libc++
144-
# -----------------------------------------------------------------------------
145-
146-
add_library(libc++ OBJECT IMPORTED)
147-
add_dependencies(libc++ libwebrtc)
148-
149-
set(libc++_objects
150-
algorithm.o
151-
any.o
152-
bind.o
153-
chrono.o
154-
condition_variable.o
155-
debug.o
156-
exception.o
157-
functional.o
158-
future.o
159-
hash.o
160-
ios.o
161-
iostream.o
162-
locale.o
163-
memory.o
164-
mutex.o
165-
new.o
166-
optional.o
167-
random.o
168-
regex.o
169-
shared_mutex.o
170-
stdexcept.o
171-
string.o
172-
strstream.o
173-
system_error.o
174-
thread.o
175-
typeinfo.o
176-
utility.o
177-
valarray.o
178-
variant.o
179-
vector.o
180-
)
181-
list(TRANSFORM libc++_objects PREPEND ${libwebrtc_binary_dir}/obj/buildtools/third_party/libc++/libc++/)
182-
183-
set_property(TARGET libc++ APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
184-
set_target_properties(libc++ PROPERTIES IMPORTED_OBJECTS_DEBUG "${libc++_objects}" IMPORTED_OBJECTS "${libc++_objects}")
185-
186-
set(libc++_include_dir "${libwebrtc_source_dir}/src/buildtools/third_party/libc++/trunk/include")
187-
188-
# NOTE(mroberts): I would like this to be INTERFACE.
189-
#
190-
# https://gitlab.kitware.com/cmake/cmake/issues/15052
191-
#
192-
# target_include_directories(libc++ SYSTEM INTERFACE "${libc++_include_dir}")
193-
194-
# libc++abi
195-
# -----------------------------------------------------------------------------
196-
197-
add_library(libc++abi OBJECT IMPORTED)
198-
add_dependencies(libc++abi libwebrtc)
199-
200-
set(libc++abi_objects
201-
abort_message.o
202-
cxa_aux_runtime.o
203-
cxa_default_handlers.o
204-
cxa_demangle.o
205-
cxa_exception.o
206-
cxa_exception_storage.o
207-
cxa_guard.o
208-
cxa_handlers.o
209-
cxa_personality.o
210-
cxa_unexpected.o
211-
cxa_vector.o
212-
cxa_virtual.o
213-
fallback_malloc.o
214-
private_typeinfo.o
215-
stdlib_exception.o
216-
stdlib_stdexcept.o
217-
stdlib_typeinfo.o
218-
)
219-
list(TRANSFORM libc++abi_objects PREPEND ${libwebrtc_binary_dir}/obj/buildtools/third_party/libc++abi/libc++abi/)
220-
221-
set_property(TARGET libc++abi APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
222-
set_target_properties(libc++abi PROPERTIES IMPORTED_OBJECTS_DEBUG "${libc++abi_objects}" IMPORTED_OBJECTS "${libc++abi_objects}")
223-
224-
set(libc++abi_include_dir "${libwebrtc_source_dir}/src/buildtools/third_party/libc++abi/trunk/include")
225-
226-
# NOTE(mroberts): I would like this to be INTERFACE.
227-
#
228-
# https://gitlab.kitware.com/cmake/cmake/issues/15052
229-
#
230-
# target_include_directories(libc++abi SYSTEM INTERFACE "${libc++abi_include_dir}")
231-
232250
# catch2
233251
# -----------------------------------------------------------------------------
234252

0 commit comments

Comments
 (0)