summaryrefslogtreecommitdiff
path: root/CMake/SubmoduleDefines.cmake
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2025-08-04 12:32:39 -0500
committerDanny Holman <dholman@gymli.org>2025-08-04 12:32:39 -0500
commit7a268ae92d44a9f27f4874e1e50413ee33b86dd3 (patch)
tree47574f2a1d6c6d469e19627aacbcae03ae615dee /CMake/SubmoduleDefines.cmake
parentrender: vulkan: add check for null pointer for debug (diff)
downloadrune-engine-7a268ae92d44a9f27f4874e1e50413ee33b86dd3.tar.gz
rune-engine-7a268ae92d44a9f27f4874e1e50413ee33b86dd3.tar.zst
rune-engine-7a268ae92d44a9f27f4874e1e50413ee33b86dd3.zip
root: restructuring
Restructure the root of the project such that the engine is siloed from the rest of the toolchain. Add two new subdirectories that contain an editor and an offline profiling data analyzer. Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'CMake/SubmoduleDefines.cmake')
-rw-r--r--CMake/SubmoduleDefines.cmake60
1 files changed, 60 insertions, 0 deletions
diff --git a/CMake/SubmoduleDefines.cmake b/CMake/SubmoduleDefines.cmake
new file mode 100644
index 0000000..edd006b
--- /dev/null
+++ b/CMake/SubmoduleDefines.cmake
@@ -0,0 +1,60 @@
+list(APPEND SUBMODULE_INCLUDE_DIRS ${SUBMODULE_HEADER_DIR})
+
+include(EnableCFLAG)
+if (MSVC)
+ enable_c_compiler_flag_if_supported("/GS")
+else ()
+ enable_c_compiler_flag_if_supported("-fstack-protector-all")
+endif ()
+
+if (WIN32)
+ find_package(dlfcn-win32 REQUIRED)
+ find_package(DBGHELP REQUIRED)
+ list(APPEND SUBMODULE_LINK_LIBS dlfcn-win32::dl ${DBGHELP_LIBRARY})
+endif()
+
+if (DEFINED SUBMODULE_LIBRARY)
+ add_definitions(-DRAPI_EXPORT)
+ set(SUBMODULE_BINARY ${SUBMODULE_LIBRARY})
+ add_library(${SUBMODULE_BINARY} SHARED ${SUBMODULE_FILES})
+ set_target_properties(${SUBMODULE_BINARY} PROPERTIES VERSION ${PROJECT_VERSION})
+ set_target_properties(${SUBMODULE_BINARY} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
+ target_include_directories(${SUBMODULE_BINARY} PUBLIC ${SUBMODULE_INCLUDE_DIRS})
+ target_link_libraries(${SUBMODULE_BINARY} PUBLIC ${SUBMODULE_LINK_LIBS})
+elseif (DEFINED SUBMODULE_EXECUTABLE)
+ set(SUBMODULE_BINARY ${SUBMODULE_EXECUTABLE})
+ add_executable(${SUBMODULE_BINARY} ${SUBMODULE_FILES})
+ set_target_properties(${SUBMODULE_BINARY} PROPERTIES VERSION ${PROJECT_VERSION})
+ target_include_directories(${SUBMODULE_BINARY} PRIVATE ${SUBMODULE_INCLUDE_DIRS})
+ target_link_libraries(${SUBMODULE_BINARY} PRIVATE ${SUBMODULE_LINK_LIBS})
+else ()
+ message(FATAL_ERROR "Unknown submodule type defined by submodule ${CMAKE_CURRENT_SOURCE_DIR}")
+endif ()
+
+target_compile_definitions(${SUBMODULE_BINARY} PUBLIC RUNE_VER="${CMAKE_PROJECT_VERSION}")
+target_compile_definitions(${SUBMODULE_BINARY} PUBLIC RUNE_VER_MAJOR="${CMAKE_PROJECT_VERSION_MAJOR}")
+target_compile_definitions(${SUBMODULE_BINARY} PUBLIC RUNE_VER_MINOR="${CMAKE_PROJECT_VERSION_MINOR}")
+target_compile_definitions(${SUBMODULE_BINARY} PUBLIC RUNE_VER_PATCH="${CMAKE_PROJECT_VERSION_PATCH}")
+
+option(ENABLE_PROFILING "Enable profiling")
+if (ENABLE_PROFILING)
+ target_compile_definitions(${SUBMODULE_BINARY} PUBLIC RUNE_PROFILING)
+endif ()
+
+include(GNUInstallDirs)
+install(TARGETS ${SUBMODULE_BINARY}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ COMPONENT ${SUBMODULE_BINARY}_Runtime
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT ${SUBMODULE_BINARY}_Runtime
+ NAMELINK_COMPONENT ${SUBMODULE_BINARY}_Development
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT ${SUBMODULE_BINARY}_Development
+)
+
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file(
+ ${SUBMODULE_BINARY}Version.cmake
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY SameMajorVersion
+)