From 8a6916eabe706432dc83317263b6d111569bdcc0 Mon Sep 17 00:00:00 2001 From: a dinosaur Date: Mon, 25 Mar 2024 23:24:40 +1100 Subject: [PATCH] streamline bundled dependency CMake scripts --- CMakeLists.txt | 5 +- ext/miniz/CMakeLists.txt | 2 +- ext/pugixml/CMakeLists.txt | 265 ++---------------- ext/pugixml/scripts/pugixml-config.cmake.in | 12 - ext/pugixml/scripts/pugixml.pc.in | 11 - ext/pugixml/scripts/pugixml_dll.rc | 45 --- ext/tmxlite/CMakeLists.txt | 80 ++---- ext/tmxlite/src/CMakeLists.txt | 15 - ext/zstd/CMakeLists.txt | 81 +++--- .../AddZstdCompilationFlags.cmake | 121 -------- .../CMakeModules/GetZstdLibraryVersion.cmake | 10 - 11 files changed, 100 insertions(+), 547 deletions(-) delete mode 100644 ext/pugixml/scripts/pugixml-config.cmake.in delete mode 100644 ext/pugixml/scripts/pugixml.pc.in delete mode 100644 ext/pugixml/scripts/pugixml_dll.rc delete mode 100644 ext/tmxlite/src/CMakeLists.txt delete mode 100644 ext/zstd/CMakeModules/AddZstdCompilationFlags.cmake delete mode 100644 ext/zstd/CMakeModules/GetZstdLibraryVersion.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 94175e2..c578149 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,15 +6,14 @@ project(tmx2gba # Options option(TMX2GBA_DKP_INSTALL "Install into DEVKITPRO prefix" OFF) -option(ASAN "Enable address sanitiser" OFF) +option(ENABLE_ASAN "Enable address sanitiser" OFF) -if (ASAN) +if (ENABLE_ASAN) add_compile_options(-fsanitize=address -fno-omit-frame-pointer) add_link_options(-fsanitize=address -shared-libasan) endif() # Libraries -set(TMXLITE_STATIC_LIB ON) set(USE_ZSTD ON) add_subdirectory(ext/miniz) add_subdirectory(ext/pugixml) diff --git a/ext/miniz/CMakeLists.txt b/ext/miniz/CMakeLists.txt index ce002b0..6073185 100644 --- a/ext/miniz/CMakeLists.txt +++ b/ext/miniz/CMakeLists.txt @@ -1,5 +1,5 @@ add_library(miniz miniz.c miniz.h) -add_library(External::miniz ALIAS miniz) +add_library(miniz::miniz ALIAS miniz) target_include_directories(miniz PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/ext/pugixml/CMakeLists.txt b/ext/pugixml/CMakeLists.txt index d3f810e..7e3eed7 100644 --- a/ext/pugixml/CMakeLists.txt +++ b/ext/pugixml/CMakeLists.txt @@ -1,44 +1,4 @@ -cmake_minimum_required(VERSION 3.5) - -# Policy configuration; this *MUST* be specified before project is defined -if(POLICY CMP0091) - cmake_policy(SET CMP0091 NEW) # Enables use of MSVC_RUNTIME_LIBRARY -endif() - -project(pugixml VERSION 1.14 LANGUAGES CXX) - -include(CMakePackageConfigHelpers) -include(CMakeDependentOption) -include(GNUInstallDirs) -include(CTest) - -cmake_dependent_option(PUGIXML_USE_VERSIONED_LIBDIR - "Use a private subdirectory to install the headers and libraries" OFF - "CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF) - -cmake_dependent_option(PUGIXML_USE_POSTFIX - "Use separate postfix for each configuration to make sure you can install multiple build outputs" OFF - "CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF) - -cmake_dependent_option(PUGIXML_STATIC_CRT - "Use static MSVC RT libraries" OFF - "MSVC" OFF) - -cmake_dependent_option(PUGIXML_BUILD_TESTS - "Build pugixml tests" OFF - "BUILD_TESTING;CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF) - -# Custom build defines -set(PUGIXML_BUILD_DEFINES CACHE STRING "Build defines for custom options") -separate_arguments(PUGIXML_BUILD_DEFINES) - -# Technically not needed for this file. This is builtin CMAKE global variable. -option(BUILD_SHARED_LIBS "Build shared instead of static library" OFF) - -# Expose option to build PUGIXML as static as well when the global BUILD_SHARED_LIBS variable is set -cmake_dependent_option(PUGIXML_BUILD_SHARED_AND_STATIC_LIBS - "Build both shared and static libraries" OFF - "BUILD_SHARED_LIBS" OFF) +project(pugixml VERSION 1.14) # Expose options from the pugiconfig.hpp option(PUGIXML_WCHAR_MODE "Enable wchar_t mode" OFF) @@ -51,214 +11,41 @@ option(PUGIXML_NO_EXCEPTIONS "Disable Exceptions" OFF) mark_as_advanced(PUGIXML_NO_XPATH PUGIXML_NO_STL PUGIXML_NO_EXCEPTIONS) set(PUGIXML_PUBLIC_DEFINITIONS - $<$:PUGIXML_WCHAR_MODE> - $<$:PUGIXML_COMPACT> - $<$:PUGIXML_NO_XPATH> - $<$:PUGIXML_NO_STL> - $<$:PUGIXML_NO_EXCEPTIONS>) + $<$:PUGIXML_WCHAR_MODE> + $<$:PUGIXML_COMPACT> + $<$:PUGIXML_NO_XPATH> + $<$:PUGIXML_NO_STL> + $<$:PUGIXML_NO_EXCEPTIONS>) -# This is used to backport a CMake 3.15 feature, but is also forwards compatible -if (NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) - set(CMAKE_MSVC_RUNTIME_LIBRARY - MultiThreaded$<$:Debug>$<$>:DLL>) -endif() +add_library(pugixml-static STATIC + ${PROJECT_SOURCE_DIR}/src/pugixml.cpp) +add_library(pugixml::static ALIAS pugixml-static) if (NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED) - set(CMAKE_CXX_STANDARD_REQUIRED ON) + set_property(TARGET pugixml-static PROPERTY CXX_STANDARD_REQUIRED ON) endif() if (NOT DEFINED CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 11) + set_property(TARGET pugixml-static PROPERTY CXX_STANDARD 11) endif() -if (PUGIXML_USE_POSTFIX) - set(CMAKE_RELWITHDEBINFO_POSTFIX _r) - set(CMAKE_MINSIZEREL_POSTFIX _m) - set(CMAKE_DEBUG_POSTFIX _d) -endif() +set_property(TARGET pugixml-static PROPERTY EXPORT_NAME static) +target_include_directories(pugixml-static PUBLIC + $) +target_compile_definitions(pugixml-static PUBLIC + ${PUGIXML_BUILD_DEFINES} + ${PUGIXML_PUBLIC_DEFINITIONS}) -if (CMAKE_VERSION VERSION_LESS 3.15) - set(msvc-rt $) - - set(msvc-rt-mtd-shared $) - set(msvc-rt-mtd-static $) - set(msvc-rt-mt-shared $) - set(msvc-rt-mt-static $) - unset(msvc-rt) - - set(msvc-rt-mtd-shared $<${msvc-rt-mtd-shared}:-MDd>) - set(msvc-rt-mtd-static $<${msvc-rt-mtd-static}:-MTd>) - set(msvc-rt-mt-shared $<${msvc-rt-mt-shared}:-MD>) - set(msvc-rt-mt-static $<${msvc-rt-mt-static}:-MT>) -endif() - -set(versioned-dir $<$:/pugixml-${PROJECT_VERSION}>) - -set(libs) - -if (BUILD_SHARED_LIBS) - add_library(pugixml-shared SHARED - ${PROJECT_SOURCE_DIR}/scripts/pugixml_dll.rc - ${PROJECT_SOURCE_DIR}/src/pugixml.cpp) - add_library(pugixml::shared ALIAS pugixml-shared) - list(APPEND libs pugixml-shared) - string(CONCAT pugixml.msvc $, - $ - >) - - set_property(TARGET pugixml-shared PROPERTY EXPORT_NAME shared) - target_include_directories(pugixml-shared - PUBLIC - $) - target_compile_definitions(pugixml-shared - PUBLIC - ${PUGIXML_BUILD_DEFINES} - ${PUGIXML_PUBLIC_DEFINITIONS} - PRIVATE - PUGIXML_API=$ - ) - target_compile_options(pugixml-shared - PRIVATE - ${msvc-rt-mtd-shared} - ${msvc-rt-mtd-static} - ${msvc-rt-mt-shared} - ${msvc-rt-mt-static}) -endif() - -if (NOT BUILD_SHARED_LIBS OR PUGIXML_BUILD_SHARED_AND_STATIC_LIBS) - add_library(pugixml-static STATIC - ${PROJECT_SOURCE_DIR}/src/pugixml.cpp) - add_library(pugixml::static ALIAS pugixml-static) - list(APPEND libs pugixml-static) - - set_property(TARGET pugixml-static PROPERTY EXPORT_NAME static) - target_include_directories(pugixml-static - PUBLIC - $) - target_compile_definitions(pugixml-static - PUBLIC - ${PUGIXML_BUILD_DEFINES} - ${PUGIXML_PUBLIC_DEFINITIONS}) - target_compile_options(pugixml-static - PRIVATE - ${msvc-rt-mtd-shared} - ${msvc-rt-mtd-static} - ${msvc-rt-mt-shared} - ${msvc-rt-mt-static}) -endif() - -if (BUILD_SHARED_LIBS) - set(pugixml-alias pugixml-shared) -else() - set(pugixml-alias pugixml-static) -endif() add_library(pugixml INTERFACE) -target_link_libraries(pugixml INTERFACE ${pugixml-alias}) +target_link_libraries(pugixml INTERFACE pugixml-static) add_library(pugixml::pugixml ALIAS pugixml) -set_target_properties(${libs} - PROPERTIES - MSVC_RUNTIME_LIBRARY ${CMAKE_MSVC_RUNTIME_LIBRARY} - EXCLUDE_FROM_ALL ON - POSITION_INDEPENDENT_CODE ON - SOVERSION ${PROJECT_VERSION_MAJOR} - VERSION ${PROJECT_VERSION} - OUTPUT_NAME pugixml) +set_target_properties(pugixml-static PROPERTIES + EXCLUDE_FROM_ALL ON + POSITION_INDEPENDENT_CODE ON + SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${PROJECT_VERSION} + OUTPUT_NAME pugixml) -set_target_properties(${libs} - PROPERTIES - EXCLUDE_FROM_ALL OFF) -set(install-targets pugixml ${libs}) - -configure_package_config_file( - "${PROJECT_SOURCE_DIR}/scripts/pugixml-config.cmake.in" - "${PROJECT_BINARY_DIR}/pugixml-config.cmake" - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} - NO_CHECK_REQUIRED_COMPONENTS_MACRO - NO_SET_AND_CHECK_MACRO) - -write_basic_package_version_file( - "${PROJECT_BINARY_DIR}/pugixml-config-version.cmake" - COMPATIBILITY SameMajorVersion) - -if (PUGIXML_USE_POSTFIX) - if(CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) - set(LIB_POSTFIX ${CMAKE_RELWITHDEBINFO_POSTFIX}) - elseif(CMAKE_BUILD_TYPE MATCHES MinSizeRel) - set(LIB_POSTFIX ${CMAKE_MINSIZEREL_POSTFIX}) - elseif(CMAKE_BUILD_TYPE MATCHES Debug) - set(LIB_POSTFIX ${CMAKE_DEBUG_POSTFIX}) - endif() -endif() - -configure_file(scripts/pugixml.pc.in pugixml.pc @ONLY) - -if (NOT DEFINED PUGIXML_RUNTIME_COMPONENT) - set(PUGIXML_RUNTIME_COMPONENT Runtime) -endif() - -if (NOT DEFINED PUGIXML_LIBRARY_COMPONENT) - set(PUGIXML_LIBRARY_COMPONENT Library) -endif() - -if (NOT DEFINED PUGIXML_DEVELOPMENT_COMPONENT) - set(PUGIXML_DEVELOPMENT_COMPONENT Development) -endif() - -set(namelink-component) -if (NOT CMAKE_VERSION VERSION_LESS 3.12) - set(namelink-component NAMELINK_COMPONENT ${PUGIXML_DEVELOPMENT_COMPONENT}) -endif() -install(TARGETS ${install-targets} - EXPORT pugixml-targets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${PUGIXML_RUNTIME_COMPONENT} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${PUGIXML_LIBRARY_COMPONENT} ${namelink-component} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${PUGIXML_DEVELOPMENT_COMPONENT} - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}${versioned-dir}) - -install(EXPORT pugixml-targets - NAMESPACE pugixml:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pugixml COMPONENT ${PUGIXML_DEVELOPMENT_COMPONENT}) - -export(EXPORT pugixml-targets - NAMESPACE pugixml::) - -install(FILES - "${PROJECT_BINARY_DIR}/pugixml-config-version.cmake" - "${PROJECT_BINARY_DIR}/pugixml-config.cmake" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pugixml COMPONENT ${PUGIXML_DEVELOPMENT_COMPONENT}) - -install(FILES ${PROJECT_BINARY_DIR}/pugixml.pc - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT ${PUGIXML_DEVELOPMENT_COMPONENT}) - -install( - FILES - "${PROJECT_SOURCE_DIR}/src/pugiconfig.hpp" - "${PROJECT_SOURCE_DIR}/src/pugixml.hpp" - DESTINATION - ${CMAKE_INSTALL_INCLUDEDIR}${versioned-dir} COMPONENT ${PUGIXML_DEVELOPMENT_COMPONENT}) - -if (PUGIXML_BUILD_TESTS) - set(fuzz-pattern "tests/fuzz_*.cpp") - set(test-pattern "tests/*.cpp") - if (CMAKE_VERSION VERSION_GREATER 3.11) - list(INSERT fuzz-pattern 0 CONFIGURE_DEPENDS) - list(INSERT test-pattern 0 CONFIGURE_DEPENDS) - endif() - file(GLOB test-sources ${test-pattern}) - file(GLOB fuzz-sources ${fuzz-pattern}) - list(REMOVE_ITEM test-sources ${fuzz-sources}) - - add_custom_target(check - COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure) - - add_executable(pugixml-check ${test-sources}) - add_test(NAME pugixml::test - COMMAND pugixml-check - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - add_dependencies(check pugixml-check) - target_link_libraries(pugixml-check - PRIVATE - pugixml::pugixml) -endif() +set_target_properties(pugixml-static PROPERTIES + EXCLUDE_FROM_ALL OFF) diff --git a/ext/pugixml/scripts/pugixml-config.cmake.in b/ext/pugixml/scripts/pugixml-config.cmake.in deleted file mode 100644 index d4282f9..0000000 --- a/ext/pugixml/scripts/pugixml-config.cmake.in +++ /dev/null @@ -1,12 +0,0 @@ -@PACKAGE_INIT@ - -include("${CMAKE_CURRENT_LIST_DIR}/pugixml-targets.cmake") - -# If the user is not requiring 1.11 (either by explicitly requesting an older -# version or not requesting one at all), provide the old imported target name -# for compatibility. -if (NOT TARGET pugixml AND (NOT DEFINED PACKAGE_FIND_VERSION OR PACKAGE_FIND_VERSION VERSION_LESS "1.11")) - add_library(pugixml INTERFACE IMPORTED) - # Equivalent to target_link_libraries INTERFACE, but compatible with CMake 3.10 - set_target_properties(pugixml PROPERTIES INTERFACE_LINK_LIBRARIES pugixml::pugixml) -endif () diff --git a/ext/pugixml/scripts/pugixml.pc.in b/ext/pugixml/scripts/pugixml.pc.in deleted file mode 100644 index 7958774..0000000 --- a/ext/pugixml/scripts/pugixml.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@@INSTALL_SUFFIX@ -libdir=@CMAKE_INSTALL_FULL_LIBDIR@@INSTALL_SUFFIX@ - -Name: pugixml -Description: Light-weight, simple and fast XML parser for C++ with XPath support. -URL: https://pugixml.org/ -Version: @pugixml_VERSION@ -Cflags: -I${includedir} -Libs: -L${libdir} -lpugixml@LIB_POSTFIX@ diff --git a/ext/pugixml/scripts/pugixml_dll.rc b/ext/pugixml/scripts/pugixml_dll.rc deleted file mode 100644 index e020b54..0000000 --- a/ext/pugixml/scripts/pugixml_dll.rc +++ /dev/null @@ -1,45 +0,0 @@ -#include - -#define PUGIXML_VERSION_MAJOR 1 -#define PUGIXML_VERSION_MINOR 14 -#define PUGIXML_VERSION_PATCH 0 -#define PUGIXML_VERSION_NUMBER "1.14.0\0" - -#if defined(GCC_WINDRES) || defined(__MINGW32__) || defined(__CYGWIN__) -VS_VERSION_INFO VERSIONINFO -#else -VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE -#endif - FILEVERSION PUGIXML_VERSION_MAJOR,PUGIXML_VERSION_MINOR,PUGIXML_VERSION_PATCH,0 - PRODUCTVERSION PUGIXML_VERSION_MAJOR,PUGIXML_VERSION_MINOR,PUGIXML_VERSION_PATCH,0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS 1 -#else - FILEFLAGS 0 -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - BEGIN - VALUE "CompanyName", "zeux/pugixml\0" - VALUE "FileDescription", "pugixml library\0" - VALUE "FileVersion", PUGIXML_VERSION_NUMBER - VALUE "InternalName", "pugixml.dll\0" - VALUE "LegalCopyright", "Copyright (C) 2006-2023, by Arseny Kapoulkine\0" - VALUE "OriginalFilename", "pugixml.dll\0" - VALUE "ProductName", "pugixml\0" - VALUE "ProductVersion", PUGIXML_VERSION_NUMBER - VALUE "Comments", "For more information visit https://github.com/zeux/pugixml/\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END diff --git a/ext/tmxlite/CMakeLists.txt b/ext/tmxlite/CMakeLists.txt index de4ce55..c524f7d 100644 --- a/ext/tmxlite/CMakeLists.txt +++ b/ext/tmxlite/CMakeLists.txt @@ -1,84 +1,50 @@ project(tmxlite VERSION 1.3.1) -set(PROJECT_NAME tmxlite) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/") -if(NOT TMXLITE_STATIC_LIB) - SET(TMXLITE_STATIC_LIB FALSE CACHE BOOL "Should tmxlite be built as a static or shared lib?") -endif() +set(USE_RTTI TRUE CACHE BOOL "Use run time type information?") -SET(PROJECT_STATIC_RUNTIME FALSE CACHE BOOL "Use statically linked standard/runtime libraries?") - -SET(USE_RTTI TRUE CACHE BOOL "Use run time type information?") - -SET(USE_EXTLIBS FALSE CACHE BOOL "Use external zlib, zstd and pugixml libraries instead of the included source?") -SET(USE_ZSTD FALSE CACHE BOOL "Enable zstd compression? (Already set to true if USE_EXTLIBS is true)") - -if(USE_RTTI) - if(CMAKE_COMPILER_IS_GNUCXX OR APPLE) - if(PROJECT_STATIC_RUNTIME) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -static") - else() - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") - endif() - endif() -else() - if(CMAKE_COMPILER_IS_GNUCXX OR APPLE) - if(PROJECT_STATIC_RUNTIME) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fno-rtti -static") - else() - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fno-rtti") - endif() - endif() -endif() - -if(TMXLITE_STATIC_LIB) - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -D_DEBUG_ -DTMXLITE_STATIC") - SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG -DTMXLITE_STATIC") - SET(CMAKE_DEBUG_POSTFIX -s-d) - SET(CMAKE_RELEASE_POSTFIX -s) -else() - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -D_DEBUG_") - SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG") - SET(CMAKE_DEBUG_POSTFIX -d) -endif() +set(USE_EXTLIBS FALSE CACHE BOOL "Use external zlib, zstd and pugixml libraries instead of the included source?") +set(USE_ZSTD FALSE CACHE BOOL "Enable zstd compression? (Already set to true if USE_EXTLIBS is true)") # includes the list of source files in the src directory set(PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) -include(${PROJECT_DIR}/CMakeLists.txt) +file(GLOB PROJECT_SRC ${PROJECT_DIR}/*.cpp) -if(TMXLITE_STATIC_LIB) - add_library(${PROJECT_NAME} STATIC ${PROJECT_SRC}) -else() - add_library(${PROJECT_NAME} SHARED ${PROJECT_SRC}) -endif() +add_library(tmxlite STATIC ${PROJECT_SRC}) -set_target_properties(${PROJECT_NAME} PROPERTIES +set_target_properties(tmxlite PROPERTIES CXX_STANDARD 14 CXX_STANDARD_REQUIRED ON) +target_compile_definitions(tmxlite PRIVATE $<$:_DEBUG_> TMXLITE_STATIC) +target_compile_options(tmxlite PRIVATE -Wall) +if (NOT USE_RTTI AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") + target_compile_options(tmxlite PRIVATE -fno-rtti) +endif() + # disable msvc warning -if(MSVC) - target_compile_definitions(${PROJECT_NAME} PRIVATE _CRT_SECURE_NO_WARNINGS) +if (MSVC) + target_compile_definitions(tmxlite PRIVATE _CRT_SECURE_NO_WARNINGS) endif() # if we want external zip and xml libs find them and tell the compiler -if(USE_EXTLIBS) +if (USE_EXTLIBS) find_package(ZLIB REQUIRED) find_package(PUGIXML REQUIRED) find_package(Zstd REQUIRED) - target_compile_definitions(${PROJECT_NAME} PRIVATE USE_EXTLIBS USE_ZSTD) - target_include_directories(${PROJECT_NAME} PRIVATE ${ZLIB_INCLUDE_DIRS} ${PUGIXML_INCLUDE_DIR} ${ZSTD_INCLUDE_DIR}) - target_link_libraries(${PROJECT_NAME} ${ZLIB_LIBRARIES} ${PUGIXML_LIBRARY} ${ZSTD_LIBRARY}) + target_compile_definitions(tmxlite PRIVATE USE_EXTLIBS USE_ZSTD) + target_include_directories(tmxlite PRIVATE ${ZLIB_INCLUDE_DIRS} ${PUGIXML_INCLUDE_DIR} ${ZSTD_INCLUDE_DIR}) + target_link_libraries(tmxlite ${ZLIB_LIBRARIES} ${PUGIXML_LIBRARY} ${ZSTD_LIBRARY}) else() # add miniz and pugixml from source - target_link_libraries(${PROJECT_NAME} pugixml::static External::miniz) + target_link_libraries(tmxlite pugixml::static miniz::miniz) - if(USE_ZSTD) - target_compile_definitions(${PROJECT_NAME} PRIVATE USE_ZSTD) - target_link_libraries(${PROJECT_NAME} zstd::static) + if (USE_ZSTD) + target_compile_definitions(tmxlite PRIVATE USE_ZSTD) + target_link_libraries(tmxlite zstd::static) endif() endif() -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) +target_include_directories(tmxlite PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/ext/tmxlite/src/CMakeLists.txt b/ext/tmxlite/src/CMakeLists.txt deleted file mode 100644 index b62a84d..0000000 --- a/ext/tmxlite/src/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -set(PROJECT_SRC - ${PROJECT_DIR}/FreeFuncs.cpp - ${PROJECT_DIR}/ImageLayer.cpp - ${PROJECT_DIR}/Map.cpp - ${PROJECT_DIR}/Object.cpp - ${PROJECT_DIR}/ObjectGroup.cpp - ${PROJECT_DIR}/Property.cpp - ${PROJECT_DIR}/TileLayer.cpp - ${PROJECT_DIR}/LayerGroup.cpp - ${PROJECT_DIR}/Tileset.cpp - ${PROJECT_DIR}/ObjectTypes.cpp) - - set(LIB_SRC - ${PROJECT_DIR}/miniz.c - ${PROJECT_DIR}/detail/pugixml.cpp) diff --git a/ext/zstd/CMakeLists.txt b/ext/zstd/CMakeLists.txt index 376bbcc..8835d7d 100644 --- a/ext/zstd/CMakeLists.txt +++ b/ext/zstd/CMakeLists.txt @@ -7,21 +7,51 @@ # in the COPYING file in the root directory of this source tree). # ################################################################ -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") - set(LIBRARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) # Parse version -include(GetZstdLibraryVersion) -GetZstdLibraryVersion(${LIBRARY_DIR}/zstd.h zstd_VERSION_MAJOR zstd_VERSION_MINOR zstd_VERSION_PATCH) +file(READ ${LIBRARY_DIR}/zstd.h CONTENT) # Read file content + +string(REGEX MATCH ".*define ZSTD_VERSION_MAJOR *([0-9]+).*define ZSTD_VERSION_MINOR *([0-9]+).*define ZSTD_VERSION_RELEASE *([0-9]+)" VERSION_REGEX "${CONTENT}") +set(zstd_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE) +set(zstd_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE) +set(zstd_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE) enable_language(ASM) #----------------------------------------------------------------------------- # Add extra compilation flags #----------------------------------------------------------------------------- -include(AddZstdCompilationFlags) -ADD_ZSTD_COMPILATION_FLAGS() +function (add_zstd_compilation_flags _target) + if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" OR MINGW) + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND MSVC) + # clang-cl normally maps -Wall to -Weverything. + target_compile_options(${_target} PRIVATE "/clang:-Wall") + else() + target_compile_options(${_target} PRIVATE -Wall) + endif() + target_compile_options(${_target} PRIVATE -Wextra -Wundef -Wshadow -Wcast-align -Wcast-qual) + target_compile_options(${_target} PRIVATE $<$:-Wstrict-prototypes>) + # Enable asserts in Debug mode + if (CMAKE_BUILD_TYPE MATCHES "Debug") + target_compile_options(${_target} PRIVATE DEBUGLEVEL=1) + endif() + # Add noexecstack flags + target_link_options(${_target} PRIVATE -z noexecstack) # LDFLAGS + target_compile_options(${_target} PRIVATE -Qunused-arguments -Wa,--noexecstack) # CFLAGS & CXXFLAGS + elseif (MSVC) + set(ACTIVATE_MULTITHREADED_COMPILATION "ON" CACHE BOOL "activate multi-threaded compilation (/MP flag)") + if (CMAKE_GENERATOR MATCHES "Visual Studio" AND ACTIVATE_MULTITHREADED_COMPILATION) + target_compile_options(${_target} PRIVATE "/MP") + endif () + # UNICODE SUPPORT + target_compile_definitions(${_target} PRIVATE _UNICODE UNICODE) + # Enable asserts in Debug mode + if (CMAKE_BUILD_TYPE MATCHES "Debug") + target_compile_definitions(${_target} PRIVATE DEBUGLEVEL=1) + endif() + endif() +endfunction() # Legacy support option(ZSTD_LEGACY_SUPPORT "LEGACY SUPPORT" ON) @@ -95,36 +125,27 @@ endif() # macros. set_source_files_properties(${Sources} PROPERTIES LANGUAGE C) -# Split project to static and shared libraries build -set(library_targets) -add_library(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources}) -add_library(zstd::shared ALIAS libzstd_shared) -list(APPEND library_targets libzstd_shared) - add_library(libzstd_static STATIC ${Sources} ${Headers}) add_library(zstd::static ALIAS libzstd_static) -list(APPEND library_targets libzstd_static) -foreach (LIB ${library_targets}) - # Define library directory, where sources and header files are located - target_include_directories(${LIB} PUBLIC ${LIBRARY_DIR}) - target_include_directories(${LIB} PRIVATE ${LIBRARY_DIR}/common) +add_zstd_compilation_flags(libzstd_static) - if (ZSTD_LEGACY_SUPPORT) - include_directories(${LIBRARY_LEGACY_DIR}) - target_compile_definitions(${LIB} PRIVATE ZSTD_LEGACY_SUPPORT=${ZSTD_LEGACY_LEVEL}) - else() - target_compile_definitions(${LIB} PRIVATE ZSTD_LEGACY_SUPPORT=0) - endif() -endforeach() +# Define library directory, where sources and header files are located +target_include_directories(libzstd_static PUBLIC ${LIBRARY_DIR}) +target_include_directories(libzstd_static PRIVATE ${LIBRARY_DIR}/common) + +if (ZSTD_LEGACY_SUPPORT) + include_directories(${LIBRARY_LEGACY_DIR}) + target_compile_definitions(libzstd_static PRIVATE ZSTD_LEGACY_SUPPORT=${ZSTD_LEGACY_LEVEL}) +else() + target_compile_definitions(libzstd_static PRIVATE ZSTD_LEGACY_SUPPORT=0) +endif() if (ZSTD_MULTITHREAD_SUPPORT) - target_compile_definitions(libzstd_shared PRIVATE ZSTD_MULTITHREAD) target_compile_definitions(libzstd_static PRIVATE ZSTD_MULTITHREAD) if (UNIX) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) - target_link_libraries(libzstd_shared Threads::Threads) target_link_libraries(libzstd_static Threads::Threads) if (NOT CMAKE_USE_PTHREADS_INIT) message(SEND_ERROR "ZSTD currently does not support thread libraries other than pthreads") @@ -135,16 +156,10 @@ endif() # Add specific compile definitions for MSVC project if (MSVC) set(COMMON_DEFINITIONS ZSTD_DISABLE_ASM _CRT_SECURE_NO_WARNINGS) - target_compile_definitions(libzstd_shared PRIVATE ZSTD_DLL_EXPORT=1 ZSTD_HEAPMODE=0 _CONSOLE ${COMMON_DEFINITIONS}) target_compile_definitions(libzstd_static PRIVATE ZSTD_HEAPMODE=0 ${COMMON_DEFINITIONS}) endif() -# Define static and shared library names -set_target_properties(libzstd_shared PROPERTIES - OUTPUT_NAME zstd - VERSION ${zstd_VERSION_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH} - SOVERSION ${zstd_VERSION_MAJOR}) - +# Define static library names set_property(TARGET libzstd_static PROPERTY POSITION_INDEPENDENT_CODE ON) # With MSVC static library needs to be renamed to avoid conflict with import library diff --git a/ext/zstd/CMakeModules/AddZstdCompilationFlags.cmake b/ext/zstd/CMakeModules/AddZstdCompilationFlags.cmake deleted file mode 100644 index 5f17998..0000000 --- a/ext/zstd/CMakeModules/AddZstdCompilationFlags.cmake +++ /dev/null @@ -1,121 +0,0 @@ -include(CheckCXXCompilerFlag) -include(CheckCCompilerFlag) -# VERSION_GREATER_EQUAL requires CMake 3.7 or later. -# https://cmake.org/cmake/help/latest/command/if.html#version-greater-equal -if (CMAKE_VERSION VERSION_LESS 3.18) - set(ZSTD_HAVE_CHECK_LINKER_FLAG false) -else () - set(ZSTD_HAVE_CHECK_LINKER_FLAG true) -endif () -if (ZSTD_HAVE_CHECK_LINKER_FLAG) - include(CheckLinkerFlag) -endif() - -function(EnableCompilerFlag _flag _C _CXX _LD) - string(REGEX REPLACE "\\+" "PLUS" varname "${_flag}") - string(REGEX REPLACE "[^A-Za-z0-9]+" "_" varname "${varname}") - string(REGEX REPLACE "^_+" "" varname "${varname}") - string(TOUPPER "${varname}" varname) - if (_C) - CHECK_C_COMPILER_FLAG(${_flag} C_FLAG_${varname}) - if (C_FLAG_${varname}) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flag}" PARENT_SCOPE) - endif () - endif () - if (_CXX) - CHECK_CXX_COMPILER_FLAG(${_flag} CXX_FLAG_${varname}) - if (CXX_FLAG_${varname}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag}" PARENT_SCOPE) - endif () - endif () - if (_LD) - # We never add a linker flag with CMake < 3.18. We will - # implement CHECK_LINKER_FLAG() like feature for CMake < 3.18 - # or require CMake >= 3.18 when we need to add a required - # linker flag in future. - # - # We also skip linker flags check for MSVC compilers (which includes - # clang-cl) since currently check_linker_flag() doesn't give correct - # results for this configuration, - # see: https://gitlab.kitware.com/cmake/cmake/-/issues/22023 - if (ZSTD_HAVE_CHECK_LINKER_FLAG AND NOT MSVC) - CHECK_LINKER_FLAG(C ${_flag} LD_FLAG_${varname}) - else () - set(LD_FLAG_${varname} false) - endif () - if (LD_FLAG_${varname}) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_flag}" PARENT_SCOPE) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_flag}" PARENT_SCOPE) - endif () - endif () -endfunction() - -macro(ADD_ZSTD_COMPILATION_FLAGS) - if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" OR MINGW) #Not only UNIX but also WIN32 for MinGW - # It's possible to select the exact standard used for compilation. - # It's not necessary, but can be employed for specific purposes. - # Note that zstd source code is compatible with both C++98 and above - # and C-gnu90 (c90 + long long + variadic macros ) and above - # EnableCompilerFlag("-std=c++11" false true) # Set C++ compilation to c++11 standard - # EnableCompilerFlag("-std=c99" true false) # Set C compiation to c99 standard - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND MSVC) - # clang-cl normally maps -Wall to -Weverything. - EnableCompilerFlag("/clang:-Wall" true true false) - else () - EnableCompilerFlag("-Wall" true true false) - endif () - EnableCompilerFlag("-Wextra" true true false) - EnableCompilerFlag("-Wundef" true true false) - EnableCompilerFlag("-Wshadow" true true false) - EnableCompilerFlag("-Wcast-align" true true false) - EnableCompilerFlag("-Wcast-qual" true true false) - EnableCompilerFlag("-Wstrict-prototypes" true false false) - # Enable asserts in Debug mode - if (CMAKE_BUILD_TYPE MATCHES "Debug") - EnableCompilerFlag("-DDEBUGLEVEL=1" true true false) - endif () - # Add noexecstack flags - # LDFLAGS - EnableCompilerFlag("-z noexecstack" false false true) - # CFLAGS & CXXFLAGS - EnableCompilerFlag("-Qunused-arguments" true true false) - EnableCompilerFlag("-Wa,--noexecstack" true true false) - elseif (MSVC) # Add specific compilation flags for Windows Visual - - set(ACTIVATE_MULTITHREADED_COMPILATION "ON" CACHE BOOL "activate multi-threaded compilation (/MP flag)") - if (CMAKE_GENERATOR MATCHES "Visual Studio" AND ACTIVATE_MULTITHREADED_COMPILATION) - EnableCompilerFlag("/MP" true true false) - endif () - - # UNICODE SUPPORT - EnableCompilerFlag("/D_UNICODE" true true false) - EnableCompilerFlag("/DUNICODE" true true false) - # Enable asserts in Debug mode - if (CMAKE_BUILD_TYPE MATCHES "Debug") - EnableCompilerFlag("/DDEBUGLEVEL=1" true true false) - endif () - endif () - - # Remove duplicates compilation flags - foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if( ${flag_var} ) - separate_arguments(${flag_var}) - string(REPLACE ";" " " ${flag_var} "${${flag_var}}") - endif() - endforeach () - - if (MSVC AND ZSTD_USE_STATIC_RUNTIME) - foreach (flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if ( ${flag_var} ) - string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") - endif() - endforeach () - endif () - -endmacro() diff --git a/ext/zstd/CMakeModules/GetZstdLibraryVersion.cmake b/ext/zstd/CMakeModules/GetZstdLibraryVersion.cmake deleted file mode 100644 index e8ed606..0000000 --- a/ext/zstd/CMakeModules/GetZstdLibraryVersion.cmake +++ /dev/null @@ -1,10 +0,0 @@ -function(GetZstdLibraryVersion _header _major _minor _patch) - # Read file content - file(READ ${_header} CONTENT) - - string(REGEX MATCH ".*define ZSTD_VERSION_MAJOR *([0-9]+).*define ZSTD_VERSION_MINOR *([0-9]+).*define ZSTD_VERSION_RELEASE *([0-9]+)" VERSION_REGEX "${CONTENT}") - set(${_major} ${CMAKE_MATCH_1} PARENT_SCOPE) - set(${_minor} ${CMAKE_MATCH_2} PARENT_SCOPE) - set(${_patch} ${CMAKE_MATCH_3} PARENT_SCOPE) -endfunction() -