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