CMakeLists.txt 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. cmake_minimum_required(VERSION 3.10)
  2. project(msdfgen VERSION 1.7.1 LANGUAGES CXX)
  3. option(MSDFGEN_BUILD_MSDFGEN_STANDALONE "Build the msdfgen standalone executable" ON)
  4. option(MSDFGEN_USE_OPENMP "Build with OpenMP support for multithreaded code" OFF)
  5. option(MSDFGEN_USE_CPP11 "Build with C++11 enabled" ON)
  6. option(FREETYPE_WITH_PNG "Link libpng and zlib because FreeType is configured to require it" OFF)
  7. option(FREETYPE_WITH_HARFBUZZ "Link HarfBuzz because FreeType is configured to require it" OFF)
  8. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
  9. find_package(Freetype REQUIRED)
  10. #----------------------------------------------------------------
  11. # Gathering File
  12. #----------------------------------------------------------------
  13. file(GLOB_RECURSE msdfgen_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
  14. "core/*.h"
  15. "core/*.hpp"
  16. )
  17. file(GLOB_RECURSE msdfgen_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
  18. "core/*.cpp"
  19. )
  20. file(GLOB_RECURSE msdfgen-ext_PUBLIC_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
  21. "ext/*.h"
  22. "ext/*.hpp"
  23. )
  24. file(GLOB_RECURSE msdfgen-ext_PRIVATE_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
  25. "include/*.h"
  26. )
  27. file(GLOB_RECURSE msdfgen-ext_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
  28. "ext/*.cpp"
  29. "lib/*.cpp"
  30. "lib/*.cpp"
  31. )
  32. # Build the library (aliased name because it's the same target name the exe)
  33. include(folderize)
  34. folderize_sources(msdfgen_HEADERS ${CMAKE_SOURCE_DIR})
  35. folderize_sources(msdfgen_SOURCES ${CMAKE_SOURCE_DIR})
  36. folderize_sources(msdfgen-ext_PUBLIC_HEADERS ${CMAKE_SOURCE_DIR})
  37. folderize_sources(msdfgen-ext_PRIVATE_HEADERS ${CMAKE_SOURCE_DIR})
  38. folderize_sources(msdfgen-ext_SOURCES ${CMAKE_SOURCE_DIR})
  39. #----------------------------------------------------------------
  40. # Target configuration
  41. #----------------------------------------------------------------
  42. add_library(msdfgen ${msdfgen_SOURCES} ${msdfgen_HEADERS} "./msdfgen.h")
  43. add_library(msdfgen::msdfgen ALIAS msdfgen)
  44. set_target_properties(msdfgen PROPERTIES PUBLIC_HEADER "${msdfgen_HEADERS}")
  45. target_include_directories(msdfgen INTERFACE
  46. $<INSTALL_INTERFACE:include>
  47. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
  48. )
  49. if(MSDFGEN_USE_CPP11)
  50. target_compile_features(msdfgen PUBLIC cxx_std_11)
  51. target_compile_definitions(msdfgen PUBLIC MSDFGEN_USE_CPP11)
  52. endif()
  53. if(MSDFGEN_USE_OPENMP)
  54. # Note: Clang doesn't support OpenMP by default...
  55. find_package(OpenMP REQUIRED COMPONENTS CXX)
  56. target_link_libraries(msdfgen PRIVATE OpenMP::OpenMP_CXX)
  57. target_compile_definitions(msdfgen PRIVATE MSDFGEN_USE_OPENMP)
  58. endif()
  59. add_library(msdfgen-ext ${msdfgen-ext_SOURCES} ${msdfgen-ext_PUBLIC_HEADERS} ${msdfgen-ext_PRIVATE_HEADERS} "./msdfgen-ext.h")
  60. add_library(msdfgen::msdfgen-ext ALIAS msdfgen-ext)
  61. set_target_properties(msdfgen-ext PROPERTIES
  62. PUBLIC_HEADER "${msdfgen-ext_PUBLIC_HEADERS}"
  63. )
  64. target_link_libraries(msdfgen-ext PUBLIC msdfgen::msdfgen Freetype::Freetype)
  65. target_include_directories(msdfgen-ext
  66. PUBLIC
  67. $<INSTALL_INTERFACE:include>
  68. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
  69. PRIVATE
  70. ${CMAKE_CURRENT_SOURCE_DIR}/include
  71. )
  72. if(MSDFGEN_USE_CPP11)
  73. target_compile_features(msdfgen-ext PUBLIC cxx_std_11)
  74. target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_CPP11)
  75. endif()
  76. # Build the executable if requested
  77. if(MSDFGEN_BUILD_MSDFGEN_STANDALONE)
  78. add_executable(msdfgen-standalone main.cpp)
  79. set_target_properties(msdfgen-standalone PROPERTIES ARCHIVE_OUTPUT_DIRECTORY archive OUTPUT_NAME msdfgen)
  80. target_compile_definitions(msdfgen-standalone PRIVATE MSDFGEN_STANDALONE)
  81. target_link_libraries(msdfgen-standalone PRIVATE msdfgen::msdfgen msdfgen::msdfgen-ext)
  82. if(FREETYPE_WITH_PNG)
  83. find_package(ZLIB REQUIRED)
  84. find_package(PNG REQUIRED)
  85. target_link_libraries(msdfgen-standalone PRIVATE ZLIB::ZLIB PNG::PNG)
  86. endif()
  87. if(FREETYPE_WITH_HARFBUZZ)
  88. # No FindHarfBuzz.cmake available so falling back to CMAKE_LIBRARY_PATH
  89. find_library(FREETYPE_HARFBUZZ_LIB "harfbuzz")
  90. target_link_libraries(msdfgen-standalone PRIVATE "${FREETYPE_HARFBUZZ_LIB}")
  91. endif()
  92. endif()
  93. #----------------------------------------------------------------
  94. # Installation and exportation of the libraries
  95. #----------------------------------------------------------------
  96. include(CMakePackageConfigHelpers)
  97. set(MSDFGEN_CONFIG_PATH "lib/cmake/msdfgen")
  98. # install tree package config
  99. write_basic_package_version_file(
  100. "${CMAKE_CURRENT_BINARY_DIR}/msdfgenConfigVersion.cmake"
  101. VERSION ${PROJECT_VERSION}
  102. COMPATIBILITY SameMajorVersion
  103. )
  104. configure_package_config_file(
  105. cmake/msdfgenConfig.cmake.in
  106. ${MSDFGEN_CONFIG_PATH}/msdfgenConfig.cmake
  107. INSTALL_DESTINATION ${MSDFGEN_CONFIG_PATH}
  108. NO_CHECK_REQUIRED_COMPONENTS_MACRO
  109. )
  110. # build tree package config
  111. configure_file(
  112. cmake/msdfgenConfig.cmake.in
  113. msdfgenConfig.cmake
  114. @ONLY
  115. )
  116. install(TARGETS msdfgen EXPORT msdfgenTargets
  117. RUNTIME DESTINATION bin
  118. LIBRARY DESTINATION lib
  119. ARCHIVE DESTINATION lib
  120. FRAMEWORK DESTINATION lib
  121. PUBLIC_HEADER DESTINATION include/msdfgen/core
  122. )
  123. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen.h" "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" DESTINATION include/msdfgen)
  124. install(TARGETS msdfgen-ext EXPORT msdfgenTargets
  125. RUNTIME DESTINATION bin
  126. LIBRARY DESTINATION lib
  127. ARCHIVE DESTINATION lib
  128. FRAMEWORK DESTINATION lib
  129. PUBLIC_HEADER DESTINATION include/msdfgen/ext
  130. )
  131. if(MSDFGEN_BUILD_MSDFGEN_STANDALONE)
  132. install(TARGETS msdfgen-standalone EXPORT msdfgenTargets RUNTIME DESTINATION bin)
  133. endif()
  134. install(
  135. FILES
  136. "${CMAKE_CURRENT_BINARY_DIR}/${MSDFGEN_CONFIG_PATH}/msdfgenConfig.cmake"
  137. "${CMAKE_CURRENT_BINARY_DIR}/msdfgenConfigVersion.cmake"
  138. DESTINATION ${MSDFGEN_CONFIG_PATH}
  139. )
  140. export(
  141. EXPORT msdfgenTargets
  142. NAMESPACE msdfgen::
  143. FILE "${CMAKE_CURRENT_BINARY_DIR}/msdfgenTargets.cmake"
  144. )
  145. install(
  146. EXPORT msdfgenTargets FILE msdfgenTargets.cmake
  147. NAMESPACE msdfgen::
  148. DESTINATION ${MSDFGEN_CONFIG_PATH}
  149. )