diff --git a/CMakeLists.txt b/CMakeLists.txt index e87e9d5..7596130 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,14 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/CMake") if (DEFINED VCPKG_TARGET_ARCHITECTURE) set(DIRECTX_ARCH ${VCPKG_TARGET_ARCHITECTURE}) +elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Ww][Ii][Nn]32$") + set(DIRECTX_ARCH x86) +elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Xx]64$") + set(DIRECTX_ARCH x64) +elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]$") + set(DIRECTX_ARCH arm) +elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64$") + set(DIRECTX_ARCH arm64) endif() #--- Library @@ -203,6 +211,8 @@ install(FILES #--- Command-line tools if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) + set(TOOL_EXES texassemble texconv texdiag) + add_executable(texassemble Texassemble/texassemble.cpp Texassemble/AnimatedGif.cpp) @@ -221,37 +231,29 @@ if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) source_group(texdiag REGULAR_EXPRESSION Texdiag/*.*) if(ENABLE_OPENEXR_SUPPORT) - target_link_libraries(texassemble ${OPENEXR_ILMIMF_LIBRARY}) - target_link_libraries(texconv ${OPENEXR_ILMIMF_LIBRARY}) - target_link_libraries(texdiag ${OPENEXR_ILMIMF_LIBRARY}) - - target_compile_options(texassemble PRIVATE -DUSE_OPENEXR) - target_compile_options(texconv PRIVATE -DUSE_OPENEXR) - target_compile_options(texdiag PRIVATE -DUSE_OPENEXR) + foreach(t IN LISTS TOOL_EXES) + target_link_libraries(${t} ${OPENEXR_ILMIMF_LIBRARY}) + target_compile_options(${t} PRIVATE -DUSE_OPENEXR) + endforeach() endif() if (VCPKG_TOOLCHAIN) - target_link_libraries(texassemble Microsoft::DirectXMath) - target_link_libraries(texconv Microsoft::DirectXMath) - target_link_libraries(texdiag Microsoft::DirectXMath) + foreach(t IN LISTS TOOL_EXES) + target_link_libraries(${t} Microsoft::DirectXMath) + endforeach() endif() endif() if(MSVC) - target_compile_options(${PROJECT_NAME} PRIVATE /fp:fast) - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - target_compile_options(texassemble PRIVATE /fp:fast) - target_compile_options(texconv PRIVATE /fp:fast) - target_compile_options(texdiag PRIVATE /fp:fast) - endif() + foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) + target_compile_options(${t} PRIVATE /fp:fast "$<$>:/guard:cf>") + endforeach() if((${CMAKE_SIZEOF_VOID_P} EQUAL 4) AND (NOT ${DIRECTX_ARCH} MATCHES "arm")) - target_compile_options(${PROJECT_NAME} PRIVATE /arch:SSE2) - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - target_compile_options(texassemble PRIVATE /arch:SSE2) - target_compile_options(texconv PRIVATE /arch:SSE2) - target_compile_options(texdiag PRIVATE /arch:SSE2) - endif() + foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) + target_compile_options(${t} PRIVATE /arch:SSE2) + target_link_options(${t} PRIVATE /SAFESEH) + endforeach() endif() endif() @@ -261,54 +263,38 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # OpenMP is not supported for clang for Windows by default - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - set(WarningsEXE ${WarningsLib} "-Wno-c++98-compat" "-Wno-c++98-compat-pedantic" "-Wno-switch" "-Wno-switch-enum" "-Wno-language-extension-token" "-Wno-missing-prototypes") - target_compile_options(texassemble PRIVATE ${WarningsEXE}) - target_compile_options(texconv PRIVATE ${WarningsEXE} "-Wno-global-constructors") - target_compile_options(texdiag PRIVATE ${WarningsEXE} "-Wno-double-promotion") - endif() + set(WarningsEXE ${WarningsLib} "-Wno-c++98-compat" "-Wno-c++98-compat-pedantic" "-Wno-switch" "-Wno-switch-enum" "-Wno-language-extension-token" "-Wno-missing-prototypes" "-Wno-global-constructors" "-Wno-double-promotion") + foreach(t IN LISTS TOOL_EXES) + target_compile_options(${t} PRIVATE ${WarningsEXE}) + endforeach() endif() if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - target_compile_options(${PROJECT_NAME} PRIVATE /permissive- /JMC- /Zc:__cplusplus) - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - target_compile_options(texassemble PRIVATE /permissive- /Zc:__cplusplus) - target_compile_options(texconv PRIVATE /permissive- /Zc:__cplusplus) - target_compile_options(texdiag PRIVATE /permissive- /Zc:__cplusplus) - endif() + foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) + target_compile_options(${t} PRIVATE /sdl /permissive- /Zc:__cplusplus) + endforeach() if(ENABLE_CODE_ANALYSIS) - target_compile_options(${PROJECT_NAME} PRIVATE /analyze) - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - target_compile_options(texassemble PRIVATE /analyze) - target_compile_options(texconv PRIVATE /analyze) - target_compile_options(texdiag PRIVATE /analyze) - endif() + foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) + target_compile_options(${t} PRIVATE /analyze) + endforeach() endif() if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.24) - target_compile_options(${PROJECT_NAME} PRIVATE /ZH:SHA_256) - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - target_compile_options(texassemble PRIVATE /ZH:SHA_256) - target_compile_options(texconv PRIVATE /ZH:SHA_256) - target_compile_options(texdiag PRIVATE /ZH:SHA_256) - endif() + foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) + target_compile_options(${t} PRIVATE /ZH:SHA_256) + endforeach() endif() if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.26) - target_compile_options(${PROJECT_NAME} PRIVATE /Zc:preprocessor /wd5105) - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - target_compile_options(texassemble PRIVATE /Zc:preprocessor /wd5105) - target_compile_options(texconv PRIVATE /Zc:preprocessor /wd5105) - target_compile_options(texdiag PRIVATE /Zc:preprocessor /wd5105) - endif() + foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) + target_compile_options(${t} PRIVATE /Zc:preprocessor /wd5105) + endforeach() endif() if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27) AND (NOT (${DIRECTX_ARCH} MATCHES "arm(64)?"))) - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - target_link_options(texassemble PRIVATE /CETCOMPAT) - target_link_options(texconv PRIVATE /CETCOMPAT) - target_link_options(texdiag PRIVATE /CETCOMPAT) - endif() + foreach(t IN LISTS TOOL_EXES) + target_link_options(${t} PRIVATE /CETCOMPAT) + endforeach() endif() if(BC_USE_OPENMP) @@ -318,21 +304,16 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") endif() endif() - if(BUILD_TOOLS AND WIN32 AND (NOT WINDOWS_STORE)) - set(WarningsEXE "/wd4061" "/wd4062" "/wd4365" "/wd4514" "/wd4625" "/wd4626" "/wd4627" "/wd4668" "/wd4710" "/wd4751" "/wd4820" "/wd5026" "/wd5027" "/wd5039" "/wd5045" "/wd5219") - target_compile_options(texassemble PRIVATE ${WarningsEXE}) - target_compile_options(texconv PRIVATE ${WarningsEXE}) - target_compile_options(texdiag PRIVATE ${WarningsEXE}) - endif() + set(WarningsEXE "/wd4061" "/wd4062" "/wd4365" "/wd4514" "/wd4625" "/wd4626" "/wd4627" "/wd4668" "/wd4710" "/wd4751" "/wd4820" "/wd5026" "/wd5027" "/wd5039" "/wd5045" "/wd5219") + foreach(t IN LISTS TOOL_EXES) + target_compile_options(${t} PRIVATE ${WarningsEXE}) + endforeach() endif() if(WIN32) - target_compile_definitions(${PROJECT_NAME} PRIVATE _UNICODE UNICODE) - if(BUILD_TOOLS AND (NOT WINDOWS_STORE)) - target_compile_definitions(texassemble PRIVATE _UNICODE UNICODE _WIN32_WINNT=0x0601) - target_compile_definitions(texconv PRIVATE _UNICODE UNICODE _WIN32_WINNT=0x0601) - target_compile_definitions(texdiag PRIVATE _UNICODE UNICODE _WIN32_WINNT=0x0601) - endif() + foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME}) + target_compile_definitions(${t} PRIVATE _UNICODE UNICODE _WIN32_WINNT=0x0601) + endforeach() if(WINDOWS_STORE) target_compile_definitions(${PROJECT_NAME} PRIVATE WINAPI_FAMILY=WINAPI_FAMILY_APP)