diff options
| author | Levent Kaya <levent@dev> | 2025-11-05 22:11:58 +0300 |
|---|---|---|
| committer | Levent Kaya <levent@dev> | 2025-11-05 22:11:58 +0300 |
| commit | f6f40266ba57ab2df99b897c375f85f0a8a97856 (patch) | |
| tree | a344923e53224f646fbcbb1abaf3befe6e1ea0d5 /cmake | |
| parent | ce4e4020854e106ead6f505094c668cd896d8817 (diff) | |
[feature] basic structure
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/BoltDbgOptions.cmake | 10 | ||||
| -rw-r--r-- | cmake/FindGLFW.cmake | 30 | ||||
| -rw-r--r-- | cmake/PlatformConfig.cmake | 26 | ||||
| -rw-r--r-- | cmake/Sanitizer.cmake | 28 | ||||
| -rw-r--r-- | cmake/compiler_warnings.cmake | 7 |
5 files changed, 101 insertions, 0 deletions
diff --git a/cmake/BoltDbgOptions.cmake b/cmake/BoltDbgOptions.cmake new file mode 100644 index 0000000..2d9ccd6 --- /dev/null +++ b/cmake/BoltDbgOptions.cmake @@ -0,0 +1,10 @@ +# cmake/BoltDbgOptions.cmake +# +# Define project-wide options for BoltDBG + +option(BOLTDBG_BUILD_TESTS "Build boltdbg tests" ON) +option(BOLTDBG_ENABLE_ASAN "Enable AddressSanitizer (Address/Undefined)" OFF) +option(BOLTDBG_USE_SYSTEM_LIBS "Prefer system libraries (if available) over bundled" ON) +option(BOLTDBG_ENABLE_FORMAT_TARGET "Add clang-format target" ON) + +set(BOLTDBG_DEFAULT_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Default install prefix") diff --git a/cmake/FindGLFW.cmake b/cmake/FindGLFW.cmake new file mode 100644 index 0000000..1abc863 --- /dev/null +++ b/cmake/FindGLFW.cmake @@ -0,0 +1,30 @@ +# cmake/FindGLFW.cmake +# +# Lightweight helper: tries find_package(GLFW3) then pkg-config fallback + +# Try the standard find_package +find_package(GLFW3 QUIET) + +if (GLFW3_FOUND) + set(GLFW3_LIBRARIES GLFW) + set(GLFW3_INCLUDE_DIRS ${GLFW_INCLUDE_DIR}) + set(GLFW3_FOUND TRUE) +else() + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(GLFW_PKG glfw3) + if (GLFW_PKG_FOUND) + set(GLFW3_FOUND TRUE) + set(GLFW3_LIBRARIES ${GLFW_PKG_LIBRARIES}) + set(GLFW3_INCLUDE_DIRS ${GLFW_PKG_INCLUDE_DIRS}) + link_directories(${GLFW_PKG_LIBRARY_DIRS}) + include_directories(${GLFW_PKG_INCLUDE_DIRS}) + endif() + endif() +endif() + +if (NOT GLFW3_FOUND) + set(GLFW3_FOUND FALSE) +endif() + +mark_as_advanced(GLFW3_FOUND) diff --git a/cmake/PlatformConfig.cmake b/cmake/PlatformConfig.cmake new file mode 100644 index 0000000..f2f5252 --- /dev/null +++ b/cmake/PlatformConfig.cmake @@ -0,0 +1,26 @@ +# cmake/PlatformConfig.cmake +# +# Set platform-specific compile definitions and helper variables + +function(configure_platform target) + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + target_compile_definitions(${target} PRIVATE BOLTDBG_PLATFORM_LINUX=1) + message(STATUS "Configuring for Linux") + elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + target_compile_definitions(${target} PRIVATE BOLTDBG_PLATFORM_MACOS=1) + message(STATUS "Configuring for macOS") + elseif (CMAKE_SYSTEM_NAME MATCHES "Windows") + target_compile_definitions(${target} PRIVATE BOLTDBG_PLATFORM_WINDOWS=1) + message(STATUS "Configuring for Windows") + else() + target_compile_definitions(${target} PRIVATE BOLTDBG_PLATFORM_UNKNOWN=1) + message(WARNING "Unknown platform: ${CMAKE_SYSTEM_NAME}") + endif() + + # Example: helper macro for visibility + if (MSVC) + target_compile_definitions(${target} PRIVATE BOLTDBG_EXPORT=__declspec(dllexport)) + else() + target_compile_definitions(${target} PRIVATE BOLTDBG_EXPORT=__attribute__((visibility(\"default\")))) + endif() +endfunction() diff --git a/cmake/Sanitizer.cmake b/cmake/Sanitizer.cmake new file mode 100644 index 0000000..6e633a9 --- /dev/null +++ b/cmake/Sanitizer.cmake @@ -0,0 +1,28 @@ +# cmake/Sanitizers.cmake +# +# Adds sanitizers compile/link flags when requested. +# Usage: include(Sanitizers) ; enable_sanitizers(<target>) + +function(enable_sanitizers target) + if (NOT BOLTDBG_ENABLE_ASAN) + message(VERBOSE "Sanitizers disabled (BOLTDBG_ENABLE_ASAN=OFF)") + return() + endif() + + if (MSVC) + message(WARNING "AddressSanitizer is not fully supported on MSVC. Skipping.") + return() + endif() + + # AddressSanitizer + UndefinedBehaviorSanitizer recommended combo + target_compile_options(${target} PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer) + target_link_options(${target} PRIVATE -fsanitize=address,undefined) + + # Optional: ThreadSanitizer for race conditions (enable manually if needed) + # target_compile_options(${target} PRIVATE -fsanitize=thread -fno-omit-frame-pointer) + # target_link_options(${target} PRIVATE -fsanitize=thread) + + # Recommended debug symbols + target_compile_options(${target} PRIVATE -g) + message(STATUS "Enabled AddressSanitizer and UndefinedBehaviorSanitizer for target ${target}") +endfunction() diff --git a/cmake/compiler_warnings.cmake b/cmake/compiler_warnings.cmake new file mode 100644 index 0000000..bc557eb --- /dev/null +++ b/cmake/compiler_warnings.cmake @@ -0,0 +1,7 @@ +function(set_project_warnings target) + if (MSVC) + target_compile_options(${target} PRIVATE /W4 /permissive-) + else() + target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic -Werror) + endif() +endfunction() |
