40 lines
2.0 KiB
CMake
40 lines
2.0 KiB
CMake
# Not built through add_lib_module(): a hot-reloadable plugin is a
|
|
# different shape from an ordinary library module. PluginV1 and its
|
|
# sibling PluginV2 are two SEPARATE binaries that deliberately export
|
|
# the SAME extern "C" symbol names (see ../Shared/PluginApi.h) --
|
|
# that's exactly what lets HotReloadContext line them up and patch one
|
|
# into the other at runtime. add_lib_module() assumes one canonical
|
|
# build per module name and would not fit two builds of the same name
|
|
# needing to coexist, so this is plain add_library(), reusing the
|
|
# project's usual output-directory/warnings helpers directly. Gated on
|
|
# BUILD_EXAMPLES exactly like every other target under source/examples/.
|
|
|
|
if(BUILD_EXAMPLES)
|
|
add_library(hotreload_demo_plugin_v1 SHARED src/Plugin.cpp src/CppWidget.cpp)
|
|
else()
|
|
add_library(hotreload_demo_plugin_v1 SHARED EXCLUDE_FROM_ALL src/Plugin.cpp src/CppWidget.cpp)
|
|
endif()
|
|
|
|
target_include_directories(hotreload_demo_plugin_v1 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../Shared)
|
|
set_target_properties(hotreload_demo_plugin_v1 PROPERTIES
|
|
OUTPUT_NAME "hotreload_demo_plugin_v1"
|
|
# Matches add_lib_module()'s own SHARED-library branch
|
|
# (cmake/BuildHelpers.cmake) exactly, for exactly the same reason:
|
|
# MinGW's linker exports every global symbol from a DLL by
|
|
# default, but MSVC exports NONE unless told to -- without this,
|
|
# PluginApi.h's functions would not be visible in the export table
|
|
# at all when built with MSVC, silently breaking the whole demo on
|
|
# that one toolchain.
|
|
WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
|
_set_output_dirs(hotreload_demo_plugin_v1
|
|
"${CMAKE_BINARY_DIR}/${RUNTIME_OUTPUT_SUBDIR}/examples"
|
|
"${CMAKE_BINARY_DIR}/${LIBRARY_OUTPUT_SUBDIR}/examples")
|
|
_apply_compile_options(hotreload_demo_plugin_v1)
|
|
|
|
# The whole point of this target: give source/HotReload's jump-patch
|
|
# backends guaranteed room to write into. See cmake/HotReload.cmake.
|
|
hot_reload_enable_patchable_functions(hotreload_demo_plugin_v1)
|
|
|
|
_register_module_target(EXAMPLE hotreload_demo_plugin_v1)
|
|
add_dependencies(all_examples hotreload_demo_plugin_v1)
|