From 9ca6adee4f6f01d83fd1f5ece5c4b84396079ccc Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sun, 4 Feb 2024 13:03:28 +0100 Subject: [PATCH] reorg + selfmanage externals --- CMakeLists.txt | 74 ++++++++++++++++--- external/CMakeLists.txt | 13 ++++ src/CMakeLists.txt | 12 +++ .../solanaceae}/contact/components.hpp | 0 .../solanaceae}/contact/components_id.inl | 0 .../solanaceae}/contact/contact_model3.hpp | 0 6 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 external/CMakeLists.txt create mode 100644 src/CMakeLists.txt rename {solanaceae => src/solanaceae}/contact/components.hpp (100%) rename {solanaceae => src/solanaceae}/contact/components_id.inl (100%) rename {solanaceae => src/solanaceae}/contact/contact_model3.hpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45836b2..c0d55af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,66 @@ -cmake_minimum_required(VERSION 3.9 FATAL_ERROR) +cmake_minimum_required(VERSION 3.24 FATAL_ERROR) -project(solanaceae) +# cmake setup begin +project(solanaceae_contact) -add_library(solanaceae_contact INTERFACE - #./solanaceae/contact/components.hpp - #./solanaceae/contact/components_id.inl - #./solanaceae/contact/contact_model3.hpp -) +if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + set(SOLANACEAE_CONTACT_STANDALONE ON) +else() + set(SOLANACEAE_CONTACT_STANDALONE OFF) +endif() +message("II SOLANACEAE_CONTACT_STANDALONE " ${SOLANACEAE_CONTACT_STANDALONE}) -target_include_directories(solanaceae_contact INTERFACE .) -target_compile_features(solanaceae_contact INTERFACE cxx_std_17) -target_link_libraries(solanaceae_contact INTERFACE - EnTT::EnTT -) +if (SOLANACEAE_CONTACT_STANDALONE) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + # defaulting to debug mode, if not specified + if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Debug") + endif() + + # setup my vim ycm :D + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + + # more paths + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +endif() + +# external libs +add_subdirectory(./external EXCLUDE_FROM_ALL) # before increasing warn levels, sad :( + +if (SOLANACEAE_CONTACT_STANDALONE) + set(CMAKE_CXX_EXTENSIONS OFF) + + # bump up warning levels appropriately for clang, gcc & msvc + if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + add_compile_options( + -Wall -Wextra # Reasonable and standard + -Wpedantic # Warn if non-standard C++ is used + -Wunused # Warn on anything being unused + #-Wconversion # Warn on type conversions that may lose data + #-Wsign-conversion # Warn on sign conversions + -Wshadow # Warn if a variable declaration shadows one from a parent context + ) + + if (NOT WIN32) + #link_libraries(-fsanitize=address) + #link_libraries(-fsanitize=address,undefined) + #link_libraries(-fsanitize-address-use-after-scope) + #link_libraries(-fsanitize=undefined) + endif() + elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC") + if (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") + string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") + endif() + endif() + +endif() + +# cmake setup end + +add_subdirectory(./src) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt new file mode 100644 index 0000000..d9ce071 --- /dev/null +++ b/external/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.24 FATAL_ERROR) + +include(FetchContent) + +if (NOT TARGET EnTT::EnTT) + FetchContent_Declare(EnTT + GIT_REPOSITORY https://github.com/skypjack/entt.git + GIT_TAG v3.12.2 + EXCLUDE_FROM_ALL + ) + FetchContent_MakeAvailable(EnTT) +endif() + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..10144d7 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,12 @@ +add_library(solanaceae_contact INTERFACE + #./solanaceae/contact/components.hpp + #./solanaceae/contact/components_id.inl + #./solanaceae/contact/contact_model3.hpp +) + +target_include_directories(solanaceae_contact INTERFACE .) +target_compile_features(solanaceae_contact INTERFACE cxx_std_17) +target_link_libraries(solanaceae_contact INTERFACE + EnTT::EnTT +) + diff --git a/solanaceae/contact/components.hpp b/src/solanaceae/contact/components.hpp similarity index 100% rename from solanaceae/contact/components.hpp rename to src/solanaceae/contact/components.hpp diff --git a/solanaceae/contact/components_id.inl b/src/solanaceae/contact/components_id.inl similarity index 100% rename from solanaceae/contact/components_id.inl rename to src/solanaceae/contact/components_id.inl diff --git a/solanaceae/contact/contact_model3.hpp b/src/solanaceae/contact/contact_model3.hpp similarity index 100% rename from solanaceae/contact/contact_model3.hpp rename to src/solanaceae/contact/contact_model3.hpp