-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
134 lines (133 loc) · 7.38 KB
/
Copy pathCMakeLists.txt
File metadata and controls
134 lines (133 loc) · 7.38 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
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
cmake_minimum_required(VERSION 3.25)
include(cmake/MacOSSdk.cmake)
project(sovkit-devtools VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER CMakeTargets)
include(CTest)
find_package(Python3 3.8 REQUIRED COMPONENTS Interpreter)
find_package(Threads REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
include(cmake/SovKitSdk.cmake)
option(DEVTOOLS_BUILD_GUI "Build the wxWidgets developer workbench" ON)
option(DEVTOOLS_BUNDLE_SDK "Copy the supplied SDK runtime beside the application" ON)
set(generated "${CMAKE_CURRENT_BINARY_DIR}/generated")
file(MAKE_DIRECTORY "${generated}")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
"${SOVKIT_SDK_HEADER}" scripts/generate_api.py src/sdk/operations.cpp scripts/embed_assets.py res/banner.xml res/workbench.xml "${SOVKIT_SDK_DOCUMENTATION}")
execute_process(COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_api.py"
"${SOVKIT_SDK_HEADER}" "${generated}" --dispatch "${CMAKE_CURRENT_SOURCE_DIR}/src/sdk/operations.cpp"
COMMAND_ERROR_IS_FATAL ANY)
add_library(devtools_core STATIC
src/sdk.cpp src/catalogue.cpp
src/sdk/library.cpp src/sdk/library.hpp src/sdk/buffer.hpp
src/sdk/lifecycle.cpp src/sdk/profile.cpp src/sdk/logs.cpp src/sdk/utilities.cpp
src/sdk/operations.cpp src/sdk/operations_identity.cpp src/sdk/operations_network.cpp
src/sdk/operations_messages.cpp src/sdk/operations_storage.cpp)
target_include_directories(devtools_core PUBLIC src "${generated}" "${SOVKIT_SDK_INCLUDE_DIR}")
target_link_libraries(devtools_core PUBLIC nlohmann_json::nlohmann_json Threads::Threads ${CMAKE_DL_LIBS})
if(WIN32)
add_subdirectory(3rdparty/dlfcn-win32)
target_link_libraries(devtools_core PUBLIC dlfcn-win32 advapi32)
endif()
if(MSVC)
target_compile_options(devtools_core PUBLIC /utf-8 /W4 /permissive-)
target_compile_definitions(devtools_core PUBLIC NOMINMAX WIN32_LEAN_AND_MEAN)
else()
target_compile_options(devtools_core PRIVATE -Wall -Wextra -Wpedantic)
endif()
add_executable(sovkit-console src/cli.cpp)
target_link_libraries(sovkit-console PRIVATE devtools_core)
if(NOT DEVTOOLS_BUILD_GUI)
install(TARGETS sovkit-console RUNTIME DESTINATION .)
endif()
if(DEVTOOLS_BUILD_GUI)
find_package(wxWidgets CONFIG QUIET COMPONENTS core base xml aui html stc)
if(NOT TARGET wx::core)
find_package(wxWidgets REQUIRED COMPONENTS core base xml aui html stc)
include(${wxWidgets_USE_FILE})
add_library(devtools_wx INTERFACE)
target_include_directories(devtools_wx INTERFACE ${wxWidgets_INCLUDE_DIRS})
target_link_libraries(devtools_wx INTERFACE ${wxWidgets_LIBRARIES})
target_compile_definitions(devtools_wx INTERFACE ${wxWidgets_DEFINITIONS})
else()
add_library(devtools_wx INTERFACE)
target_link_libraries(devtools_wx INTERFACE wx::core wx::base wx::xml wx::aui wx::html wx::stc)
endif()
find_package(fmt CONFIG REQUIRED)
find_path(DEVTOOLS_RAPIDJSON_INCLUDE rapidjson/document.h REQUIRED)
find_path(DEVTOOLS_UTFCPP_INCLUDE utf8.h PATH_SUFFIXES utf8cpp utfcpp REQUIRED)
add_subdirectory(3rdparty/libwxui)
include(cmake/EmbeddedAssets.cmake)
add_executable(sovkit-devtools WIN32 MACOSX_BUNDLE src/app.cpp src/worker.cpp src/worker.hpp)
target_link_libraries(sovkit-devtools PRIVATE devtools_core libwxui)
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT sovkit-devtools)
set_property(TARGET sovkit-devtools PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:sovkit-devtools>")
set_target_properties(sovkit-devtools PROPERTIES
MACOSX_BUNDLE_BUNDLE_NAME "SovKit DevTools"
MACOSX_BUNDLE_GUI_IDENTIFIER "com.skstu.sovkit.devtools"
MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}")
if(DEVTOOLS_BUNDLE_SDK)
# All platforms load the SDK beside the executable (Contents/MacOS in .app).
set(runtime_destination "$<TARGET_FILE_DIR:sovkit-devtools>")
add_custom_target(devtools-stage-sdk ALL
COMMAND ${CMAKE_COMMAND} -E make_directory "${runtime_destination}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SOVKIT_RUNTIME}" "${runtime_destination}/${SOVKIT_RUNTIME_NAME}"
DEPENDS "${SOVKIT_RUNTIME}" VERBATIM)
add_dependencies(sovkit-devtools devtools-stage-sdk)
# Keep a Debug SDK's matching symbols beside the copied DLL for native debugging.
get_filename_component(sdk_runtime_dir "${SOVKIT_RUNTIME}" DIRECTORY)
if(WIN32 AND EXISTS "${sdk_runtime_dir}/libsovkit.pdb")
add_custom_target(devtools-stage-sdk-symbols ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${sdk_runtime_dir}/libsovkit.pdb"
"$<TARGET_FILE_DIR:sovkit-devtools>/libsovkit.pdb"
DEPENDS devtools-stage-sdk "${sdk_runtime_dir}/libsovkit.pdb" VERBATIM)
add_dependencies(sovkit-devtools devtools-stage-sdk-symbols)
endif()
endif()
install(TARGETS sovkit-devtools BUNDLE DESTINATION . RUNTIME DESTINATION .)
endif()
if(DEVTOOLS_BUNDLE_SDK AND (NOT APPLE OR NOT DEVTOOLS_BUILD_GUI))
# macOS GUI bundles already contain their SDK next to the executable.
install(FILES "${SOVKIT_RUNTIME}" DESTINATION .)
endif()
if(BUILD_TESTING)
add_test(NAME devtools.embedded_assets COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/embed_assets_test.py")
add_test(NAME devtools.api_generation COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/generate_api_test.py")
add_test(NAME devtools.ui_boundary COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/check_ui_boundary.py")
if(DEVTOOLS_BUILD_GUI)
add_executable(libwxui-desktop-tests WIN32 3rdparty/libwxui/tests/desktop_test.cc)
target_include_directories(libwxui-desktop-tests PRIVATE "${generated}")
target_link_libraries(libwxui-desktop-tests PRIVATE libwxui)
if(MSVC)
target_compile_options(libwxui-desktop-tests PRIVATE /utf-8)
endif()
add_test(NAME libwxui.desktop COMMAND libwxui-desktop-tests)
set_tests_properties(libwxui.desktop PROPERTIES TIMEOUT 30 LABELS gui)
add_executable(libwxui-localization-tests WIN32 3rdparty/libwxui/tests/localization_test.cc)
target_include_directories(libwxui-localization-tests PRIVATE "${generated}")
target_link_libraries(libwxui-localization-tests PRIVATE libwxui)
if(MSVC)
target_compile_options(libwxui-localization-tests PRIVATE /utf-8)
endif()
add_test(NAME libwxui.localization COMMAND libwxui-localization-tests)
set_tests_properties(libwxui.localization PROPERTIES TIMEOUT 30 LABELS gui)
endif()
add_executable(devtools-core-tests tests/core_test.cpp)
target_link_libraries(devtools-core-tests PRIVATE devtools_core)
add_test(NAME devtools.core COMMAND devtools-core-tests "${SOVKIT_RUNTIME}")
set_tests_properties(devtools.core PROPERTIES TIMEOUT 40)
add_test(NAME devtools.two_peers COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/two_peers.py"
--console "$<TARGET_FILE:sovkit-console>" --library "${SOVKIT_RUNTIME}")
set_tests_properties(devtools.two_peers PROPERTIES TIMEOUT 120)
endif()
set(CPACK_PACKAGE_NAME SovKit-DevTools)
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
set(CPACK_PACKAGE_FILE_NAME "SovKit-DevTools-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_BUILD_TYPE}")
set(CPACK_GENERATOR ZIP)
include(CPack)
include(cmake/IdeLayout.cmake)