From 50de1cd6e042906dbf82f7ea33c8945fff100a71 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sun, 5 May 2019 14:00:54 +0700 Subject: [PATCH] clean up cmake config --- CMakeLists.txt | 117 ++++++++--------------- samples/CMakeLists.txt | 13 +-- untests/CMakeLists.txt | 13 +-- untests/sources/untests_utils/buffer.cpp | 2 +- 4 files changed, 46 insertions(+), 99 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe1c7737..954cd1d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,14 +2,7 @@ cmake_minimum_required(VERSION 3.11 FATAL_ERROR) project(enduro2d) # -# global warning mode -# - -add_compile_options( - $<$:-Wno-deprecated-declarations>) - -# -# global linking mode +# linking mode # if(MSVC) @@ -36,7 +29,7 @@ if(MSVC) endif(MSVC) # -# global coverage mode +# coverage mode # option(E2D_BUILD_WITH_COVERAGE "Build with coverage" OFF) @@ -49,26 +42,26 @@ if(E2D_BUILD_WITH_COVERAGE AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) endif() # -# global sanitizer mode +# sanitizer modes # -option(E2D_BUILD_WITH_SANITIZER "Build with sanitizer" OFF) -if(E2D_BUILD_WITH_SANITIZER AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) - add_definitions(-DE2D_BUILD_WITH_SANITIZER) +option(E2D_BUILD_WITH_ASAN "Build with address sanitizer" OFF) +if(E2D_BUILD_WITH_ASAN AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) + add_definitions(-DE2D_BUILD_WITH_ASAN) set(E2D_SANITIZER_FLAGS "-fno-omit-frame-pointer -fsanitize=address") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${E2D_SANITIZER_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${E2D_SANITIZER_FLAGS}") set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} ${E2D_SANITIZER_FLAGS}") endif() -# -# global compiling mode -# - -if(MSVC) - add_definitions(/MP) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) -endif(MSVC) +option(E2D_BUILD_WITH_UBSAN "Build with undefined sanitizer" OFF) +if(E2D_BUILD_WITH_UBSAN AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) + add_definitions(-DE2D_BUILD_WITH_UBSAN) + set(E2D_SANITIZER_FLAGS "-fsanitize=undefined") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${E2D_SANITIZER_FLAGS}") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${E2D_SANITIZER_FLAGS}") + set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} ${E2D_SANITIZER_FLAGS}") +endif() # # e2d sources @@ -102,25 +95,17 @@ file(GLOB_RECURSE E2D_3RDPARTY # e2d external 3rd party # -find_package(OpenGL REQUIRED) -find_package(Threads REQUIRED) - -if(APPLE) - find_library(Cocoa Cocoa) - find_library(IOKit IOKit) - find_library(CoreVideo CoreVideo) - find_library(Foundation Foundation) -endif(APPLE) - -set(glew-cmake_BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(glew-cmake_BUILD_MULTI_CONTEXT OFF CACHE BOOL "" FORCE) -add_subdirectory(modules/glew) - set(GLFW_INSTALL OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) add_subdirectory(modules/glfw) +set_target_properties(glfw PROPERTIES FOLDER modules) + +set(glew-cmake_BUILD_SHARED OFF CACHE BOOL "" FORCE) +set(glew-cmake_BUILD_MULTI_CONTEXT OFF CACHE BOOL "" FORCE) +add_subdirectory(modules/glew) +set_target_properties(libglew_static PROPERTIES FOLDER modules) # # e2d library target @@ -136,58 +121,34 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${E2D_SOURCES} ${E2D_3RDPARTY}) -target_include_directories(${PROJECT_NAME} - PRIVATE headers - PRIVATE sources - PRIVATE modules/glew/include - PRIVATE modules/glfw/include) +target_link_libraries(${PROJECT_NAME} + PRIVATE glfw + PRIVATE libglew_static + PRIVATE $<$:winmm.lib>) -set_target_properties(${PROJECT_NAME} PROPERTIES - CXX_STANDARD 14 - CXX_STANDARD_REQUIRED YES - CXX_EXTENSIONS NO) +target_include_directories(${PROJECT_NAME} + PUBLIC headers + PRIVATE sources) target_compile_options(${PROJECT_NAME} PRIVATE $<$: - /W4> + /W3 /MP> PRIVATE $<$,$,$>: - -Wall -Wextra -Wpedantic>) + -Wall -Wextra -Wpedantic> + PRIVATE + $<$: + -Wno-deprecated-declarations>) -# -# e2d public variables -# +target_compile_features(${PROJECT_NAME} + PUBLIC cxx_std_14) -set(E2D_LIBRARIES - enduro2d - glfw - libglew_static - ${OPENGL_gl_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT}) - -if(APPLE) - list(APPEND E2D_LIBRARIES - ${Cocoa} - ${IOKit} - ${CoreVideo} - ${Foundation}) -endif(APPLE) - -if(WIN32) - list(APPEND E2D_LIBRARIES - winmm.lib) -endif(WIN32) - -set(E2D_INCLUDE_DIRS - ${CMAKE_CURRENT_SOURCE_DIR}/headers) - -get_directory_property(E2D_PARENT_DIRECTORY - PARENT_DIRECTORY) -if(E2D_PARENT_DIRECTORY) - set(E2D_LIBRARIES ${E2D_LIBRARIES} PARENT_SCOPE) - set(E2D_INCLUDE_DIRS ${E2D_INCLUDE_DIRS} PARENT_SCOPE) -endif(E2D_PARENT_DIRECTORY) +target_compile_definitions(${PROJECT_NAME} + PUBLIC + $<$: + -D_CRT_SECURE_NO_WARNINGS + -D_SCL_SECURE_NO_WARNINGS>) # # subdirectories diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 1da4cee4..8c181f8d 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -15,16 +15,9 @@ function(add_e2d_sample NAME) # executable # - add_executable(${SAMPLE_NAME} - ${SAMPLE_SOURCES}) - target_link_libraries(${SAMPLE_NAME} - ${E2D_LIBRARIES}) - target_include_directories(${SAMPLE_NAME} - PRIVATE ${E2D_INCLUDE_DIRS}) - set_target_properties(${SAMPLE_NAME} PROPERTIES - CXX_STANDARD 14 - CXX_STANDARD_REQUIRED YES - CXX_EXTENSIONS NO) + add_executable(${SAMPLE_NAME} ${SAMPLE_SOURCES}) + target_link_libraries(${SAMPLE_NAME} enduro2d) + set_target_properties(${SAMPLE_NAME} PROPERTIES FOLDER samples) # # resources diff --git a/untests/CMakeLists.txt b/untests/CMakeLists.txt index ce11141b..e4f5bc08 100644 --- a/untests/CMakeLists.txt +++ b/untests/CMakeLists.txt @@ -15,16 +15,9 @@ function(add_e2d_tests NAME) # executable # - add_executable(${TESTS_NAME} - ${TESTS_SOURCES}) - target_link_libraries(${TESTS_NAME} - ${E2D_LIBRARIES}) - target_include_directories(${TESTS_NAME} - PRIVATE ${E2D_INCLUDE_DIRS}) - set_target_properties(${TESTS_NAME} PROPERTIES - CXX_STANDARD 14 - CXX_STANDARD_REQUIRED YES - CXX_EXTENSIONS NO) + add_executable(${TESTS_NAME} ${TESTS_SOURCES}) + target_link_libraries(${TESTS_NAME} enduro2d) + set_target_properties(${TESTS_NAME} PROPERTIES FOLDER untests) # # resources diff --git a/untests/sources/untests_utils/buffer.cpp b/untests/sources/untests_utils/buffer.cpp index 3dd37e89..208a9e63 100644 --- a/untests/sources/untests_utils/buffer.cpp +++ b/untests/sources/untests_utils/buffer.cpp @@ -147,7 +147,7 @@ TEST_CASE("buffer") { REQUIRE((std::memcmp(b1.data(), "hello world", 11) == 0 && b1.size() == 11)); } { - #ifndef E2D_BUILD_WITH_SANITIZER + #ifndef E2D_BUILD_WITH_ASAN const std::size_t msize = std::numeric_limits::max(); REQUIRE_THROWS_AS(buffer(msize), std::bad_alloc); REQUIRE_THROWS_AS(buffer(nullptr, msize), std::bad_alloc);