forked from BabylonJS/JsRuntimeHost
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
104 lines (89 loc) · 3.64 KB
/
CMakeLists.txt
File metadata and controls
104 lines (89 loc) · 3.64 KB
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
set(SCRIPTS
"Scripts/symlink_target.js"
"dist/tests.js")
set(TYPE_SCRIPTS
"Scripts/tests.ts")
set(SOURCES
"Shared/Shared.cpp"
"Shared/Shared.h")
if(APPLE)
if(IOS)
set(SOURCES ${SOURCES}
"iOS/App.mm")
set(PLIST_FILE
"${CMAKE_CURRENT_LIST_DIR}/iOS/Info.plist")
set(STORYBOARD
"${CMAKE_CURRENT_LIST_DIR}/iOS/Base.lproj/LaunchScreen.storyboard"
"${CMAKE_CURRENT_LIST_DIR}/iOS/Base.lproj/Main.storyboard")
set_source_files_properties(
${SCRIPTS}
${TYPE_SCRIPTS}
PROPERTIES MACOSX_PACKAGE_LOCATION "Scripts")
else()
set(SOURCES ${SOURCES}
macOS/App.mm)
endif()
elseif(WIN32)
set(SOURCES ${SOURCES}
Win32/App.cpp)
elseif(UNIX AND NOT ANDROID)
set(SOURCES ${SOURCES}
Linux/App.cpp)
endif()
# Sanitizers
option(ENABLE_SANITIZERS "Enable AddressSanitizer and UBSan" OFF)
if(ENABLE_SANITIZERS)
set(ENABLE_RTTI ON CACHE BOOL "" FORCE)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
set(SANITIZERS "address,undefined")
add_compile_options(-fsanitize=${SANITIZERS} -fno-omit-frame-pointer)
add_link_options(-fsanitize=${SANITIZERS})
else()
message(WARNING "Sanitizers not supported on this compiler.")
endif()
endif()
add_executable(UnitTests ${SOURCES} ${SCRIPTS} ${TYPE_SCRIPTS})
target_compile_definitions(UnitTests PRIVATE JSRUNTIMEHOST_PLATFORM="${JSRUNTIMEHOST_PLATFORM}")
target_link_libraries(UnitTests
PRIVATE AppRuntime
PRIVATE Console
PRIVATE AbortController
PRIVATE Scheduling
PRIVATE ScriptLoader
PRIVATE URL
PRIVATE UrlLib
PRIVATE XMLHttpRequest
PRIVATE WebSocket
PRIVATE gtest_main
PRIVATE Foundation
PRIVATE Blob
${ADDITIONAL_LIBRARIES})
# See https://gitlab.kitware.com/cmake/cmake/-/issues/23543
# If we can set minimum required to 3.26+, then we can use the `copy -t` syntax instead.
add_custom_command(TARGET UnitTests POST_BUILD
COMMAND ${CMAKE_COMMAND} -E $<IF:$<BOOL:$<TARGET_RUNTIME_DLLS:UnitTests>>,copy,true> $<TARGET_RUNTIME_DLLS:UnitTests> $<TARGET_FILE_DIR:UnitTests> COMMAND_EXPAND_LISTS)
if(IOS)
set_target_properties(UnitTests PROPERTIES
MACOSX_BUNDLE true
MACOSX_BUNDLE_INFO_PLIST "${PLIST_FILE}"
RESOURCE "${STORYBOARD}"
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET}
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.jsruntimehost.unittests")
else()
foreach(SCRIPT ${SCRIPTS})
get_filename_component(SCRIPT_NAME "${SCRIPT}" NAME)
add_custom_command(
OUTPUT "${CMAKE_CFG_INTDIR}/Scripts/${SCRIPT_NAME}"
COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${SCRIPT}" "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/Scripts/${SCRIPT_NAME}"
COMMENT "Copying ${SCRIPT_NAME}"
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${SCRIPT}")
endforeach()
add_custom_command(TARGET UnitTests POST_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/Scripts/symlink_target.js" "${CMAKE_CFG_INTDIR}/Scripts/symlink_1.js")
add_custom_command(TARGET UnitTests POST_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/Scripts/symlink_1.js" "${CMAKE_CFG_INTDIR}/Scripts/symlink_2.js")
endif()
set_property(TARGET UnitTests PROPERTY FOLDER Tests)
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SOURCES} ${SCRIPTS})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/Scripts PREFIX scripts FILES ${TYPE_SCRIPTS})