# ################################################################
-# zstd - Makefile
-# Copyright (C) Yann Collet 2014-2016
+# Copyright (c) 2015-present, Yann Collet, Facebook, Inc.
# All rights reserved.
#
-# BSD license
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice, this
-# list of conditions and the following disclaimer.
-#
-# * Redistributions in binary form must reproduce the above copyright notice, this
-# list of conditions and the following disclaimer in the documentation and/or
-# other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# You can contact the author at :
-# - zstd homepage : http://www.zstd.net/
+# This source code is licensed under both the BSD-style license (found in the
+# LICENSE file in the root directory of this source tree) and the GPLv2 (found
+# in the COPYING file in the root directory of this source tree).
# ################################################################
-# Get library version based on information from input content (use regular exp)
-function(GetLibraryVersion _content _outputVar1 _outputVar2 _outputVar3)
- string(REGEX MATCHALL ".*define ZSTD_VERSION_MAJOR+.* ([0-9]+).*define ZSTD_VERSION_MINOR+.* ([0-9]+).*define ZSTD_VERSION_RELEASE+.* ([0-9]+)" VERSION_REGEX "${_content}")
- SET(${_outputVar1} ${CMAKE_MATCH_1} PARENT_SCOPE)
- SET(${_outputVar2} ${CMAKE_MATCH_2} PARENT_SCOPE)
- SET(${_outputVar3} ${CMAKE_MATCH_3} PARENT_SCOPE)
-endfunction()
-
PROJECT(libzstd)
SET(CMAKE_INCLUDE_CURRENT_DIR TRUE)
+OPTION(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" ON)
+OPTION(ZSTD_BUILD_SHARED "BUILD SHARED LIBRARIES" ON)
-# Define project root directory
-SET(ROOT_DIR ../../..)
+IF(NOT ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC)
+ MESSAGE(SEND_ERROR "You need to build at least one flavor of libstd")
+ENDIF()
# Define library directory, where sources and header files are located
-SET(LIBRARY_DIR ${ROOT_DIR}/lib)
+SET(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib)
INCLUDE_DIRECTORIES(${LIBRARY_DIR} ${LIBRARY_DIR}/common)
-# Read file content
-FILE(READ ${LIBRARY_DIR}/zstd.h HEADER_CONTENT)
-
# Parse version
-GetLibraryVersion("${HEADER_CONTENT}" LIBVER_MAJOR LIBVER_MINOR LIBVER_RELEASE)
+INCLUDE(GetZstdLibraryVersion)
+GetZstdLibraryVersion(${LIBRARY_DIR}/zstd.h LIBVER_MAJOR LIBVER_MINOR LIBVER_RELEASE)
MESSAGE("ZSTD VERSION ${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}")
SET(Sources
${LIBRARY_DIR}/common/entropy_common.c
+ ${LIBRARY_DIR}/common/fse_decompress.c
+ ${LIBRARY_DIR}/common/threading.c
+ ${LIBRARY_DIR}/common/pool.c
${LIBRARY_DIR}/common/zstd_common.c
${LIBRARY_DIR}/common/error_private.c
${LIBRARY_DIR}/common/xxhash.c
- ${LIBRARY_DIR}/common/fse_decompress.c
${LIBRARY_DIR}/compress/fse_compress.c
${LIBRARY_DIR}/compress/huf_compress.c
${LIBRARY_DIR}/compress/zstd_compress.c
+ ${LIBRARY_DIR}/compress/zstdmt_compress.c
+ ${LIBRARY_DIR}/compress/zstd_fast.c
+ ${LIBRARY_DIR}/compress/zstd_double_fast.c
+ ${LIBRARY_DIR}/compress/zstd_lazy.c
+ ${LIBRARY_DIR}/compress/zstd_opt.c
+ ${LIBRARY_DIR}/compress/zstd_ldm.c
${LIBRARY_DIR}/decompress/huf_decompress.c
${LIBRARY_DIR}/decompress/zstd_decompress.c
+ ${LIBRARY_DIR}/dictBuilder/cover.c
${LIBRARY_DIR}/dictBuilder/divsufsort.c
${LIBRARY_DIR}/dictBuilder/zdict.c
+ ${LIBRARY_DIR}/deprecated/zbuff_common.c
${LIBRARY_DIR}/deprecated/zbuff_compress.c
${LIBRARY_DIR}/deprecated/zbuff_decompress.c)
SET(Headers
${LIBRARY_DIR}/zstd.h
+ ${LIBRARY_DIR}/common/pool.h
+ ${LIBRARY_DIR}/common/threading.h
${LIBRARY_DIR}/common/bitstream.h
${LIBRARY_DIR}/common/error_private.h
${LIBRARY_DIR}/common/zstd_errors.h
${LIBRARY_DIR}/common/huf.h
${LIBRARY_DIR}/common/mem.h
${LIBRARY_DIR}/common/zstd_internal.h
+ ${LIBRARY_DIR}/compress/zstd_compress.h
+ ${LIBRARY_DIR}/compress/zstd_fast.h
+ ${LIBRARY_DIR}/compress/zstd_double_fast.h
+ ${LIBRARY_DIR}/compress/zstd_lazy.h
+ ${LIBRARY_DIR}/compress/zstd_opt.h
+ ${LIBRARY_DIR}/compress/zstd_ldm.h
+ ${LIBRARY_DIR}/compress/zstdmt_compress.h
${LIBRARY_DIR}/dictBuilder/zdict.h
${LIBRARY_DIR}/deprecated/zbuff.h)
ENDIF (ZSTD_LEGACY_SUPPORT)
IF (MSVC)
- SET(MSVC_RESOURCE_DIR ${ROOT_DIR}/build/VS2010/zstdlib)
- SET(PlatformDependResources ${MSVC_RESOURCE_DIR}/zstdlib.rc)
+ SET(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/libzstd-dll)
+ SET(PlatformDependResources ${MSVC_RESOURCE_DIR}/libzstd-dll.rc)
ENDIF (MSVC)
# Split project to static and shared libraries build
-ADD_LIBRARY(libzstd_static STATIC ${Sources} ${Headers} ${PlatformDependResources})
-ADD_LIBRARY(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources})
+IF (ZSTD_BUILD_SHARED)
+ ADD_LIBRARY(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources})
+ENDIF (ZSTD_BUILD_SHARED)
+IF (ZSTD_BUILD_STATIC)
+ ADD_LIBRARY(libzstd_static STATIC ${Sources} ${Headers})
+ENDIF (ZSTD_BUILD_STATIC)
# Add specific compile definitions for MSVC project
IF (MSVC)
- SET_TARGET_PROPERTIES(libzstd_static PROPERTIES COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS")
- SET_TARGET_PROPERTIES(libzstd_shared PROPERTIES COMPILE_DEFINITIONS "ZSTD_DLL_EXPORT=1;ZSTD_HEAPMODE=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS")
-ENDIF (MSVC)
-
-# Define library base name
-IF (MSVC)
- SET(LIBRARY_BASE_NAME zstdlib)
-ELSE ()
- SET(LIBRARY_BASE_NAME libzstd)
+ IF (ZSTD_BUILD_SHARED)
+ SET_PROPERTY(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_DLL_EXPORT=1;ZSTD_HEAPMODE=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS")
+ ENDIF (ZSTD_BUILD_SHARED)
+ IF (ZSTD_BUILD_STATIC)
+ SET_PROPERTY(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS")
+ ENDIF (ZSTD_BUILD_STATIC)
ENDIF (MSVC)
+# With MSVC static library needs to be renamed to avoid conflict with import library
IF (MSVC)
- IF (CMAKE_SIZEOF_VOID_P MATCHES "8")
- SET(LIBRARY_ARCH_SUFFIX "_x64")
- ELSE ()
- SET(LIBRARY_ARCH_SUFFIX "_x86")
- ENDIF (CMAKE_SIZEOF_VOID_P MATCHES "8")
+ SET(STATIC_LIBRARY_BASE_NAME zstd_static)
ELSE ()
- SET(LIBRARY_ARCH_SUFFIX "")
+ SET(STATIC_LIBRARY_BASE_NAME zstd)
ENDIF (MSVC)
# Define static and shared library names
-SET(STATIC_LIBRARY_OUTPUT_NAME ${LIBRARY_BASE_NAME}${LIBRARY_ARCH_SUFFIX} CACHE STRING "Static library output name")
-SET(SHARED_LIBRARY_OUTPUT_NAME ${LIBRARY_BASE_NAME}.${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}${LIBRARY_ARCH_SUFFIX} CACHE STRING "Shared library output name")
-
-SET_TARGET_PROPERTIES(
- libzstd_static
- PROPERTIES
- PREFIX ""
- OUTPUT_NAME ${STATIC_LIBRARY_OUTPUT_NAME})
-
-SET_TARGET_PROPERTIES(
- libzstd_shared
- PROPERTIES
- PREFIX ""
- OUTPUT_NAME ${SHARED_LIBRARY_OUTPUT_NAME})
+IF (ZSTD_BUILD_SHARED)
+ SET_TARGET_PROPERTIES(
+ libzstd_shared
+ PROPERTIES
+ OUTPUT_NAME zstd
+ SOVERSION ${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE})
+ENDIF (ZSTD_BUILD_SHARED)
+
+IF (ZSTD_BUILD_STATIC)
+ SET_TARGET_PROPERTIES(
+ libzstd_static
+ PROPERTIES
+ OUTPUT_NAME ${STATIC_LIBRARY_BASE_NAME})
+ENDIF (ZSTD_BUILD_STATIC)
IF (UNIX)
- IF ("${PREFIX}" STREQUAL "")
- SET(PREFIX /usr/local)
- ENDIF()
- MESSAGE("the variable PREFIX=${PREFIX}")
- SET(INSTALL_LIBRARY_DIR ${PREFIX}/lib)
- SET(INSTALL_INCLUDE_DIR ${PREFIX}/include)
-
- # install target
- INSTALL(FILES ${LIBRARY_DIR}/zstd.h ${LIBRARY_DIR}/deprecated/zbuff.h ${LIBRARY_DIR}/dictBuilder/zdict.h DESTINATION ${INSTALL_INCLUDE_DIR})
- INSTALL(TARGETS libzstd_static DESTINATION ${INSTALL_LIBRARY_DIR})
- INSTALL(TARGETS libzstd_shared LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR})
-
- # Create symlinks and setup this files
- SET(SHARED_LIBRARY_LINK ${SHARED_LIBRARY_OUTPUT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
- SET(SHARED_LIBRARY_SYMLINK1 ${LIBRARY_BASE_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
- SET(SHARED_LIBRARY_SYMLINK2 ${LIBRARY_BASE_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${LIBVER_MAJOR})
-
- SET(SHARED_LIBRARY_LINK_PATH ${CMAKE_CURRENT_BINARY_DIR}/${SHARED_LIBRARY_LINK})
- SET(SHARED_LIBRARY_SYMLINK1_PATH ${CMAKE_CURRENT_BINARY_DIR}/${SHARED_LIBRARY_SYMLINK1})
- SET(SHARED_LIBRARY_SYMLINK2_PATH ${CMAKE_CURRENT_BINARY_DIR}/${SHARED_LIBRARY_SYMLINK2})
-
- if (EXISTS ${SHARED_LIBRARY_SYMLINK1_PATH})
- FILE(REMOVE ${SHARED_LIBRARY_SYMLINK1_PATH})
- endif (EXISTS ${SHARED_LIBRARY_SYMLINK1_PATH})
-
- if (EXISTS ${SHARED_LIBRARY_SYMLINK2_PATH})
- FILE(REMOVE ${SHARED_LIBRARY_SYMLINK2_PATH})
- endif (EXISTS ${SHARED_LIBRARY_SYMLINK2_PATH})
-
- ADD_CUSTOM_COMMAND(TARGET libzstd_shared POST_BUILD
- COMMAND ln -s ${SHARED_LIBRARY_LINK} ${SHARED_LIBRARY_SYMLINK1}
- DEPENDS ${SHARED_LIBRARY_LINK_PATH}
- COMMENT "Generating symbolic link")
-
- ADD_CUSTOM_COMMAND(TARGET libzstd_shared POST_BUILD
- COMMAND ln -s ${SHARED_LIBRARY_LINK} ${SHARED_LIBRARY_SYMLINK2}
- DEPENDS ${SHARED_LIBRARY_LINK_PATH}
- COMMENT "Generating symbolic link")
-
- INSTALL(FILES ${SHARED_LIBRARY_SYMLINK1_PATH} DESTINATION ${INSTALL_LIBRARY_DIR})
- INSTALL(FILES ${SHARED_LIBRARY_SYMLINK2_PATH} DESTINATION ${INSTALL_LIBRARY_DIR})
-
- # uninstall target
- CONFIGURE_FILE(
- "${CMAKE_SOURCE_DIR}/cmake_uninstall.cmake.in"
- "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
- IMMEDIATE @ONLY)
-
- ADD_CUSTOM_TARGET(uninstall
- COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/cmake_uninstall.cmake)
+ # pkg-config
+ SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
+ SET(LIBDIR "${CMAKE_INSTALL_PREFIX}/lib")
+ SET(INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/include")
+ SET(VERSION "${LIBVER_MAJOR}.${LIBVER_MINOR}.${LIBVER_RELEASE}")
+ ADD_CUSTOM_TARGET(libzstd.pc ALL
+ ${CMAKE_COMMAND} -DIN="${LIBRARY_DIR}/libzstd.pc.in" -DOUT="libzstd.pc"
+ -DPREFIX="${PREFIX}" -DLIBDIR="${LIBDIR}" -DINCLUDEDIR="${INCLUDEDIR}" -DVERSION="${VERSION}"
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig.cmake"
+ COMMENT "Creating pkg-config file")
+
+ INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "share/pkgconfig")
ENDIF (UNIX)
+
+# install target
+INSTALL(FILES
+ ${LIBRARY_DIR}/zstd.h
+ ${LIBRARY_DIR}/deprecated/zbuff.h
+ ${LIBRARY_DIR}/dictBuilder/zdict.h
+ ${LIBRARY_DIR}/common/zstd_errors.h
+ DESTINATION "include")
+
+IF (ZSTD_BUILD_SHARED)
+ INSTALL(TARGETS libzstd_shared RUNTIME DESTINATION "bin" LIBRARY DESTINATION "lib" ARCHIVE DESTINATION "lib")
+ENDIF()
+IF (ZSTD_BUILD_STATIC)
+ INSTALL(TARGETS libzstd_static ARCHIVE DESTINATION "lib")
+ENDIF (ZSTD_BUILD_STATIC)
+
+# uninstall target
+CONFIGURE_FILE(
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+ IMMEDIATE @ONLY)
+
+ADD_CUSTOM_TARGET(uninstall
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)