瀏覽代碼

CMake update (#131)

CMake build improvements & simplification
Viktor Chlumský 3 年之前
父節點
當前提交
22b3055247
共有 5 個文件被更改,包括 75 次插入97 次删除
  1. 67 87
      CMakeLists.txt
  2. 6 0
      Msdfgen.vcxproj
  3. 2 2
      core/edge-coloring.cpp
  4. 0 4
      ext/import-font.cpp
  5. 0 4
      ext/resolve-shape-geometry.cpp

+ 67 - 87
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
-	$<INSTALL_INTERFACE:include>
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
+# 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
+    $<INSTALL_INTERFACE:include/msdfgen>
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
 )
 
 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)
-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)
+    # 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 Freetype::Freetype)
+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>
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
-	
+    $<INSTALL_INTERFACE:include/msdfgen>
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
 PRIVATE
-	${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${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)
+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()
 
-# 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()
+if(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()
 
-#----------------------------------------------------------------
-# Installation and exportation of the libraries
-#----------------------------------------------------------------
+# 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()
 
+# 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(

+ 6 - 0
Msdfgen.vcxproj

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

+ 2 - 2
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<int> 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]);
     }
 

+ 0 - 4
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; }

+ 0 - 4
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) {