summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/BoltDbgOptions.cmake10
-rw-r--r--cmake/FindGLFW.cmake30
-rw-r--r--cmake/PlatformConfig.cmake26
-rw-r--r--cmake/Sanitizer.cmake28
-rw-r--r--cmake/compiler_warnings.cmake7
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()