648db22b |
1 | # ################################################################ |
2 | # Copyright (c) Meta Platforms, Inc. and affiliates. |
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 | |
10 | project(programs C) |
11 | |
12 | set(CMAKE_INCLUDE_CURRENT_DIR TRUE) |
13 | |
14 | # Define programs directory, where sources and header files are located |
15 | set(LIBRARY_DIR ${ZSTD_SOURCE_DIR}/lib) |
16 | set(PROGRAMS_DIR ${ZSTD_SOURCE_DIR}/programs) |
17 | include_directories(${PROGRAMS_DIR} ${LIBRARY_DIR} ${LIBRARY_DIR}/common ${LIBRARY_DIR}/compress ${LIBRARY_DIR}/dictBuilder) |
18 | |
19 | if (ZSTD_LEGACY_SUPPORT) |
20 | set(PROGRAMS_LEGACY_DIR ${PROGRAMS_DIR}/legacy) |
21 | include_directories(${PROGRAMS_LEGACY_DIR} ${LIBRARY_DIR}/legacy) |
22 | endif () |
23 | |
24 | if (ZSTD_PROGRAMS_LINK_SHARED) |
25 | set(PROGRAMS_ZSTD_LINK_TARGET libzstd_shared) |
26 | else () |
27 | set(PROGRAMS_ZSTD_LINK_TARGET libzstd_static) |
28 | endif () |
29 | |
30 | if (MSVC) |
31 | set(MSVC_RESOURCE_DIR ${ZSTD_SOURCE_DIR}/build/VS2010/zstd) |
32 | set(PlatformDependResources ${MSVC_RESOURCE_DIR}/zstd.rc) |
33 | endif () |
34 | |
f535537f |
35 | file(GLOB ZSTD_PROGRAM_SRCS "${PROGRAMS_DIR}/*.c") |
36 | if (MSVC AND ZSTD_PROGRAMS_LINK_SHARED) |
37 | list(APPEND ZSTD_PROGRAM_SRCS ${LIBRARY_DIR}/common/pool.c ${LIBRARY_DIR}/common/threading.c) |
38 | endif () |
39 | |
40 | add_executable(zstd ${ZSTD_PROGRAM_SRCS}) |
648db22b |
41 | target_link_libraries(zstd ${PROGRAMS_ZSTD_LINK_TARGET}) |
42 | if (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)") |
43 | target_link_libraries(zstd rt) |
44 | endif () |
45 | install(TARGETS zstd |
46 | RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" |
47 | BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}") |
48 | |
49 | if (UNIX) |
50 | add_custom_target(zstdcat ALL ${CMAKE_COMMAND} -E create_symlink zstd zstdcat DEPENDS zstd COMMENT "Creating zstdcat symlink") |
51 | add_custom_target(unzstd ALL ${CMAKE_COMMAND} -E create_symlink zstd unzstd DEPENDS zstd COMMENT "Creating unzstd symlink") |
52 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdcat DESTINATION "${CMAKE_INSTALL_BINDIR}") |
53 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unzstd DESTINATION "${CMAKE_INSTALL_BINDIR}") |
54 | install(PROGRAMS ${PROGRAMS_DIR}/zstdgrep DESTINATION "${CMAKE_INSTALL_BINDIR}") |
55 | install(PROGRAMS ${PROGRAMS_DIR}/zstdless DESTINATION "${CMAKE_INSTALL_BINDIR}") |
56 | |
57 | add_custom_target(zstd.1 ALL |
58 | ${CMAKE_COMMAND} -E copy ${PROGRAMS_DIR}/zstd.1 . |
59 | COMMENT "Copying manpage zstd.1") |
60 | add_custom_target(zstdgrep.1 ALL |
61 | ${CMAKE_COMMAND} -E copy ${PROGRAMS_DIR}/zstdgrep.1 . |
62 | COMMENT "Copying manpage zstdgrep.1") |
63 | add_custom_target(zstdless.1 ALL |
64 | ${CMAKE_COMMAND} -E copy ${PROGRAMS_DIR}/zstdless.1 . |
65 | COMMENT "Copying manpage zstdless.1") |
66 | add_custom_target(zstdcat.1 ALL ${CMAKE_COMMAND} -E create_symlink zstd.1 zstdcat.1 DEPENDS zstd.1 COMMENT "Creating zstdcat.1 symlink") |
67 | add_custom_target(unzstd.1 ALL ${CMAKE_COMMAND} -E create_symlink zstd.1 unzstd.1 DEPENDS zstd.1 COMMENT "Creating unzstd.1 symlink") |
68 | |
69 | # Define MAN_INSTALL_DIR if necessary |
70 | if (MAN_INSTALL_DIR) |
71 | else () |
72 | set(MAN_INSTALL_DIR ${CMAKE_INSTALL_MANDIR}/man1) |
73 | endif () |
74 | |
75 | install(FILES |
76 | ${CMAKE_CURRENT_BINARY_DIR}/zstd.1 |
77 | ${CMAKE_CURRENT_BINARY_DIR}/zstdcat.1 |
78 | ${CMAKE_CURRENT_BINARY_DIR}/unzstd.1 |
79 | ${CMAKE_CURRENT_BINARY_DIR}/zstdgrep.1 |
80 | ${CMAKE_CURRENT_BINARY_DIR}/zstdless.1 |
81 | DESTINATION "${MAN_INSTALL_DIR}") |
82 | |
f535537f |
83 | add_executable(zstd-frugal ${PROGRAMS_DIR}/zstdcli.c |
84 | ${PROGRAMS_DIR}/util.c ${PROGRAMS_DIR}/timefn.c |
85 | ${PROGRAMS_DIR}/fileio.c ${PROGRAMS_DIR}/fileio_asyncio.c) |
648db22b |
86 | target_link_libraries(zstd-frugal ${PROGRAMS_ZSTD_LINK_TARGET}) |
87 | set_property(TARGET zstd-frugal APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_NOBENCH;ZSTD_NODICT;ZSTD_NOTRACE") |
88 | endif () |
89 | |
90 | # Add multi-threading support definitions |
91 | |
92 | if (ZSTD_MULTITHREAD_SUPPORT) |
93 | set_property(TARGET zstd APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_MULTITHREAD") |
94 | |
95 | if (UNIX) |
96 | target_link_libraries(zstd ${THREADS_LIBS}) |
97 | |
98 | add_custom_target(zstdmt ALL ${CMAKE_COMMAND} -E create_symlink zstd zstdmt DEPENDS zstd COMMENT "Creating zstdmt symlink") |
99 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zstdmt DESTINATION "${CMAKE_INSTALL_BINDIR}") |
100 | endif () |
101 | endif () |
102 | |
103 | option(ZSTD_ZLIB_SUPPORT "ZLIB SUPPORT" OFF) |
104 | option(ZSTD_LZMA_SUPPORT "LZMA SUPPORT" OFF) |
105 | option(ZSTD_LZ4_SUPPORT "LZ4 SUPPORT" OFF) |
106 | |
107 | # Add gzip support |
108 | if (ZSTD_ZLIB_SUPPORT) |
109 | find_package(ZLIB REQUIRED) |
110 | |
111 | if (ZLIB_FOUND) |
112 | include_directories(${ZLIB_INCLUDE_DIRS}) |
113 | target_link_libraries(zstd ${ZLIB_LIBRARIES}) |
114 | set_property(TARGET zstd APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_GZCOMPRESS;ZSTD_GZDECOMPRESS") |
115 | else () |
116 | message(SEND_ERROR "zlib library is missing") |
117 | endif () |
118 | endif () |
119 | |
120 | # Add lzma support |
121 | if (ZSTD_LZMA_SUPPORT) |
122 | find_package(LibLZMA REQUIRED) |
123 | |
124 | if (LIBLZMA_FOUND) |
125 | include_directories(${LIBLZMA_INCLUDE_DIRS}) |
126 | target_link_libraries(zstd ${LIBLZMA_LIBRARIES}) |
127 | set_property(TARGET zstd APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_LZMACOMPRESS;ZSTD_LZMADECOMPRESS") |
128 | else () |
129 | message(SEND_ERROR "lzma library is missing") |
130 | endif () |
131 | endif () |
132 | |
133 | # Add lz4 support |
134 | if (ZSTD_LZ4_SUPPORT) |
135 | find_package(LibLZ4 REQUIRED) |
136 | |
137 | if (LIBLZ4_FOUND) |
138 | include_directories(${LIBLZ4_INCLUDE_DIRS}) |
139 | target_link_libraries(zstd ${LIBLZ4_LIBRARIES}) |
140 | set_property(TARGET zstd APPEND PROPERTY COMPILE_DEFINITIONS "ZSTD_LZ4COMPRESS;ZSTD_LZ4DECOMPRESS") |
141 | else () |
142 | message(SEND_ERROR "lz4 library is missing") |
143 | endif () |
144 | endif () |