From f4d676548f4166ff6605502497d885078a6fd9c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E8=80=8C=E9=9D=99?= Date: Wed, 19 Jun 2024 07:24:17 +0000 Subject: [PATCH] Add sanitize mode --- CMakeLists.txt | 49 +++++++++++++++++++++++++++++--------------- tests/CMakeLists.txt | 7 ++++++- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e592320..acc05500 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,18 +61,32 @@ endif() # PK_IS_MAIN determines whether the project is being used from root # or if it is added as a dependency (through add_subdirectory for example). if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") - set(PK_IS_MAIN TRUE) - option(PK_BUILD_SHARED_LIB "Build shared library" OFF) - option(PK_BUILD_STATIC_LIB "Build static library" OFF) + set(PK_IS_MAIN TRUE) + option(PK_BUILD_SHARED_LIB "Build shared library" OFF) + option(PK_BUILD_STATIC_LIB "Build static library" OFF) - include(CTest) - if (BUILD_TESTING) - add_subdirectory(tests/) - endif() + # @szdytom favored testing + # disabled by default because @blueloveTH doesn't like it :C + option(BUILD_TESTING "Build the testing tree." OFF) + if (BUILD_TESTING) + option(BUILD_TESTING_SANITIZE "Build the source with sanitizers" OFF) + if (BUILD_TESTING_SANITIZE) + if (MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address /fno-omit-frame-pointer") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address /fno-omit-frame-pointer") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,leak,undefined") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address,leak,undefined") + endif() + endif() + + enable_testing() + add_subdirectory(tests/) + endif() else() - set(PK_IS_MAIN FALSE) - option(PK_BUILD_SHARED_LIB "Build shared library" OFF) - option(PK_BUILD_STATIC_LIB "Build static library" ON) + set(PK_IS_MAIN FALSE) + option(PK_BUILD_SHARED_LIB "Build shared library" OFF) + option(PK_BUILD_STATIC_LIB "Build static library" ON) endif() if(PK_BUILD_SHARED_LIB) @@ -82,12 +96,15 @@ elseif(PK_BUILD_STATIC_LIB) else() set(PROJECT_EXE_NAME main) add_executable(${PROJECT_EXE_NAME} src2/main.cpp) - # shared linked main - add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC}) - target_link_libraries(${PROJECT_EXE_NAME} ${PROJECT_NAME} ${CMAKE_DL_LIBS}) - # static linked main - # add_library(${PROJECT_NAME} STATIC ${POCKETPY_SRC}) - # target_link_libraries(${PROJECT_EXE_NAME} ${PROJECT_NAME}) + if (BUILD_TESTING_SANITIZE) + # static linked main, for sanitizing purpose + add_library(${PROJECT_NAME} STATIC ${POCKETPY_SRC}) + target_link_libraries(${PROJECT_EXE_NAME} ${PROJECT_NAME}) + else() + # shared linked main, used by default, for CI and others + add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC}) + target_link_libraries(${PROJECT_EXE_NAME} ${PROJECT_NAME} ${CMAKE_DL_LIBS}) + endif() endif() if(PK_USE_CJSON) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bff5517c..a44dff55 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,3 +1,7 @@ +# @szdytom favored testing, set BUILD_TESTING to enable it +# You can use scripts/run_tests.py as an alternative +# Note: the CI uses scripts/run_tests.py to run the tests + cmake_minimum_required(VERSION 3.10) function(pkpy_add_test pyfile) @@ -7,9 +11,10 @@ function(pkpy_add_test pyfile) COMMAND $ ${pyfile} WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/.. ) - message("Added test " ${test_name}) endfunction() +message("Testing enabled") + file(GLOB PK_PYTHON_TESTCASES_FILES RELATIVE ${CMAKE_CURRENT_LIST_DIR}/.. "*.py") foreach(pyfile ${PK_PYTHON_TESTCASES_FILES})