CMakeLists.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. set(MINIMP3_INCLUDE_DIR ${INCLUDES_BASE_DIR}/minimp3)
  2. set(MIKKTSPACE_INCLUDE_DIR ${INCLUDES_BASE_DIR}/mikktspace)
  3. add_library(fmt.hdll
  4. fmt.c
  5. sha1.c
  6. dxt.c
  7. mikkt.c
  8. ${MIKKTSPACE_INCLUDE_DIR}/mikktspace.c
  9. )
  10. if (WIN32)
  11. set(PNG_INCLUDE_DIRS ${INCLUDES_BASE_DIR}/png)
  12. target_sources(fmt.hdll PRIVATE
  13. ${INCLUDES_BASE_DIR}/png/png.c
  14. ${INCLUDES_BASE_DIR}/png/pngerror.c
  15. ${INCLUDES_BASE_DIR}/png/pngget.c
  16. ${INCLUDES_BASE_DIR}/png/pngmem.c
  17. ${INCLUDES_BASE_DIR}/png/pngpread.c
  18. ${INCLUDES_BASE_DIR}/png/pngread.c
  19. ${INCLUDES_BASE_DIR}/png/pngrio.c
  20. ${INCLUDES_BASE_DIR}/png/pngrtran.c
  21. ${INCLUDES_BASE_DIR}/png/pngrutil.c
  22. ${INCLUDES_BASE_DIR}/png/pngset.c
  23. ${INCLUDES_BASE_DIR}/png/pngtrans.c
  24. ${INCLUDES_BASE_DIR}/png/pngwio.c
  25. ${INCLUDES_BASE_DIR}/png/pngwrite.c
  26. ${INCLUDES_BASE_DIR}/png/pngwtran.c
  27. ${INCLUDES_BASE_DIR}/png/pngwutil.c)
  28. endif()
  29. if (WIN32)
  30. set(VORBIS_INCLUDE_DIR ${INCLUDES_BASE_DIR}/vorbis)
  31. target_sources(fmt.hdll PRIVATE
  32. ${INCLUDES_BASE_DIR}/vorbis/bitrate.c
  33. ${INCLUDES_BASE_DIR}/vorbis/bitwise.c
  34. ${INCLUDES_BASE_DIR}/vorbis/block.c
  35. ${INCLUDES_BASE_DIR}/vorbis/codebook.c
  36. ${INCLUDES_BASE_DIR}/vorbis/envelope.c
  37. ${INCLUDES_BASE_DIR}/vorbis/floor0.c
  38. ${INCLUDES_BASE_DIR}/vorbis/floor1.c
  39. ${INCLUDES_BASE_DIR}/vorbis/framing.c
  40. ${INCLUDES_BASE_DIR}/vorbis/info.c
  41. ${INCLUDES_BASE_DIR}/vorbis/lookup.c
  42. ${INCLUDES_BASE_DIR}/vorbis/lpc.c
  43. ${INCLUDES_BASE_DIR}/vorbis/lsp.c
  44. ${INCLUDES_BASE_DIR}/vorbis/mapping0.c
  45. ${INCLUDES_BASE_DIR}/vorbis/mdct.c
  46. ${INCLUDES_BASE_DIR}/vorbis/psy.c
  47. ${INCLUDES_BASE_DIR}/vorbis/registry.c
  48. ${INCLUDES_BASE_DIR}/vorbis/res0.c
  49. ${INCLUDES_BASE_DIR}/vorbis/sharedbook.c
  50. ${INCLUDES_BASE_DIR}/vorbis/smallft.c
  51. ${INCLUDES_BASE_DIR}/vorbis/synthesis.c
  52. ${INCLUDES_BASE_DIR}/vorbis/vorbisfile.c
  53. ${INCLUDES_BASE_DIR}/vorbis/window.c
  54. )
  55. endif()
  56. if(WIN32)
  57. set(ZLIB_INCLUDE_DIRS ${INCLUDES_BASE_DIR}/zlib)
  58. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  59. set(TurboJPEG_INCLUDE_DIRS ${INCLUDES_BASE_DIR}/turbojpeg ${INCLUDES_BASE_DIR}/turbojpeg/x64)
  60. find_library(TurboJPEG_LIBRARIES simd PATHS ${INCLUDES_BASE_DIR}/turbojpeg/x64)
  61. else()
  62. set(TurboJPEG_INCLUDE_DIRS ${INCLUDES_BASE_DIR}/turbojpeg ${INCLUDES_BASE_DIR}/turbojpeg/x86)
  63. find_library(TurboJPEG_LIBRARIES simd PATHS ${INCLUDES_BASE_DIR}/turbojpeg/x86)
  64. endif()
  65. target_sources(fmt.hdll PRIVATE
  66. ${INCLUDES_BASE_DIR}/turbojpeg/jaricom.c
  67. ${INCLUDES_BASE_DIR}/turbojpeg/jcapimin.c
  68. ${INCLUDES_BASE_DIR}/turbojpeg/jcapistd.c
  69. ${INCLUDES_BASE_DIR}/turbojpeg/jcarith.c
  70. ${INCLUDES_BASE_DIR}/turbojpeg/jccoefct.c
  71. ${INCLUDES_BASE_DIR}/turbojpeg/jccolor.c
  72. ${INCLUDES_BASE_DIR}/turbojpeg/jcdctmgr.c
  73. ${INCLUDES_BASE_DIR}/turbojpeg/jchuff.c
  74. ${INCLUDES_BASE_DIR}/turbojpeg/jcinit.c
  75. ${INCLUDES_BASE_DIR}/turbojpeg/jcmainct.c
  76. ${INCLUDES_BASE_DIR}/turbojpeg/jcmarker.c
  77. ${INCLUDES_BASE_DIR}/turbojpeg/jcmaster.c
  78. ${INCLUDES_BASE_DIR}/turbojpeg/jcomapi.c
  79. ${INCLUDES_BASE_DIR}/turbojpeg/jcparam.c
  80. ${INCLUDES_BASE_DIR}/turbojpeg/jcphuff.c
  81. ${INCLUDES_BASE_DIR}/turbojpeg/jcprepct.c
  82. ${INCLUDES_BASE_DIR}/turbojpeg/jcsample.c
  83. ${INCLUDES_BASE_DIR}/turbojpeg/jctrans.c
  84. ${INCLUDES_BASE_DIR}/turbojpeg/jdapimin.c
  85. ${INCLUDES_BASE_DIR}/turbojpeg/jdapistd.c
  86. ${INCLUDES_BASE_DIR}/turbojpeg/jdarith.c
  87. ${INCLUDES_BASE_DIR}/turbojpeg/jdatadst-tj.c
  88. ${INCLUDES_BASE_DIR}/turbojpeg/jdatadst.c
  89. ${INCLUDES_BASE_DIR}/turbojpeg/jdatasrc-tj.c
  90. ${INCLUDES_BASE_DIR}/turbojpeg/jdatasrc.c
  91. ${INCLUDES_BASE_DIR}/turbojpeg/jdcoefct.c
  92. ${INCLUDES_BASE_DIR}/turbojpeg/jdcolor.c
  93. ${INCLUDES_BASE_DIR}/turbojpeg/jddctmgr.c
  94. ${INCLUDES_BASE_DIR}/turbojpeg/jdhuff.c
  95. ${INCLUDES_BASE_DIR}/turbojpeg/jdinput.c
  96. ${INCLUDES_BASE_DIR}/turbojpeg/jdmainct.c
  97. ${INCLUDES_BASE_DIR}/turbojpeg/jdmarker.c
  98. ${INCLUDES_BASE_DIR}/turbojpeg/jdmaster.c
  99. ${INCLUDES_BASE_DIR}/turbojpeg/jdmerge.c
  100. ${INCLUDES_BASE_DIR}/turbojpeg/jdphuff.c
  101. ${INCLUDES_BASE_DIR}/turbojpeg/jdpostct.c
  102. ${INCLUDES_BASE_DIR}/turbojpeg/jdsample.c
  103. ${INCLUDES_BASE_DIR}/turbojpeg/jdtrans.c
  104. ${INCLUDES_BASE_DIR}/turbojpeg/jerror.c
  105. ${INCLUDES_BASE_DIR}/turbojpeg/jfdctflt.c
  106. ${INCLUDES_BASE_DIR}/turbojpeg/jfdctfst.c
  107. ${INCLUDES_BASE_DIR}/turbojpeg/jfdctint.c
  108. ${INCLUDES_BASE_DIR}/turbojpeg/jidctflt.c
  109. ${INCLUDES_BASE_DIR}/turbojpeg/jidctfst.c
  110. ${INCLUDES_BASE_DIR}/turbojpeg/jidctint.c
  111. ${INCLUDES_BASE_DIR}/turbojpeg/jidctred.c
  112. ${INCLUDES_BASE_DIR}/turbojpeg/jmemmgr.c
  113. ${INCLUDES_BASE_DIR}/turbojpeg/jmemnobs.c
  114. ${INCLUDES_BASE_DIR}/turbojpeg/jquant1.c
  115. ${INCLUDES_BASE_DIR}/turbojpeg/jquant2.c
  116. ${INCLUDES_BASE_DIR}/turbojpeg/jsimd.c
  117. ${INCLUDES_BASE_DIR}/turbojpeg/jutils.c
  118. ${INCLUDES_BASE_DIR}/turbojpeg/transupp.c
  119. ${INCLUDES_BASE_DIR}/turbojpeg/turbojpeg.c
  120. ${INCLUDES_BASE_DIR}/zlib/adler32.c
  121. ${INCLUDES_BASE_DIR}/zlib/crc32.c
  122. ${INCLUDES_BASE_DIR}/zlib/deflate.c
  123. ${INCLUDES_BASE_DIR}/zlib/inffast.c
  124. ${INCLUDES_BASE_DIR}/zlib/inflate.c
  125. ${INCLUDES_BASE_DIR}/zlib/inftrees.c
  126. ${INCLUDES_BASE_DIR}/zlib/trees.c
  127. ${INCLUDES_BASE_DIR}/zlib/zutil.c
  128. )
  129. elseif(DOWNLOAD_DEPENDENCIES)
  130. find_package(ZLIB REQUIRED)
  131. ExternalProject_Add(turbojpeg-project
  132. URL https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.1.1/libjpeg-turbo-3.1.1.tar.gz
  133. URL_HASH SHA256=aadc97ea91f6ef078b0ae3a62bba69e008d9a7db19b34e4ac973b19b71b4217c
  134. CMAKE_ARGS
  135. ${CMAKE_COMMON_DEP_ARGS}
  136. -DBUILD_SHARED_LIBS=OFF
  137. -DCMAKE_INSTALL_LIBDIR=lib
  138. # INSTALL_BYPRODUCTS in CMake 3.26+
  139. BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libturbojpeg.a
  140. )
  141. ExternalProject_Get_Property(turbojpeg-project INSTALL_DIR)
  142. add_library(turbojpeg STATIC IMPORTED)
  143. set_target_properties(turbojpeg PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libturbojpeg.a)
  144. set(TurboJPEG_INCLUDE_DIRS ${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
  145. set(TurboJPEG_LIBRARIES turbojpeg)
  146. add_dependencies(turbojpeg turbojpeg-project)
  147. ExternalProject_Add(libpng
  148. URL https://github.com/pnggroup/libpng/archive/refs/tags/v1.6.50.tar.gz
  149. URL_HASH SHA256=71158e53cfdf2877bc99bcab33641d78df3f48e6e0daad030afe9cb8c031aa46
  150. CMAKE_ARGS
  151. ${CMAKE_COMMON_DEP_ARGS}
  152. -DPNG_SHARED=OFF
  153. -DPNG_TESTS=OFF
  154. -DPNG_TOOLS=OFF
  155. -DPNG_FRAMEWORK=OFF
  156. -DCMAKE_INSTALL_LIBDIR=lib
  157. # INSTALL_BYPRODUCTS in CMake 3.26+
  158. BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libpng.a
  159. )
  160. ExternalProject_Get_Property(libpng INSTALL_DIR)
  161. add_library(png STATIC IMPORTED)
  162. set_target_properties(png PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libpng.a)
  163. set(PNG_INCLUDE_DIRS ${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
  164. set(PNG_LIBRARIES png)
  165. add_dependencies(png libpng)
  166. ExternalProject_Add(libogg
  167. URL https://github.com/xiph/ogg/releases/download/v1.3.6/libogg-1.3.6.tar.gz
  168. URL_HASH SHA256=83e6704730683d004d20e21b8f7f55dcb3383cdf84c0daedf30bde175f774638
  169. CMAKE_ARGS
  170. ${CMAKE_COMMON_DEP_ARGS}
  171. -DCMAKE_INSTALL_LIBDIR=lib
  172. # INSTALL_BYPRODUCTS in CMake 3.26+
  173. BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libogg.a
  174. )
  175. ExternalProject_Get_Property(libogg INSTALL_DIR)
  176. set(OGG_INSTALL_DIR ${INSTALL_DIR})
  177. set(OGG_LIBRARY ${OGG_INSTALL_DIR}/lib/libogg.a)
  178. set(OGG_INCLUDE_DIR ${OGG_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
  179. ExternalProject_Add(libvorbis
  180. URL https://github.com/xiph/vorbis/releases/download/v1.3.7/libvorbis-1.3.7.tar.xz
  181. URL_HASH SHA256=b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b
  182. CMAKE_ARGS
  183. ${CMAKE_COMMON_DEP_ARGS}
  184. -DOGG_LIBRARY=${OGG_LIBRARY}
  185. -DOGG_INCLUDE_DIR=${OGG_INCLUDE_DIR}
  186. -DCMAKE_INSTALL_LIBDIR=lib
  187. -DCMAKE_POLICY_VERSION_MINIMUM=3.5 # https://github.com/xiph/vorbis/issues/113
  188. # INSTALL_BYPRODUCTS in CMake 3.26+
  189. BUILD_BYPRODUCTS
  190. <INSTALL_DIR>/lib/libvorbis.a
  191. <INSTALL_DIR>/lib/libvorbisfile.a
  192. )
  193. add_dependencies(libvorbis libogg)
  194. ExternalProject_Get_Property(libvorbis INSTALL_DIR)
  195. set(VORBIS_INSTALL_DIR ${INSTALL_DIR})
  196. add_library(ogg STATIC IMPORTED)
  197. set_target_properties(ogg PROPERTIES IMPORTED_LOCATION ${OGG_LIBRARY})
  198. add_library(vorbis STATIC IMPORTED)
  199. set_target_properties(vorbis PROPERTIES IMPORTED_LOCATION ${VORBIS_INSTALL_DIR}/lib/libvorbis.a)
  200. add_library(vorbisfile STATIC IMPORTED)
  201. set_target_properties(vorbisfile PROPERTIES IMPORTED_LOCATION ${VORBIS_INSTALL_DIR}/lib/libvorbisfile.a)
  202. set(VORBIS_INCLUDE_DIR ${VORBIS_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR} ${OGG_INCLUDE_DIR})
  203. set(OGGVORBIS_LIBRARIES vorbis ogg vorbisfile)
  204. add_dependencies(vorbisfile libvorbis)
  205. add_dependencies(vorbis libvorbis)
  206. add_dependencies(ogg libogg)
  207. else()
  208. find_package(ZLIB REQUIRED)
  209. find_package(PNG REQUIRED)
  210. find_package(TurboJPEG QUIET)
  211. if(NOT TurboJPEG_FOUND)
  212. pkg_check_modules(TurboJPEG REQUIRED libjpeg)
  213. endif()
  214. find_package(OggVorbis QUIET)
  215. if(NOT OGGVORBIS_FOUND)
  216. pkg_check_modules(OGGVORBIS REQUIRED vorbis vorbisenc vorbisfile)
  217. endif()
  218. endif()
  219. set_as_hdll(fmt)
  220. target_include_directories(fmt.hdll
  221. PRIVATE
  222. ${ZLIB_INCLUDE_DIRS}
  223. ${PNG_INCLUDE_DIRS}
  224. ${TurboJPEG_INCLUDE_DIRS}
  225. ${VORBIS_INCLUDE_DIR}
  226. ${MINIMP3_INCLUDE_DIR}
  227. ${MIKKTSPACE_INCLUDE_DIR}
  228. )
  229. target_link_libraries(fmt.hdll
  230. libhl
  231. ${ZLIB_LIBRARIES}
  232. ${PNG_LIBRARIES}
  233. ${TurboJPEG_LIBRARIES}
  234. ${OGGVORBIS_LIBRARIES}
  235. )
  236. install(
  237. TARGETS
  238. fmt.hdll
  239. DESTINATION ${HDLL_DESTINATION}
  240. )