From 22b305524796e9fde906e130b47062dbeddcbfac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20Chlumsk=C3=BD?= Date: Thu, 30 Sep 2021 08:19:54 +0200 Subject: [PATCH] CMake update (#131) CMake build improvements & simplification --- CMakeLists.txt | 168 +++++++++++++++------------------ Msdfgen.vcxproj | 6 ++ core/edge-coloring.cpp | 4 +- ext/import-font.cpp | 4 - ext/resolve-shape-geometry.cpp | 4 - 5 files changed, 82 insertions(+), 104 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a57afc..2217d76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.10) -project(msdfgen VERSION 1.8 LANGUAGES CXX) -option(MSDFGEN_BUILD_MSDFGEN_STANDALONE "Build the msdfgen standalone executable" ON) +project(msdfgen VERSION 1.9 LANGUAGES CXX) +option(MSDFGEN_BUILD_STANDALONE "Build the msdfgen standalone executable" ON) 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" OFF) @@ -15,117 +15,97 @@ if(NOT TARGET Freetype::Freetype) find_package(Freetype REQUIRED) endif() -#---------------------------------------------------------------- -# Gathering File -#---------------------------------------------------------------- - -file(GLOB_RECURSE msdfgen_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - "core/*.h" - "core/*.hpp" +file(GLOB_RECURSE msdfgen-core_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "core/*.h" + "core/*.hpp" ) -file(GLOB_RECURSE msdfgen_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - "core/*.cpp" +file(GLOB_RECURSE msdfgen-core_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "core/*.cpp" ) file(GLOB_RECURSE msdfgen-ext_PUBLIC_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - "ext/*.h" - "ext/*.hpp" + "ext/*.h" + "ext/*.hpp" ) file(GLOB_RECURSE msdfgen-ext_PRIVATE_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - "include/*.h" + "include/*.h" ) file(GLOB_RECURSE msdfgen-ext_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - "ext/*.cpp" - "lib/*.cpp" + "ext/*.cpp" + "lib/*.cpp" ) -# Build the library (aliased name because it's the same target name the exe) include(folderize) -folderize_sources(msdfgen_HEADERS ${CMAKE_SOURCE_DIR}) -folderize_sources(msdfgen_SOURCES ${CMAKE_SOURCE_DIR}) +folderize_sources(msdfgen-core_HEADERS ${CMAKE_SOURCE_DIR}) +folderize_sources(msdfgen-core_SOURCES ${CMAKE_SOURCE_DIR}) folderize_sources(msdfgen-ext_PUBLIC_HEADERS ${CMAKE_SOURCE_DIR}) folderize_sources(msdfgen-ext_PRIVATE_HEADERS ${CMAKE_SOURCE_DIR}) folderize_sources(msdfgen-ext_SOURCES ${CMAKE_SOURCE_DIR}) -#---------------------------------------------------------------- -# Target configuration -#---------------------------------------------------------------- - -add_library(msdfgen ${msdfgen_SOURCES} ${msdfgen_HEADERS} "./msdfgen.h") -add_library(msdfgen::msdfgen ALIAS msdfgen) -set_target_properties(msdfgen PROPERTIES PUBLIC_HEADER "${msdfgen_HEADERS}") -target_include_directories(msdfgen INTERFACE - $ - $ +# Core library +add_library(msdfgen-core ${msdfgen-core_SOURCES} ${msdfgen-core_HEADERS} "./msdfgen.h") +add_library(msdfgen::msdfgen-core ALIAS msdfgen-core) +set_target_properties(msdfgen-core PROPERTIES PUBLIC_HEADER "${msdfgen-core_HEADERS}") +target_include_directories(msdfgen-core INTERFACE + $ + $ ) if(MSDFGEN_USE_CPP11) - target_compile_features(msdfgen PUBLIC cxx_std_11) - target_compile_definitions(msdfgen PUBLIC MSDFGEN_USE_CPP11) + target_compile_features(msdfgen-core PUBLIC cxx_std_11) + target_compile_definitions(msdfgen-core PUBLIC MSDFGEN_USE_CPP11) endif() if(MSDFGEN_USE_OPENMP) - # Note: Clang doesn't support OpenMP by default... - find_package(OpenMP REQUIRED COMPONENTS CXX) - target_link_libraries(msdfgen PRIVATE OpenMP::OpenMP_CXX) - target_compile_definitions(msdfgen PRIVATE MSDFGEN_USE_OPENMP) + # Note: Clang doesn't support OpenMP by default... + find_package(OpenMP REQUIRED COMPONENTS CXX) + target_link_libraries(msdfgen-core PUBLIC OpenMP::OpenMP_CXX) + target_compile_definitions(msdfgen-core PUBLIC MSDFGEN_USE_OPENMP) +endif() + +# Extensions library +add_library(msdfgen-ext ${msdfgen-ext_SOURCES} ${msdfgen-ext_PUBLIC_HEADERS} ${msdfgen-ext_PRIVATE_HEADERS} "./msdfgen-ext.h") +add_library(msdfgen::msdfgen-ext ALIAS msdfgen-ext) +set_target_properties(msdfgen-ext PROPERTIES PUBLIC_HEADER "${msdfgen-ext_PUBLIC_HEADERS}") +target_link_libraries(msdfgen-ext PUBLIC msdfgen::msdfgen-core Freetype::Freetype) +target_include_directories(msdfgen-ext +PUBLIC + $ + $ +PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +if(FREETYPE_WITH_PNG) + find_package(ZLIB REQUIRED) + find_package(PNG REQUIRED) + target_link_libraries(msdfgen-ext PUBLIC ZLIB::ZLIB PNG::PNG) +endif() +if(FREETYPE_WITH_HARFBUZZ) + # No FindHarfBuzz.cmake available so falling back to CMAKE_LIBRARY_PATH + find_library(FREETYPE_HARFBUZZ_LIB "harfbuzz") + target_link_libraries(msdfgen-ext PUBLIC "${FREETYPE_HARFBUZZ_LIB}") endif() if(MSDFGEN_USE_SKIA) - find_package(Skia REQUIRED) - target_link_libraries(msdfgen-ext PRIVATE Skia::Skia) - target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_SKIA) + find_package(Skia REQUIRED) + target_link_libraries(msdfgen-ext PUBLIC Skia::Skia) + target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_SKIA) endif() -add_library(msdfgen-ext ${msdfgen-ext_SOURCES} ${msdfgen-ext_PUBLIC_HEADERS} ${msdfgen-ext_PRIVATE_HEADERS} "./msdfgen-ext.h") -add_library(msdfgen::msdfgen-ext ALIAS msdfgen-ext) -set_target_properties(msdfgen-ext PROPERTIES - PUBLIC_HEADER "${msdfgen-ext_PUBLIC_HEADERS}" -) -target_link_libraries(msdfgen-ext PUBLIC msdfgen::msdfgen Freetype::Freetype) -target_include_directories(msdfgen-ext -PUBLIC - $ - $ - -PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/include -) - -target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_CMAKE_BUILD) - -if(MSDFGEN_USE_CPP11) - target_compile_features(msdfgen-ext PUBLIC cxx_std_11) - target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_CPP11) +# Standalone executable +if(MSDFGEN_BUILD_STANDALONE) + add_executable(msdfgen main.cpp) + target_compile_definitions(msdfgen PUBLIC MSDFGEN_STANDALONE) + target_link_libraries(msdfgen PUBLIC msdfgen::msdfgen-core msdfgen::msdfgen-ext) endif() -# Build the executable if requested -if(MSDFGEN_BUILD_MSDFGEN_STANDALONE) - add_executable(msdfgen-standalone main.cpp) - set_target_properties(msdfgen-standalone PROPERTIES ARCHIVE_OUTPUT_DIRECTORY archive OUTPUT_NAME msdfgen) - target_compile_definitions(msdfgen-standalone PRIVATE MSDFGEN_STANDALONE) - target_link_libraries(msdfgen-standalone PRIVATE msdfgen::msdfgen msdfgen::msdfgen-ext) - - if(FREETYPE_WITH_PNG) - find_package(ZLIB REQUIRED) - find_package(PNG REQUIRED) - target_link_libraries(msdfgen-standalone PRIVATE ZLIB::ZLIB PNG::PNG) - endif() - if(FREETYPE_WITH_HARFBUZZ) - # No FindHarfBuzz.cmake available so falling back to CMAKE_LIBRARY_PATH - find_library(FREETYPE_HARFBUZZ_LIB "harfbuzz") - target_link_libraries(msdfgen-standalone PRIVATE "${FREETYPE_HARFBUZZ_LIB}") - endif() -endif() - -#---------------------------------------------------------------- -# Installation and exportation of the libraries -#---------------------------------------------------------------- - +# Installation if(MSDFGEN_INSTALL) + include(GNUInstallDirs) include(CMakePackageConfigHelpers) set(MSDFGEN_CONFIG_PATH "lib/cmake/msdfgen") @@ -150,26 +130,26 @@ if(MSDFGEN_INSTALL) @ONLY ) - install(TARGETS msdfgen EXPORT msdfgenTargets - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - FRAMEWORK DESTINATION lib - PUBLIC_HEADER DESTINATION include/msdfgen/core + install(TARGETS msdfgen-core EXPORT msdfgenTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/msdfgen/core ) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen.h" "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" DESTINATION include/msdfgen) install(TARGETS msdfgen-ext EXPORT msdfgenTargets - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - FRAMEWORK DESTINATION lib - PUBLIC_HEADER DESTINATION include/msdfgen/ext + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/msdfgen/ext ) - if(MSDFGEN_BUILD_MSDFGEN_STANDALONE) - install(TARGETS msdfgen-standalone EXPORT msdfgenTargets DESTINATION bin) + if(MSDFGEN_BUILD_STANDALONE) + install(TARGETS msdfgen EXPORT msdfgenTargets DESTINATION bin) endif() install( diff --git a/Msdfgen.vcxproj b/Msdfgen.vcxproj index 88cbd77..30655f4 100644 --- a/Msdfgen.vcxproj +++ b/Msdfgen.vcxproj @@ -238,6 +238,7 @@ Console freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories) + freetype.lib;skia.lib;%(AdditionalDependencies) @@ -271,6 +272,7 @@ Console freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories) + freetype.lib;skia.lib;%(AdditionalDependencies) @@ -303,6 +305,7 @@ Console freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories) No + freetype.lib;skia.lib;%(AdditionalDependencies) @@ -323,6 +326,7 @@ Console freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories) No + freetype.lib;skia.lib;%(AdditionalDependencies) @@ -389,6 +393,7 @@ Console freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories) false + freetype.lib;skia.lib;%(AdditionalDependencies) @@ -409,6 +414,7 @@ Console freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories) false + freetype.lib;skia.lib;%(AdditionalDependencies) diff --git a/core/edge-coloring.cpp b/core/edge-coloring.cpp index 370f9aa..914f176 100644 --- a/core/edge-coloring.cpp +++ b/core/edge-coloring.cpp @@ -473,7 +473,7 @@ void edgeColoringByDistance(Shape &shape, double angleThreshold, unsigned long l edgeMatrix[i] = &edgeMatrixStorage[i*splineCount]; int nextEdge = 0; for (; nextEdge < graphEdgeCount && !*graphEdgeDistances[nextEdge]; ++nextEdge) { - int elem = graphEdgeDistances[nextEdge]-distanceMatrixBase; + int elem = (int) (graphEdgeDistances[nextEdge]-distanceMatrixBase); int row = elem/splineCount; int col = elem%splineCount; edgeMatrix[row][col] = 1; @@ -483,7 +483,7 @@ void edgeColoringByDistance(Shape &shape, double angleThreshold, unsigned long l std::vector coloring(2*splineCount); colorSecondDegreeGraph(&coloring[0], &edgeMatrix[0], splineCount, seed); for (; nextEdge < graphEdgeCount; ++nextEdge) { - int elem = graphEdgeDistances[nextEdge]-distanceMatrixBase; + int elem = (int) (graphEdgeDistances[nextEdge]-distanceMatrixBase); tryAddEdge(&coloring[0], &edgeMatrix[0], splineCount, elem/splineCount, elem%splineCount, &coloring[splineCount]); } diff --git a/ext/import-font.cpp b/ext/import-font.cpp index 379a16e..d495883 100644 --- a/ext/import-font.cpp +++ b/ext/import-font.cpp @@ -7,10 +7,6 @@ #include FT_FREETYPE_H #include FT_OUTLINE_H -#if defined(_WIN32) && !defined(MSDFGEN_CMAKE_BUILD) - #pragma comment(lib, "freetype.lib") -#endif - namespace msdfgen { #define REQUIRE(cond) { if (!(cond)) return false; } diff --git a/ext/resolve-shape-geometry.cpp b/ext/resolve-shape-geometry.cpp index 657018b..6dcded7 100644 --- a/ext/resolve-shape-geometry.cpp +++ b/ext/resolve-shape-geometry.cpp @@ -9,10 +9,6 @@ #include "../core/edge-segments.h" #include "../core/Contour.h" -#if defined(_WIN32) && !defined(MSDFGEN_CMAKE_BUILD) - #pragma comment(lib, "skia.lib") -#endif - namespace msdfgen { SkPoint pointToSkiaPoint(Point2 p) {