| # ################################################################ |
| # Copyright (c) 2015-present, Yann Collet, Facebook, Inc. |
| # All rights reserved. |
| # |
| # 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). |
| # ################################################################ |
| |
| project(libzstd) |
| |
| set(CMAKE_INCLUDE_CURRENT_DIR TRUE) |
| option(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" ON) |
| option(ZSTD_BUILD_SHARED "BUILD SHARED LIBRARIES" ON) |
| |
| if(NOT ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC) |
| message(SEND_ERROR "You need to build at least one flavor of libzstd") |
| endif() |
| |
| # Define library directory, where sources and header files are located |
| include_directories(${LIBRARY_DIR} ${LIBRARY_DIR}/common) |
| |
| file(GLOB CommonSources ${LIBRARY_DIR}/common/*.c) |
| file(GLOB CompressSources ${LIBRARY_DIR}/compress/*.c) |
| file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c) |
| file(GLOB DictBuilderSources ${LIBRARY_DIR}/dictBuilder/*.c) |
| file(GLOB DeprecatedSources ${LIBRARY_DIR}/deprecated/*.c) |
| |
| set(Sources |
| ${CommonSources} |
| ${CompressSources} |
| ${DecompressSources} |
| ${DictBuilderSources} |
| ${DeprecatedSources}) |
| |
| file(GLOB CommonHeaders ${LIBRARY_DIR}/common/*.h) |
| file(GLOB CompressHeaders ${LIBRARY_DIR}/compress/*.h) |
| file(GLOB DecompressHeaders ${LIBRARY_DIR}/decompress/*.h) |
| file(GLOB DictBuilderHeaders ${LIBRARY_DIR}/dictBuilder/*.h) |
| file(GLOB DeprecatedHeaders ${LIBRARY_DIR}/deprecated/*.h) |
| |
| set(Headers |
| ${LIBRARY_DIR}/zstd.h |
| ${CommonHeaders} |
| ${CompressHeaders} |
| ${DecompressHeaders} |
| ${DictBuilderHeaders} |
| ${DeprecatedHeaders}) |
| |
| if (ZSTD_LEGACY_SUPPORT) |
| set(LIBRARY_LEGACY_DIR ${LIBRARY_DIR}/legacy) |
| include_directories(${LIBRARY_LEGACY_DIR}) |
| |
| set(Sources ${Sources} |
| ${LIBRARY_LEGACY_DIR}/zstd_v01.c |
| ${LIBRARY_LEGACY_DIR}/zstd_v02.c |
| ${LIBRARY_LEGACY_DIR}/zstd_v03.c |
| ${LIBRARY_LEGACY_DIR}/zstd_v04.c |
| ${LIBRARY_LEGACY_DIR}/zstd_v05.c |
| ${LIBRARY_LEGACY_DIR}/zstd_v06.c |
| ${LIBRARY_LEGACY_DIR}/zstd_v07.c) |
| |
| set(Headers ${Headers} |
| ${LIBRARY_LEGACY_DIR}/zstd_legacy.h |
| ${LIBRARY_LEGACY_DIR}/zstd_v01.h |
| ${LIBRARY_LEGACY_DIR}/zstd_v02.h |
| ${LIBRARY_LEGACY_DIR}/zstd_v03.h |
| ${LIBRARY_LEGACY_DIR}/zstd_v04.h |
| ${LIBRARY_LEGACY_DIR}/zstd_v05.h |
| ${LIBRARY_LEGACY_DIR}/zstd_v06.h |
| ${LIBRARY_LEGACY_DIR}/zstd_v07.h) |
| endif () |
| |
| if (MSVC) |
| set(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/libzstd-dll) |
| set(PlatformDependResources ${MSVC_RESOURCE_DIR}/libzstd-dll.rc) |
| endif () |
| |
| # Split project to static and shared libraries build |
| set(library_targets) |
| if (ZSTD_BUILD_SHARED) |
| add_library(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources}) |
| list(APPEND library_targets libzstd_shared) |
| if (ZSTD_MULTITHREAD_SUPPORT) |
| set_property(TARGET libzstd_shared APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD") |
| if (UNIX) |
| target_link_libraries(libzstd_shared ${THREADS_LIBS}) |
| endif () |
| endif() |
| endif () |
| if (ZSTD_BUILD_STATIC) |
| add_library(libzstd_static STATIC ${Sources} ${Headers}) |
| list(APPEND library_targets libzstd_static) |
| if (ZSTD_MULTITHREAD_SUPPORT) |
| set_property(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD") |
| if (UNIX) |
| target_link_libraries(libzstd_static ${THREADS_LIBS}) |
| endif () |
| endif () |
| endif () |
| |
| # Add specific compile definitions for MSVC project |
| if (MSVC) |
| 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 () |
| if (ZSTD_BUILD_STATIC) |
| set_property(TARGET libzstd_static APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_HEAPMODE=0;_CRT_SECURE_NO_WARNINGS") |
| endif () |
| endif () |
| |
| # With MSVC static library needs to be renamed to avoid conflict with import library |
| if (MSVC) |
| set(STATIC_LIBRARY_BASE_NAME zstd_static) |
| else () |
| set(STATIC_LIBRARY_BASE_NAME zstd) |
| endif () |
| |
| # Define static and shared library names |
| if (ZSTD_BUILD_SHARED) |
| set_target_properties( |
| libzstd_shared |
| PROPERTIES |
| OUTPUT_NAME zstd |
| VERSION ${zstd_VERSION_MAJOR}.${zstd_VERSION_MINOR}.${zstd_VERSION_PATCH} |
| SOVERSION ${zstd_VERSION_MAJOR}) |
| endif () |
| |
| if (ZSTD_BUILD_STATIC) |
| set_target_properties( |
| libzstd_static |
| PROPERTIES |
| POSITION_INDEPENDENT_CODE On |
| OUTPUT_NAME ${STATIC_LIBRARY_BASE_NAME}) |
| endif () |
| |
| if (UNIX OR MINGW) |
| # pkg-config |
| set(PREFIX "${CMAKE_INSTALL_PREFIX}") |
| set(EXEC_PREFIX "\\$$\{prefix}") |
| set(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}") |
| set(INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}") |
| set(VERSION "${zstd_VERSION}") |
| |
| string(LENGTH "${PREFIX}" PREFIX_LENGTH) |
| string(SUBSTRING "${LIBDIR}" 0 ${PREFIX_LENGTH} LIBDIR_PREFIX) |
| string(SUBSTRING "${LIBDIR}" ${PREFIX_LENGTH} -1 LIBDIR_SUFFIX) |
| string(SUBSTRING "${INCLUDEDIR}" 0 ${PREFIX_LENGTH} INCLUDEDIR_PREFIX) |
| string(SUBSTRING "${INCLUDEDIR}" ${PREFIX_LENGTH} -1 INCLUDEDIR_SUFFIX) |
| |
| if ("${INCLUDEDIR_PREFIX}" STREQUAL "${PREFIX}") |
| set(INCLUDEDIR_PREFIX "\\$$\{prefix}") |
| endif() |
| if ("${LIBDIR_PREFIX}" STREQUAL "${PREFIX}") |
| set(LIBDIR_PREFIX "\\$$\{exec_prefix}") |
| endif() |
| |
| add_custom_target(libzstd.pc ALL |
| ${CMAKE_COMMAND} |
| -DIN=${LIBRARY_DIR}/libzstd.pc.in |
| -DOUT="libzstd.pc" |
| -DPREFIX="${PREFIX}" |
| -DEXEC_PREFIX="${EXEC_PREFIX}" |
| -DINCLUDEDIR="${INCLUDEDIR_PREFIX}${INCLUDEDIR_SUFFIX}" |
| -DLIBDIR="${LIBDIR_PREFIX}${LIBDIR_SUFFIX}" |
| -DVERSION="${VERSION}" |
| -P ${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig.cmake |
| COMMENT "Creating pkg-config file") |
| |
| install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") |
| endif () |
| |
| # install target |
| install(FILES |
| "${LIBRARY_DIR}/zstd.h" |
| "${LIBRARY_DIR}/dictBuilder/zdict.h" |
| "${LIBRARY_DIR}/common/zstd_errors.h" |
| DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") |
| |
| install(TARGETS ${library_targets} |
| EXPORT zstdExports |
| INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" |
| ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
| LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
| RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" |
| ) |
| |
| # uninstall target |
| if (NOT TARGET uninstall) |
| 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) |
| endif () |