CMakeLists.txt 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. # ################################################################
  2. # Copyright (c) 2015-present, Yann Collet, Facebook, Inc.
  3. # All rights reserved.
  4. #
  5. # This source code is licensed under both the BSD-style license (found in the
  6. # LICENSE file in the root directory of this source tree) and the GPLv2 (found
  7. # in the COPYING file in the root directory of this source tree).
  8. # ################################################################
  9. project(libzstd C ASM)
  10. set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
  11. option(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" ON)
  12. option(ZSTD_BUILD_SHARED "BUILD SHARED LIBRARIES" ON)
  13. if(NOT ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC)
  14. message(SEND_ERROR "You need to build at least one flavor of libzstd")
  15. endif()
  16. # Define library directory, where sources and header files are located
  17. include_directories(${LIBRARY_DIR} ${LIBRARY_DIR}/common)
  18. file(GLOB CommonSources ${LIBRARY_DIR}/common/*.c)
  19. file(GLOB CompressSources ${LIBRARY_DIR}/compress/*.c)
  20. if (MSVC)
  21. file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c)
  22. add_compile_options(-DZSTD_DISABLE_ASM)
  23. else ()
  24. file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c ${LIBRARY_DIR}/decompress/*.S)
  25. endif ()
  26. file(GLOB DictBuilderSources ${LIBRARY_DIR}/dictBuilder/*.c)
  27. set(Sources
  28. ${CommonSources}
  29. ${CompressSources}
  30. ${DecompressSources}
  31. ${DictBuilderSources})
  32. file(GLOB CommonHeaders ${LIBRARY_DIR}/common/*.h)
  33. file(GLOB CompressHeaders ${LIBRARY_DIR}/compress/*.h)
  34. file(GLOB DecompressHeaders ${LIBRARY_DIR}/decompress/*.h)
  35. file(GLOB DictBuilderHeaders ${LIBRARY_DIR}/dictBuilder/*.h)
  36. set(Headers
  37. ${LIBRARY_DIR}/zstd.h
  38. ${CommonHeaders}
  39. ${CompressHeaders}
  40. ${DecompressHeaders}
  41. ${DictBuilderHeaders})
  42. if (ZSTD_LEGACY_SUPPORT)
  43. set(LIBRARY_LEGACY_DIR ${LIBRARY_DIR}/legacy)
  44. include_directories(${LIBRARY_LEGACY_DIR})
  45. set(Sources ${Sources}
  46. ${LIBRARY_LEGACY_DIR}/zstd_v01.c
  47. ${LIBRARY_LEGACY_DIR}/zstd_v02.c
  48. ${LIBRARY_LEGACY_DIR}/zstd_v03.c
  49. ${LIBRARY_LEGACY_DIR}/zstd_v04.c
  50. ${LIBRARY_LEGACY_DIR}/zstd_v05.c
  51. ${LIBRARY_LEGACY_DIR}/zstd_v06.c
  52. ${LIBRARY_LEGACY_DIR}/zstd_v07.c)
  53. set(Headers ${Headers}
  54. ${LIBRARY_LEGACY_DIR}/zstd_legacy.h
  55. ${LIBRARY_LEGACY_DIR}/zstd_v01.h
  56. ${LIBRARY_LEGACY_DIR}/zstd_v02.h
  57. ${LIBRARY_LEGACY_DIR}/zstd_v03.h
  58. ${LIBRARY_LEGACY_DIR}/zstd_v04.h
  59. ${LIBRARY_LEGACY_DIR}/zstd_v05.h
  60. ${LIBRARY_LEGACY_DIR}/zstd_v06.h
  61. ${LIBRARY_LEGACY_DIR}/zstd_v07.h)
  62. endif ()
  63. if (MSVC)
  64. set(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/libzstd-dll)
  65. set(PlatformDependResources ${MSVC_RESOURCE_DIR}/libzstd-dll.rc)
  66. endif ()
  67. # Split project to static and shared libraries build
  68. set(library_targets)
  69. if (ZSTD_BUILD_SHARED)
  70. add_library(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources})
  71. list(APPEND library_targets libzstd_shared)
  72. if (ZSTD_MULTITHREAD_SUPPORT)
  73. set_property(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD")
  74. if (UNIX)
  75. target_link_libraries(libzstd_shared ${THREADS_LIBS})
  76. endif ()
  77. endif()
  78. endif ()
  79. if (ZSTD_BUILD_STATIC)
  80. add_library(libzstd_static STATIC ${Sources} ${Headers})
  81. list(APPEND library_targets libzstd_static)
  82. if (ZSTD_MULTITHREAD_SUPPORT)
  83. set_property(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD")
  84. if (UNIX)
  85. target_link_libraries(libzstd_static ${THREADS_LIBS})
  86. endif ()
  87. endif ()
  88. endif ()
  89. # Add specific compile definitions for MSVC project
  90. if (MSVC)
  91. if (ZSTD_BUILD_SHARED)
  92. set_property(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_DLL_EXPORT=1;ZSTD_HEAPMODE=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS")
  93. endif ()
  94. if (ZSTD_BUILD_STATIC)
  95. set_property(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS")
  96. endif ()
  97. endif ()
  98. # With MSVC static library needs to be renamed to avoid conflict with import library
  99. if (MSVC OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT MINGW))
  100. set(STATIC_LIBRARY_BASE_NAME zstd_static)
  101. else ()
  102. set(STATIC_LIBRARY_BASE_NAME zstd)
  103. endif ()
  104. # Define static and shared library names
  105. if (ZSTD_BUILD_SHARED)
  106. set_target_properties(
  107. libzstd_shared
  108. PROPERTIES
  109. OUTPUT_NAME zstd
  110. VERSION ${zstd_VERSION_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH}
  111. SOVERSION ${zstd_VERSION_MAJOR})
  112. endif ()
  113. if (ZSTD_BUILD_STATIC)
  114. set_target_properties(
  115. libzstd_static
  116. PROPERTIES
  117. POSITION_INDEPENDENT_CODE On
  118. OUTPUT_NAME ${STATIC_LIBRARY_BASE_NAME})
  119. endif ()
  120. if (UNIX OR MINGW)
  121. # pkg-config
  122. set(PREFIX "${CMAKE_INSTALL_PREFIX}")
  123. set(EXEC_PREFIX "\${prefix}")
  124. set(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}")
  125. set(INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
  126. set(VERSION "${zstd_VERSION}")
  127. string(LENGTH "${PREFIX}" PREFIX_LENGTH)
  128. string(SUBSTRING "${LIBDIR}" 0 ${PREFIX_LENGTH} LIBDIR_PREFIX)
  129. string(SUBSTRING "${LIBDIR}" ${PREFIX_LENGTH} -1 LIBDIR_SUFFIX)
  130. string(SUBSTRING "${INCLUDEDIR}" 0 ${PREFIX_LENGTH} INCLUDEDIR_PREFIX)
  131. string(SUBSTRING "${INCLUDEDIR}" ${PREFIX_LENGTH} -1 INCLUDEDIR_SUFFIX)
  132. if ("${INCLUDEDIR_PREFIX}" STREQUAL "${PREFIX}")
  133. set(INCLUDEDIR "\${prefix}${INCLUDEDIR_SUFFIX}")
  134. endif()
  135. if ("${LIBDIR_PREFIX}" STREQUAL "${PREFIX}")
  136. set(LIBDIR "\${exec_prefix}${LIBDIR_SUFFIX}")
  137. endif()
  138. configure_file("${LIBRARY_DIR}/libzstd.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" @ONLY)
  139. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
  140. endif ()
  141. # install target
  142. install(FILES
  143. "${LIBRARY_DIR}/zstd.h"
  144. "${LIBRARY_DIR}/zdict.h"
  145. "${LIBRARY_DIR}/zstd_errors.h"
  146. DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
  147. install(TARGETS ${library_targets}
  148. EXPORT zstdExports
  149. INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
  150. ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  151. LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  152. RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
  153. BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}"
  154. )
  155. # uninstall target
  156. if (NOT TARGET uninstall)
  157. configure_file(
  158. "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
  159. "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  160. IMMEDIATE @ONLY)
  161. add_custom_target(uninstall
  162. COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
  163. endif ()