123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- # ################################################################
- # 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 C ASM)
- 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)
- if (MSVC)
- file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c)
- add_compile_options(-DZSTD_DISABLE_ASM)
- else ()
- file(GLOB DecompressSources ${LIBRARY_DIR}/decompress/*.c ${LIBRARY_DIR}/decompress/*.S)
- endif ()
- file(GLOB DictBuilderSources ${LIBRARY_DIR}/dictBuilder/*.c)
- set(Sources
- ${CommonSources}
- ${CompressSources}
- ${DecompressSources}
- ${DictBuilderSources})
- 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)
- set(Headers
- ${LIBRARY_DIR}/zstd.h
- ${CommonHeaders}
- ${CompressHeaders}
- ${DecompressHeaders}
- ${DictBuilderHeaders})
- 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 OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT MINGW))
- 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}${INCLUDEDIR_SUFFIX}")
- endif()
- if ("${LIBDIR_PREFIX}" STREQUAL "${PREFIX}")
- set(LIBDIR "\${exec_prefix}${LIBDIR_SUFFIX}")
- endif()
- configure_file("${LIBRARY_DIR}/libzstd.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" @ONLY)
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
- endif ()
- # install target
- install(FILES
- "${LIBRARY_DIR}/zstd.h"
- "${LIBRARY_DIR}/zdict.h"
- "${LIBRARY_DIR}/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}"
- BUNDLE 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 ()
|