CMakeLists.txt 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. # ################################################################
  2. # Copyright (c) 2016-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. cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
  10. # As of 2018-12-26 ZSTD has been validated to build with cmake version 3.13.2 new policies.
  11. # Set and use the newest cmake policies that are validated to work
  12. set(ZSTD_MAX_VALIDATED_CMAKE_MAJOR_VERSION "3")
  13. set(ZSTD_MAX_VALIDATED_CMAKE_MINOR_VERSION "13") #Policies never changed at PATCH level
  14. if("${CMAKE_MAJOR_VERSION}" LESS 3)
  15. set(ZSTD_CMAKE_POLICY_VERSION "${CMAKE_VERSION}")
  16. elseif( "${ZSTD_MAX_VALIDATED_CMAKE_MAJOR_VERSION}" EQUAL "${CMAKE_MAJOR_VERSION}" AND
  17. "${ZSTD_MAX_VALIDATED_CMAKE_MINOR_VERSION}" GREATER "${CMAKE_MINOR_VERSION}")
  18. set(ZSTD_CMAKE_POLICY_VERSION "${CMAKE_VERSION}")
  19. else()
  20. set(ZSTD_CMAKE_POLICY_VERSION "${ZSTD_MAX_VALIDATED_CMAKE_MAJOR_VERSION}.${ZSTD_MAX_VALIDATED_CMAKE_MINOR_VERSION}.0")
  21. endif()
  22. cmake_policy(VERSION ${ZSTD_CMAKE_POLICY_VERSION})
  23. set(CMAKE_BUILD_WITH_INSTALL_RPATH on)
  24. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
  25. set(ZSTD_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..")
  26. set(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib)
  27. # Parse version
  28. include(GetZstdLibraryVersion)
  29. GetZstdLibraryVersion(${LIBRARY_DIR}/zstd.h zstd_VERSION_MAJOR zstd_VERSION_MINOR zstd_VERSION_PATCH)
  30. if( CMAKE_MAJOR_VERSION LESS 3 )
  31. ## Provide cmake 3+ behavior for older versions of cmake
  32. project(zstd)
  33. set(PROJECT_VERSION_MAJOR ${zstd_VERSION_MAJOR})
  34. set(PROJECT_VERSION_MINOR ${zstd_VERSION_MINOR})
  35. set(PROJECT_VERSION_PATCH ${zstd_VERSION_PATCH})
  36. set(PROJECT_VERSION "${zstd_VERSION_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH}")
  37. enable_language(C) # Main library is in C
  38. enable_language(CXX) # Testing contributed code also utilizes CXX
  39. else()
  40. project(zstd
  41. VERSION "${zstd_VERSION_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH}"
  42. LANGUAGES C # Main library is in C
  43. CXX # Testing contributed code also utilizes CXX
  44. )
  45. endif()
  46. message(STATUS "ZSTD VERSION: ${zstd_VERSION}")
  47. set(zstd_HOMEPAGE_URL "http://www.zstd.net")
  48. set(zstd_DESCRIPTION "Zstandard is a real-time compression algorithm, providing high compression ratios.")
  49. # Set a default build type if none was specified
  50. if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  51. message(STATUS "Setting build type to 'Release' as none was specified.")
  52. set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
  53. # Set the possible values of build type for cmake-gui
  54. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
  55. endif()
  56. include(GNUInstallDirs)
  57. #-----------------------------------------------------------------------------
  58. # Add extra compilation flags
  59. #-----------------------------------------------------------------------------
  60. include(AddZstdCompilationFlags)
  61. ADD_ZSTD_COMPILATION_FLAGS()
  62. # Always hide XXHash symbols
  63. add_definitions(-DXXH_NAMESPACE=ZSTD_)
  64. #-----------------------------------------------------------------------------
  65. # Installation variables
  66. #-----------------------------------------------------------------------------
  67. message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
  68. message(STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}")
  69. #-----------------------------------------------------------------------------
  70. # Options
  71. #-----------------------------------------------------------------------------
  72. # Legacy support
  73. option(ZSTD_LEGACY_SUPPORT "LEGACY SUPPORT" OFF)
  74. if (ZSTD_LEGACY_SUPPORT)
  75. message(STATUS "ZSTD_LEGACY_SUPPORT defined!")
  76. add_definitions(-DZSTD_LEGACY_SUPPORT=5)
  77. else ()
  78. message(STATUS "ZSTD_LEGACY_SUPPORT not defined!")
  79. add_definitions(-DZSTD_LEGACY_SUPPORT=0)
  80. endif ()
  81. if (ANDROID)
  82. set(ZSTD_MULTITHREAD_SUPPORT_DEFAULT OFF)
  83. else()
  84. set(ZSTD_MULTITHREAD_SUPPORT_DEFAULT ON)
  85. endif()
  86. # Multi-threading support
  87. option(ZSTD_MULTITHREAD_SUPPORT "MULTITHREADING SUPPORT" ${ZSTD_MULTITHREAD_SUPPORT_DEFAULT})
  88. if (ZSTD_MULTITHREAD_SUPPORT)
  89. message(STATUS "ZSTD_MULTITHREAD_SUPPORT is enabled")
  90. else ()
  91. message(STATUS "ZSTD_MULTITHREAD_SUPPORT is disabled")
  92. endif ()
  93. option(ZSTD_BUILD_PROGRAMS "BUILD PROGRAMS" ON)
  94. option(ZSTD_BUILD_CONTRIB "BUILD CONTRIB" OFF)
  95. # Respect the conventional CMake option for enabling tests if it was specified on the first configure
  96. if (BUILD_TESTING)
  97. set(ZSTD_BUILD_TESTS_default ON)
  98. else()
  99. set(ZSTD_BUILD_TESTS_default OFF)
  100. endif()
  101. option(ZSTD_BUILD_TESTS "BUILD TESTS" ${ZSTD_BUILD_TESTS_default})
  102. if (MSVC)
  103. option(ZSTD_USE_STATIC_RUNTIME "LINK TO STATIC RUN-TIME LIBRARIES" OFF)
  104. endif ()
  105. #-----------------------------------------------------------------------------
  106. # External dependencies
  107. #-----------------------------------------------------------------------------
  108. if (ZSTD_MULTITHREAD_SUPPORT AND UNIX)
  109. set(THREADS_PREFER_PTHREAD_FLAG ON)
  110. find_package(Threads REQUIRED)
  111. if(CMAKE_USE_PTHREADS_INIT)
  112. set(THREADS_LIBS "${CMAKE_THREAD_LIBS_INIT}")
  113. else()
  114. message(SEND_ERROR "ZSTD currently does not support thread libraries other than pthreads")
  115. endif()
  116. endif ()
  117. #-----------------------------------------------------------------------------
  118. # Add source directories
  119. #-----------------------------------------------------------------------------
  120. add_subdirectory(lib)
  121. option(ZSTD_PROGRAMS_LINK_SHARED "PROGRAMS LINK SHARED" OFF)
  122. if (ZSTD_BUILD_PROGRAMS)
  123. if (NOT ZSTD_BUILD_STATIC AND NOT ZSTD_PROGRAMS_LINK_SHARED)
  124. message(SEND_ERROR "You need to build static library to build zstd CLI")
  125. elseif(NOT ZSTD_BUILD_SHARED AND ZSTD_PROGRAMS_LINK_SHARED)
  126. message(SEND_ERROR "You need to build shared library to build zstd CLI")
  127. endif ()
  128. add_subdirectory(programs)
  129. endif ()
  130. if (ZSTD_BUILD_TESTS)
  131. enable_testing()
  132. if (NOT ZSTD_BUILD_STATIC)
  133. message(SEND_ERROR "You need to build static library to build tests")
  134. endif ()
  135. add_subdirectory(tests)
  136. endif ()
  137. if (ZSTD_BUILD_CONTRIB)
  138. add_subdirectory(contrib)
  139. endif ()
  140. #-----------------------------------------------------------------------------
  141. # Add clean-all target
  142. #-----------------------------------------------------------------------------
  143. add_custom_target(clean-all
  144. COMMAND ${CMAKE_BUILD_TOOL} clean
  145. COMMAND rm -rf ${CMAKE_BINARY_DIR}/
  146. )
  147. #-----------------------------------------------------------------------------
  148. # Generate Package Config files
  149. #
  150. # This section is based on the boiler plate code from:
  151. # https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#creating-packages
  152. #-----------------------------------------------------------------------------
  153. include(CMakePackageConfigHelpers)
  154. write_basic_package_version_file(
  155. "${CMAKE_CURRENT_BINARY_DIR}/zstdConfigVersion.cmake"
  156. VERSION ${zstd_VERSION}
  157. COMPATIBILITY SameMajorVersion
  158. )
  159. # A Package Config file that works from the build directory
  160. export(EXPORT zstdExports
  161. FILE "${CMAKE_CURRENT_BINARY_DIR}/zstdTargets.cmake"
  162. NAMESPACE zstd::
  163. )
  164. configure_file(zstdConfig.cmake
  165. "${CMAKE_CURRENT_BINARY_DIR}/zstdConfig.cmake"
  166. COPYONLY
  167. )
  168. # A Package Config file that works from the installation directory
  169. set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/zstd)
  170. install(EXPORT zstdExports
  171. FILE zstdTargets.cmake
  172. NAMESPACE zstd::
  173. DESTINATION ${ConfigPackageLocation}
  174. )
  175. install(FILES
  176. zstdConfig.cmake
  177. "${CMAKE_CURRENT_BINARY_DIR}/zstdConfigVersion.cmake"
  178. DESTINATION ${ConfigPackageLocation}
  179. )