mirror of
https://github.com/ScrelliCopter/tmx2gba.git
synced 2025-02-21 03:29:25 +11:00
streamline bundled dependency CMake scripts
This commit is contained in:
@@ -6,15 +6,14 @@ project(tmx2gba
|
|||||||
|
|
||||||
# Options
|
# Options
|
||||||
option(TMX2GBA_DKP_INSTALL "Install into DEVKITPRO prefix" OFF)
|
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_compile_options(-fsanitize=address -fno-omit-frame-pointer)
|
||||||
add_link_options(-fsanitize=address -shared-libasan)
|
add_link_options(-fsanitize=address -shared-libasan)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Libraries
|
# Libraries
|
||||||
set(TMXLITE_STATIC_LIB ON)
|
|
||||||
set(USE_ZSTD ON)
|
set(USE_ZSTD ON)
|
||||||
add_subdirectory(ext/miniz)
|
add_subdirectory(ext/miniz)
|
||||||
add_subdirectory(ext/pugixml)
|
add_subdirectory(ext/pugixml)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
add_library(miniz
|
add_library(miniz
|
||||||
miniz.c miniz.h)
|
miniz.c miniz.h)
|
||||||
add_library(External::miniz ALIAS miniz)
|
add_library(miniz::miniz ALIAS miniz)
|
||||||
target_include_directories(miniz
|
target_include_directories(miniz
|
||||||
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|||||||
@@ -1,44 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.5)
|
project(pugixml VERSION 1.14)
|
||||||
|
|
||||||
# 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)
|
|
||||||
|
|
||||||
# Expose options from the pugiconfig.hpp
|
# Expose options from the pugiconfig.hpp
|
||||||
option(PUGIXML_WCHAR_MODE "Enable wchar_t mode" OFF)
|
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)
|
mark_as_advanced(PUGIXML_NO_XPATH PUGIXML_NO_STL PUGIXML_NO_EXCEPTIONS)
|
||||||
|
|
||||||
set(PUGIXML_PUBLIC_DEFINITIONS
|
set(PUGIXML_PUBLIC_DEFINITIONS
|
||||||
$<$<BOOL:${PUGIXML_WCHAR_MODE}>:PUGIXML_WCHAR_MODE>
|
$<$<BOOL:${PUGIXML_WCHAR_MODE}>:PUGIXML_WCHAR_MODE>
|
||||||
$<$<BOOL:${PUGIXML_COMPACT}>:PUGIXML_COMPACT>
|
$<$<BOOL:${PUGIXML_COMPACT}>:PUGIXML_COMPACT>
|
||||||
$<$<BOOL:${PUGIXML_NO_XPATH}>:PUGIXML_NO_XPATH>
|
$<$<BOOL:${PUGIXML_NO_XPATH}>:PUGIXML_NO_XPATH>
|
||||||
$<$<BOOL:${PUGIXML_NO_STL}>:PUGIXML_NO_STL>
|
$<$<BOOL:${PUGIXML_NO_STL}>:PUGIXML_NO_STL>
|
||||||
$<$<BOOL:${PUGIXML_NO_EXCEPTIONS}>:PUGIXML_NO_EXCEPTIONS>)
|
$<$<BOOL:${PUGIXML_NO_EXCEPTIONS}>:PUGIXML_NO_EXCEPTIONS>)
|
||||||
|
|
||||||
# This is used to backport a CMake 3.15 feature, but is also forwards compatible
|
add_library(pugixml-static STATIC
|
||||||
if (NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY)
|
${PROJECT_SOURCE_DIR}/src/pugixml.cpp)
|
||||||
set(CMAKE_MSVC_RUNTIME_LIBRARY
|
add_library(pugixml::static ALIAS pugixml-static)
|
||||||
MultiThreaded$<$<CONFIG:Debug>:Debug>$<$<NOT:$<BOOL:${PUGIXML_STATIC_CRT}>>:DLL>)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED)
|
if (NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set_property(TARGET pugixml-static PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT DEFINED CMAKE_CXX_STANDARD)
|
if (NOT DEFINED CMAKE_CXX_STANDARD)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set_property(TARGET pugixml-static PROPERTY CXX_STANDARD 11)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (PUGIXML_USE_POSTFIX)
|
set_property(TARGET pugixml-static PROPERTY EXPORT_NAME static)
|
||||||
set(CMAKE_RELWITHDEBINFO_POSTFIX _r)
|
target_include_directories(pugixml-static PUBLIC
|
||||||
set(CMAKE_MINSIZEREL_POSTFIX _m)
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
|
||||||
set(CMAKE_DEBUG_POSTFIX _d)
|
target_compile_definitions(pugixml-static PUBLIC
|
||||||
endif()
|
${PUGIXML_BUILD_DEFINES}
|
||||||
|
${PUGIXML_PUBLIC_DEFINITIONS})
|
||||||
|
|
||||||
if (CMAKE_VERSION VERSION_LESS 3.15)
|
|
||||||
set(msvc-rt $<TARGET_PROPERTY:MSVC_RUNTIME_LIBRARY>)
|
|
||||||
|
|
||||||
set(msvc-rt-mtd-shared $<STREQUAL:${msvc-rt},MultiThreadedDebugDLL>)
|
|
||||||
set(msvc-rt-mtd-static $<STREQUAL:${msvc-rt},MultiThreadedDebug>)
|
|
||||||
set(msvc-rt-mt-shared $<STREQUAL:${msvc-rt},MultiThreadedDLL>)
|
|
||||||
set(msvc-rt-mt-static $<STREQUAL:${msvc-rt},MultiThreaded>)
|
|
||||||
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 $<$<BOOL:${PUGIXML_USE_VERSIONED_LIBDIR}>:/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 $<OR:
|
|
||||||
$<STREQUAL:${CMAKE_CXX_COMPILER_FRONTEND_VARIANT},MSVC>,
|
|
||||||
$<CXX_COMPILER_ID:MSVC>
|
|
||||||
>)
|
|
||||||
|
|
||||||
set_property(TARGET pugixml-shared PROPERTY EXPORT_NAME shared)
|
|
||||||
target_include_directories(pugixml-shared
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
|
|
||||||
target_compile_definitions(pugixml-shared
|
|
||||||
PUBLIC
|
|
||||||
${PUGIXML_BUILD_DEFINES}
|
|
||||||
${PUGIXML_PUBLIC_DEFINITIONS}
|
|
||||||
PRIVATE
|
|
||||||
PUGIXML_API=$<IF:${pugixml.msvc},__declspec\(dllexport\),__attribute__\(\(visibility\("default"\)\)\)>
|
|
||||||
)
|
|
||||||
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
|
|
||||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
|
|
||||||
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)
|
add_library(pugixml INTERFACE)
|
||||||
target_link_libraries(pugixml INTERFACE ${pugixml-alias})
|
target_link_libraries(pugixml INTERFACE pugixml-static)
|
||||||
add_library(pugixml::pugixml ALIAS pugixml)
|
add_library(pugixml::pugixml ALIAS pugixml)
|
||||||
|
|
||||||
set_target_properties(${libs}
|
set_target_properties(pugixml-static PROPERTIES
|
||||||
PROPERTIES
|
EXCLUDE_FROM_ALL ON
|
||||||
MSVC_RUNTIME_LIBRARY ${CMAKE_MSVC_RUNTIME_LIBRARY}
|
POSITION_INDEPENDENT_CODE ON
|
||||||
EXCLUDE_FROM_ALL ON
|
SOVERSION ${PROJECT_VERSION_MAJOR}
|
||||||
POSITION_INDEPENDENT_CODE ON
|
VERSION ${PROJECT_VERSION}
|
||||||
SOVERSION ${PROJECT_VERSION_MAJOR}
|
OUTPUT_NAME pugixml)
|
||||||
VERSION ${PROJECT_VERSION}
|
|
||||||
OUTPUT_NAME pugixml)
|
|
||||||
|
|
||||||
set_target_properties(${libs}
|
set_target_properties(pugixml-static PROPERTIES
|
||||||
PROPERTIES
|
EXCLUDE_FROM_ALL OFF)
|
||||||
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()
|
|
||||||
|
|||||||
@@ -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 ()
|
|
||||||
@@ -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@
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
#include <winver.h>
|
|
||||||
|
|
||||||
#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
|
|
||||||
@@ -1,84 +1,50 @@
|
|||||||
project(tmxlite VERSION 1.3.1)
|
project(tmxlite VERSION 1.3.1)
|
||||||
set(PROJECT_NAME tmxlite)
|
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/")
|
||||||
|
|
||||||
if(NOT TMXLITE_STATIC_LIB)
|
set(USE_RTTI TRUE CACHE BOOL "Use run time type information?")
|
||||||
SET(TMXLITE_STATIC_LIB FALSE CACHE BOOL "Should tmxlite be built as a static or shared lib?")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
SET(PROJECT_STATIC_RUNTIME FALSE CACHE BOOL "Use statically linked standard/runtime libraries?")
|
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)")
|
||||||
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()
|
|
||||||
|
|
||||||
# includes the list of source files in the src directory
|
# includes the list of source files in the src directory
|
||||||
set(PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
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(tmxlite STATIC ${PROJECT_SRC})
|
||||||
add_library(${PROJECT_NAME} STATIC ${PROJECT_SRC})
|
|
||||||
else()
|
|
||||||
add_library(${PROJECT_NAME} SHARED ${PROJECT_SRC})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
set_target_properties(tmxlite PROPERTIES
|
||||||
CXX_STANDARD 14
|
CXX_STANDARD 14
|
||||||
CXX_STANDARD_REQUIRED ON)
|
CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
target_compile_definitions(tmxlite PRIVATE $<$<CONFIG:Debug>:_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
|
# disable msvc warning
|
||||||
if(MSVC)
|
if (MSVC)
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE _CRT_SECURE_NO_WARNINGS)
|
target_compile_definitions(tmxlite PRIVATE _CRT_SECURE_NO_WARNINGS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# if we want external zip and xml libs find them and tell the compiler
|
# 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(ZLIB REQUIRED)
|
||||||
find_package(PUGIXML REQUIRED)
|
find_package(PUGIXML REQUIRED)
|
||||||
find_package(Zstd REQUIRED)
|
find_package(Zstd REQUIRED)
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_EXTLIBS USE_ZSTD)
|
target_compile_definitions(tmxlite PRIVATE USE_EXTLIBS USE_ZSTD)
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE ${ZLIB_INCLUDE_DIRS} ${PUGIXML_INCLUDE_DIR} ${ZSTD_INCLUDE_DIR})
|
target_include_directories(tmxlite PRIVATE ${ZLIB_INCLUDE_DIRS} ${PUGIXML_INCLUDE_DIR} ${ZSTD_INCLUDE_DIR})
|
||||||
target_link_libraries(${PROJECT_NAME} ${ZLIB_LIBRARIES} ${PUGIXML_LIBRARY} ${ZSTD_LIBRARY})
|
target_link_libraries(tmxlite ${ZLIB_LIBRARIES} ${PUGIXML_LIBRARY} ${ZSTD_LIBRARY})
|
||||||
else()
|
else()
|
||||||
# add miniz and pugixml from source
|
# 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)
|
if (USE_ZSTD)
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_ZSTD)
|
target_compile_definitions(tmxlite PRIVATE USE_ZSTD)
|
||||||
target_link_libraries(${PROJECT_NAME} zstd::static)
|
target_link_libraries(tmxlite zstd::static)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
target_include_directories(tmxlite PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
|||||||
@@ -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)
|
|
||||||
@@ -7,21 +7,51 @@
|
|||||||
# in the COPYING file in the root directory of this source tree).
|
# 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)
|
set(LIBRARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib)
|
||||||
|
|
||||||
# Parse version
|
# Parse version
|
||||||
include(GetZstdLibraryVersion)
|
file(READ ${LIBRARY_DIR}/zstd.h CONTENT) # Read file content
|
||||||
GetZstdLibraryVersion(${LIBRARY_DIR}/zstd.h zstd_VERSION_MAJOR zstd_VERSION_MINOR zstd_VERSION_PATCH)
|
|
||||||
|
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)
|
enable_language(ASM)
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Add extra compilation flags
|
# Add extra compilation flags
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
include(AddZstdCompilationFlags)
|
function (add_zstd_compilation_flags _target)
|
||||||
ADD_ZSTD_COMPILATION_FLAGS()
|
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 $<$<COMPILE_LANGUAGE:CXX>:-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
|
# Legacy support
|
||||||
option(ZSTD_LEGACY_SUPPORT "LEGACY SUPPORT" ON)
|
option(ZSTD_LEGACY_SUPPORT "LEGACY SUPPORT" ON)
|
||||||
@@ -95,36 +125,27 @@ endif()
|
|||||||
# macros.
|
# macros.
|
||||||
set_source_files_properties(${Sources} PROPERTIES LANGUAGE C)
|
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(libzstd_static STATIC ${Sources} ${Headers})
|
||||||
add_library(zstd::static ALIAS libzstd_static)
|
add_library(zstd::static ALIAS libzstd_static)
|
||||||
list(APPEND library_targets libzstd_static)
|
|
||||||
|
|
||||||
foreach (LIB ${library_targets})
|
add_zstd_compilation_flags(libzstd_static)
|
||||||
# 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)
|
|
||||||
|
|
||||||
if (ZSTD_LEGACY_SUPPORT)
|
# Define library directory, where sources and header files are located
|
||||||
include_directories(${LIBRARY_LEGACY_DIR})
|
target_include_directories(libzstd_static PUBLIC ${LIBRARY_DIR})
|
||||||
target_compile_definitions(${LIB} PRIVATE ZSTD_LEGACY_SUPPORT=${ZSTD_LEGACY_LEVEL})
|
target_include_directories(libzstd_static PRIVATE ${LIBRARY_DIR}/common)
|
||||||
else()
|
|
||||||
target_compile_definitions(${LIB} PRIVATE ZSTD_LEGACY_SUPPORT=0)
|
if (ZSTD_LEGACY_SUPPORT)
|
||||||
endif()
|
include_directories(${LIBRARY_LEGACY_DIR})
|
||||||
endforeach()
|
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)
|
if (ZSTD_MULTITHREAD_SUPPORT)
|
||||||
target_compile_definitions(libzstd_shared PRIVATE ZSTD_MULTITHREAD)
|
|
||||||
target_compile_definitions(libzstd_static PRIVATE ZSTD_MULTITHREAD)
|
target_compile_definitions(libzstd_static PRIVATE ZSTD_MULTITHREAD)
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
target_link_libraries(libzstd_shared Threads::Threads)
|
|
||||||
target_link_libraries(libzstd_static Threads::Threads)
|
target_link_libraries(libzstd_static Threads::Threads)
|
||||||
if (NOT CMAKE_USE_PTHREADS_INIT)
|
if (NOT CMAKE_USE_PTHREADS_INIT)
|
||||||
message(SEND_ERROR "ZSTD currently does not support thread libraries other than pthreads")
|
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
|
# Add specific compile definitions for MSVC project
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
set(COMMON_DEFINITIONS ZSTD_DISABLE_ASM _CRT_SECURE_NO_WARNINGS)
|
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})
|
target_compile_definitions(libzstd_static PRIVATE ZSTD_HEAPMODE=0 ${COMMON_DEFINITIONS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Define static and shared library names
|
# Define static 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})
|
|
||||||
|
|
||||||
set_property(TARGET libzstd_static PROPERTY POSITION_INDEPENDENT_CODE ON)
|
set_property(TARGET libzstd_static PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
# With MSVC static library needs to be renamed to avoid conflict with import library
|
# With MSVC static library needs to be renamed to avoid conflict with import library
|
||||||
|
|||||||
@@ -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()
|
|
||||||
@@ -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()
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user