CMake update (#131)

CMake build improvements & simplification
This commit is contained in:
Viktor Chlumský 2021-09-30 08:19:54 +02:00 committed by GitHub
parent d07fa1d2c8
commit 22b3055247
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 82 additions and 104 deletions

View File

@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.10)
project(msdfgen VERSION 1.8 LANGUAGES CXX) project(msdfgen VERSION 1.9 LANGUAGES CXX)
option(MSDFGEN_BUILD_MSDFGEN_STANDALONE "Build the msdfgen standalone executable" ON) 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_OPENMP "Build with OpenMP support for multithreaded code" OFF)
option(MSDFGEN_USE_CPP11 "Build with C++11 enabled" ON) option(MSDFGEN_USE_CPP11 "Build with C++11 enabled" ON)
option(MSDFGEN_USE_SKIA "Build with the Skia library" OFF) option(MSDFGEN_USE_SKIA "Build with the Skia library" OFF)
@ -15,117 +15,97 @@ if(NOT TARGET Freetype::Freetype)
find_package(Freetype REQUIRED) find_package(Freetype REQUIRED)
endif() endif()
#---------------------------------------------------------------- file(GLOB_RECURSE msdfgen-core_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
# Gathering File "core/*.h"
#---------------------------------------------------------------- "core/*.hpp"
file(GLOB_RECURSE msdfgen_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
"core/*.h"
"core/*.hpp"
) )
file(GLOB_RECURSE msdfgen_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} file(GLOB_RECURSE msdfgen-core_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
"core/*.cpp" "core/*.cpp"
) )
file(GLOB_RECURSE msdfgen-ext_PUBLIC_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} file(GLOB_RECURSE msdfgen-ext_PUBLIC_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
"ext/*.h" "ext/*.h"
"ext/*.hpp" "ext/*.hpp"
) )
file(GLOB_RECURSE msdfgen-ext_PRIVATE_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 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} file(GLOB_RECURSE msdfgen-ext_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
"ext/*.cpp" "ext/*.cpp"
"lib/*.cpp" "lib/*.cpp"
) )
# Build the library (aliased name because it's the same target name the exe)
include(folderize) include(folderize)
folderize_sources(msdfgen_HEADERS ${CMAKE_SOURCE_DIR}) folderize_sources(msdfgen-core_HEADERS ${CMAKE_SOURCE_DIR})
folderize_sources(msdfgen_SOURCES ${CMAKE_SOURCE_DIR}) folderize_sources(msdfgen-core_SOURCES ${CMAKE_SOURCE_DIR})
folderize_sources(msdfgen-ext_PUBLIC_HEADERS ${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_PRIVATE_HEADERS ${CMAKE_SOURCE_DIR})
folderize_sources(msdfgen-ext_SOURCES ${CMAKE_SOURCE_DIR}) folderize_sources(msdfgen-ext_SOURCES ${CMAKE_SOURCE_DIR})
#---------------------------------------------------------------- # Core library
# Target configuration 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}")
add_library(msdfgen ${msdfgen_SOURCES} ${msdfgen_HEADERS} "./msdfgen.h") target_include_directories(msdfgen-core INTERFACE
add_library(msdfgen::msdfgen ALIAS msdfgen) $<INSTALL_INTERFACE:include/msdfgen>
set_target_properties(msdfgen PROPERTIES PUBLIC_HEADER "${msdfgen_HEADERS}") $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
target_include_directories(msdfgen INTERFACE
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
) )
if(MSDFGEN_USE_CPP11) if(MSDFGEN_USE_CPP11)
target_compile_features(msdfgen PUBLIC cxx_std_11) target_compile_features(msdfgen-core PUBLIC cxx_std_11)
target_compile_definitions(msdfgen PUBLIC MSDFGEN_USE_CPP11) target_compile_definitions(msdfgen-core PUBLIC MSDFGEN_USE_CPP11)
endif() endif()
if(MSDFGEN_USE_OPENMP) if(MSDFGEN_USE_OPENMP)
# Note: Clang doesn't support OpenMP by default... # Note: Clang doesn't support OpenMP by default...
find_package(OpenMP REQUIRED COMPONENTS CXX) find_package(OpenMP REQUIRED COMPONENTS CXX)
target_link_libraries(msdfgen PRIVATE OpenMP::OpenMP_CXX) target_link_libraries(msdfgen-core PUBLIC OpenMP::OpenMP_CXX)
target_compile_definitions(msdfgen PRIVATE MSDFGEN_USE_OPENMP) 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
$<INSTALL_INTERFACE:include/msdfgen>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
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() endif()
if(MSDFGEN_USE_SKIA) if(MSDFGEN_USE_SKIA)
find_package(Skia REQUIRED) find_package(Skia REQUIRED)
target_link_libraries(msdfgen-ext PRIVATE Skia::Skia) target_link_libraries(msdfgen-ext PUBLIC Skia::Skia)
target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_SKIA) target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_SKIA)
endif() endif()
add_library(msdfgen-ext ${msdfgen-ext_SOURCES} ${msdfgen-ext_PUBLIC_HEADERS} ${msdfgen-ext_PRIVATE_HEADERS} "./msdfgen-ext.h") # Standalone executable
add_library(msdfgen::msdfgen-ext ALIAS msdfgen-ext) if(MSDFGEN_BUILD_STANDALONE)
set_target_properties(msdfgen-ext PROPERTIES add_executable(msdfgen main.cpp)
PUBLIC_HEADER "${msdfgen-ext_PUBLIC_HEADERS}" target_compile_definitions(msdfgen PUBLIC MSDFGEN_STANDALONE)
) target_link_libraries(msdfgen PUBLIC msdfgen::msdfgen-core msdfgen::msdfgen-ext)
target_link_libraries(msdfgen-ext PUBLIC msdfgen::msdfgen Freetype::Freetype)
target_include_directories(msdfgen-ext
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
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)
endif() endif()
# Build the executable if requested # Installation
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
#----------------------------------------------------------------
if(MSDFGEN_INSTALL) if(MSDFGEN_INSTALL)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
set(MSDFGEN_CONFIG_PATH "lib/cmake/msdfgen") set(MSDFGEN_CONFIG_PATH "lib/cmake/msdfgen")
@ -150,26 +130,26 @@ if(MSDFGEN_INSTALL)
@ONLY @ONLY
) )
install(TARGETS msdfgen EXPORT msdfgenTargets install(TARGETS msdfgen-core EXPORT msdfgenTargets
RUNTIME DESTINATION bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION lib LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION lib ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
FRAMEWORK DESTINATION lib FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION include/msdfgen/core 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(FILES "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen.h" "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" DESTINATION include/msdfgen)
install(TARGETS msdfgen-ext EXPORT msdfgenTargets install(TARGETS msdfgen-ext EXPORT msdfgenTargets
RUNTIME DESTINATION bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION lib LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION lib ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
FRAMEWORK DESTINATION lib FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION include/msdfgen/ext PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/msdfgen/ext
) )
if(MSDFGEN_BUILD_MSDFGEN_STANDALONE) if(MSDFGEN_BUILD_STANDALONE)
install(TARGETS msdfgen-standalone EXPORT msdfgenTargets DESTINATION bin) install(TARGETS msdfgen EXPORT msdfgenTargets DESTINATION bin)
endif() endif()
install( install(

View File

@ -238,6 +238,7 @@
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
@ -271,6 +272,7 @@
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|x64'">
@ -303,6 +305,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>No</GenerateDebugInformation> <GenerateDebugInformation>No</GenerateDebugInformation>
<AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|Win32'">
@ -323,6 +326,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>No</GenerateDebugInformation> <GenerateDebugInformation>No</GenerateDebugInformation>
<AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
@ -389,6 +393,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|x64'">
@ -409,6 +414,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|x64'">

View File

@ -473,7 +473,7 @@ void edgeColoringByDistance(Shape &shape, double angleThreshold, unsigned long l
edgeMatrix[i] = &edgeMatrixStorage[i*splineCount]; edgeMatrix[i] = &edgeMatrixStorage[i*splineCount];
int nextEdge = 0; int nextEdge = 0;
for (; nextEdge < graphEdgeCount && !*graphEdgeDistances[nextEdge]; ++nextEdge) { for (; nextEdge < graphEdgeCount && !*graphEdgeDistances[nextEdge]; ++nextEdge) {
int elem = graphEdgeDistances[nextEdge]-distanceMatrixBase; int elem = (int) (graphEdgeDistances[nextEdge]-distanceMatrixBase);
int row = elem/splineCount; int row = elem/splineCount;
int col = elem%splineCount; int col = elem%splineCount;
edgeMatrix[row][col] = 1; edgeMatrix[row][col] = 1;
@ -483,7 +483,7 @@ void edgeColoringByDistance(Shape &shape, double angleThreshold, unsigned long l
std::vector<int> coloring(2*splineCount); std::vector<int> coloring(2*splineCount);
colorSecondDegreeGraph(&coloring[0], &edgeMatrix[0], splineCount, seed); colorSecondDegreeGraph(&coloring[0], &edgeMatrix[0], splineCount, seed);
for (; nextEdge < graphEdgeCount; ++nextEdge) { 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]); tryAddEdge(&coloring[0], &edgeMatrix[0], splineCount, elem/splineCount, elem%splineCount, &coloring[splineCount]);
} }

View File

@ -7,10 +7,6 @@
#include FT_FREETYPE_H #include FT_FREETYPE_H
#include FT_OUTLINE_H #include FT_OUTLINE_H
#if defined(_WIN32) && !defined(MSDFGEN_CMAKE_BUILD)
#pragma comment(lib, "freetype.lib")
#endif
namespace msdfgen { namespace msdfgen {
#define REQUIRE(cond) { if (!(cond)) return false; } #define REQUIRE(cond) { if (!(cond)) return false; }

View File

@ -9,10 +9,6 @@
#include "../core/edge-segments.h" #include "../core/edge-segments.h"
#include "../core/Contour.h" #include "../core/Contour.h"
#if defined(_WIN32) && !defined(MSDFGEN_CMAKE_BUILD)
#pragma comment(lib, "skia.lib")
#endif
namespace msdfgen { namespace msdfgen {
SkPoint pointToSkiaPoint(Point2 p) { SkPoint pointToSkiaPoint(Point2 p) {