From 839e0e86cb846e3ea0c0a3d5da97321fe81f91e4 Mon Sep 17 00:00:00 2001 From: Chlumsky Date: Thu, 19 Jan 2023 19:06:03 +0100 Subject: [PATCH] Added option to use dynamic runtime library --- CMakeLists.txt | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6dec916..fe78a70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ option(MSDFGEN_USE_OPENMP "Build with OpenMP support for multithreaded code" OFF option(MSDFGEN_USE_CPP11 "Build with C++11 enabled" ON) option(MSDFGEN_USE_SKIA "Build with the Skia library" ON) option(MSDFGEN_INSTALL "Generate installation target" OFF) +option(MSDFGEN_DYNAMIC_RUNTIME "Link dynamic runtime library instead of static" OFF) option(BUILD_SHARED_LIBS "Generate dynamic library files instead of static" OFF) if(MSDFGEN_CORE_ONLY AND MSDFGEN_BUILD_STANDALONE) @@ -26,6 +27,12 @@ if(NOT MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() +if(MSDFGEN_DYNAMIC_RUNTIME) + set(MSDFGEN_MSVC_RUNTIME "MultiThreaded$<$:Debug>DLL") +else() + set(MSDFGEN_MSVC_RUNTIME "MultiThreaded$<$:Debug>") +endif() + if(BUILD_SHARED_LIBS) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() @@ -40,13 +47,17 @@ if(MSDFGEN_USE_VCPKG) endif() endif() # Default to statically linked vcpkg triplet on Windows - if(WIN32 AND NOT VCPKG_TARGET_TRIPLET AND NOT BUILD_SHARED_LIBS) - if(CMAKE_GENERATOR_PLATFORM MATCHES "64$") + if(WIN32 AND NOT VCPKG_TARGET_TRIPLET AND NOT MSDFGEN_DYNAMIC_RUNTIME) + if(CMAKE_GENERATOR_PLATFORM MATCHES "64$" AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") set(VCPKG_TARGET_TRIPLET "x64-windows-static") elseif(CMAKE_GENERATOR_PLATFORM MATCHES "32$" OR CMAKE_GENERATOR_PLATFORM STREQUAL "x86") set(VCPKG_TARGET_TRIPLET "x86-windows-static") else() - message(WARNING "Vcpkg triplet not explicitly specified and could not be deduced. Recommend using -DVCPKG_TARGET_TRIPLET=x86-windows-static or similar") + if(CMAKE_GENERATOR_PLATFORM) + message(WARNING "Vcpkg triplet not explicitly specified and could not be deduced. Recommend using -DVCPKG_TARGET_TRIPLET=x64-windows-static or similar") + else() + message(WARNING "Vcpkg triplet not explicitly specified and could not be deduced. Recommend using -A to explicitly select platform (Win32 or x64)") + endif() endif() endif() # Select project features @@ -79,7 +90,7 @@ file(GLOB_RECURSE MSDFGEN_EXT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ext/ add_library(msdfgen-core "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen.h" ${MSDFGEN_CORE_HEADERS} ${MSDFGEN_CORE_SOURCES}) add_library(msdfgen::msdfgen-core ALIAS msdfgen-core) set_target_properties(msdfgen-core PROPERTIES PUBLIC_HEADER "${MSDFGEN_CORE_HEADERS}") -set_property(TARGET msdfgen-core PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +set_property(TARGET msdfgen-core PROPERTY MSVC_RUNTIME_LIBRARY "${MSDFGEN_MSVC_RUNTIME}") target_compile_definitions(msdfgen-core PUBLIC MSDFGEN_VERSION=${MSDFGEN_VERSION} MSDFGEN_VERSION_MAJOR=${MSDFGEN_VERSION_MAJOR} @@ -127,7 +138,7 @@ if(NOT MSDFGEN_CORE_ONLY) add_library(msdfgen-ext "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" ${MSDFGEN_EXT_HEADERS} ${MSDFGEN_EXT_SOURCES}) add_library(msdfgen::msdfgen-ext ALIAS msdfgen-ext) set_target_properties(msdfgen-ext PROPERTIES PUBLIC_HEADER "${MSDFGEN_EXT_HEADERS}") - set_property(TARGET msdfgen-ext PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + set_property(TARGET msdfgen-ext PROPERTY MSVC_RUNTIME_LIBRARY "${MSDFGEN_MSVC_RUNTIME}") target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_LIBPNG) target_link_libraries(msdfgen-ext PRIVATE msdfgen::msdfgen-core Freetype::Freetype tinyxml2::tinyxml2 PNG::PNG) target_include_directories(msdfgen-ext @@ -171,7 +182,7 @@ if(MSDFGEN_BUILD_STANDALONE) add_executable(msdfgen ${MSDFGEN_STANDALONE_SOURCES}) target_compile_definitions(msdfgen PUBLIC MSDFGEN_STANDALONE) target_compile_definitions(msdfgen PRIVATE MSDFGEN_VERSION_UNDERLINE=${MSDFGEN_VERSION_UNDERLINE}) - set_property(TARGET msdfgen PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + set_property(TARGET msdfgen PROPERTY MSVC_RUNTIME_LIBRARY "${MSDFGEN_MSVC_RUNTIME}") target_link_libraries(msdfgen PRIVATE msdfgen::msdfgen) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT msdfgen) endif()