From 36bd4a704411a6394bf44673bafc859dee0b935c Mon Sep 17 00:00:00 2001 From: Eidolon <furyhunter600@gmail.com> Date: Sat, 5 Nov 2022 20:13:23 -0500 Subject: [PATCH] cmake: Add SRB2_CONFIG_ENABLE_VALGRIND --- CMakeLists.txt | 3 ++ cmake/Modules/FindValgrind.cmake | 56 ++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 5 +++ 3 files changed, 64 insertions(+) create mode 100644 cmake/Modules/FindValgrind.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f5364bc885..58bbf9df09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,9 @@ else() set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT OFF) endif() +if("${CMAKE_SYSTEM_NAME}" MATCHES Linux) + option(SRB2_CONFIG_ENABLE_VALGRIND "Build with Valgrind memory debugging support" OFF) +endif() option( SRB2_CONFIG_SYSTEM_LIBRARIES "Link dependencies using CMake's find_package and do not use internal builds" diff --git a/cmake/Modules/FindValgrind.cmake b/cmake/Modules/FindValgrind.cmake new file mode 100644 index 0000000000..4e4fe99019 --- /dev/null +++ b/cmake/Modules/FindValgrind.cmake @@ -0,0 +1,56 @@ +# Find Valgrind +# Once done, this will define +# +# VALGRIND_FOUND - system has Valgrind +# VALGRIND_INCLUDE_DIRS - Valgrind include directories +# VALGRIND_LIBRARIES - link libraries + +include(LibFindMacros) + +libfind_pkg_check_modules(VALGRIND_PKGCONF valgrind) + +# includes +find_path(VALGRIND_INCLUDE_DIR + NAMES valgrind.h + PATHS + ${VALGRIND_PKGCONF_INCLUDE_DIRS} + "/usr/include/valgrind" + "/usr/local/include/valgrind" +) + +# library +find_library(COREGRIND_LIBRARY + NAMES coregrind + PATHS + ${VALGRIND_PKGCONF_LIBRARY_DIRS} + "/usr/lib/valgrind" + "/usr/local/lib/valgrind" +) +find_library(VEX_LIBRARY + NAMES vex + PATHS + ${VALGRIND_PKGCONF_LIBRARY_DIRS} + "/usr/lib/valgrind" + "/usr/local/lib/valgrind" +) + +# set include dir variables +set(VALGRIND_PROCESS_INCLUDES VALGRIND_INCLUDE_DIR) +set(VALGRIND_PROCESS_LIBS COREGRIND_LIBRARY VEX_LIBRARY) +libfind_process(VALGRIND) + +if(VALGRIND_FOUND AND NOT TARGET Valgrind::Valgrind) + add_library(Valgrind::Coregrind UNKNOWN IMPORTED) + set_target_properties(Valgrind::Coregrind PROPERTIES + IMPORTED_LOCATION "${COREGRIND_LIBRARY}" + ) + add_library(Valgrind::Vex UNKNOWN IMPORTED) + set_target_properties(Valgrind::Vex PROPERTIES + IMPORTED_LOCATION "${VEX_LIBRARY}" + ) + add_library(Valgrind::Valgrind UNKNOWN IMPORTED) + set_target_properties(Valgrind::Valgrind PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${VALGRIND_INCLUDE_DIR}" + ) + target_link_libraries(Valgrind::Valgrind PUBLIC Valgrind::Coregrind Valgrind::Vex) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2c98019e80..90becd6eb7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -140,6 +140,11 @@ if(${SRB2_CONFIG_DEV_BUILD}) endif() target_compile_definitions(SRB2SDL2 PRIVATE -DCMAKECONFIG) +if("${SRB2_CONFIG_ENABLE_VALGRIND}" AND "${CMAKE_SYSTEM_NAME}" MATCHES Linux) + find_package(Valgrind REQUIRED) + target_link_libraries(SRB2SDL2 PRIVATE Valgrind::Valgrind) +endif() + add_subdirectory(sdl) # strip debug symbols into separate file when using gcc. -- GitLab