aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Terrell <terrelln@fb.com>2024-03-14 08:47:04 -0700
committerNick Terrell <nickrterrell@gmail.com>2024-03-14 15:04:46 -0400
commita0a9bc6c95436c85002ffca972ae545f862e1638 (patch)
tree0bb4e65353150ab174fcaffc88bfe8257d8e0e07
parent515c07a1315789e7330fb0b08191b9b42541e682 (diff)
downloadzstd-a0a9bc6c95436c85002ffca972ae545f862e1638.tar.gz
[cmake] Always create libzstd target
If both `ZSTD_BUILD_SHARED` and `ZSTD_BUILD_STATIC` are set, then cmake exports the libraries `libzstd_shared` and `libzstd_static` only. It does not export `libzstd`, which is only exported when exactly one of `ZSTD_BUILD_SHARED` and `ZSTD_BUILD_STATIC` is set. This PR exports `libzstd` in that case, based on the value of the standard CMake variable [`BUILD_SHARED_LIBS`](https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html). This ensures that `libzstd` can always be used to refer to the exported zstd library, since the build errors if neither `ZSTD_BUILD_SHARED` nor `ZSTD_BUILD_STATIC` are set. I tested all the possible combinations of `ZSTD_BUILD_SHARED`, `ZSTD_BUILD_STATIC`, and `BUILD_SHARED_LIBS` and they always worked as expected: * If only exactly one of `ZSTD_BUILD_SHARED` and `ZSTD_BUILD_STATIC` is set, that is used as `libzstd`. * Otherwise, libzstd is set based on `BUILD_SHARED_LIBS`. Fixes #3859.
-rw-r--r--build/cmake/lib/CMakeLists.txt14
1 files changed, 14 insertions, 0 deletions
diff --git a/build/cmake/lib/CMakeLists.txt b/build/cmake/lib/CMakeLists.txt
index f5820af5..53df541f 100644
--- a/build/cmake/lib/CMakeLists.txt
+++ b/build/cmake/lib/CMakeLists.txt
@@ -159,6 +159,20 @@ if (ZSTD_BUILD_STATIC AND NOT ZSTD_BUILD_SHARED)
target_link_libraries(libzstd INTERFACE libzstd_static)
list(APPEND library_targets libzstd)
endif ()
+if (ZSTD_BUILD_SHARED AND ZSTD_BUILD_STATIC)
+ # If both ZSTD_BUILD_SHARED and ZSTD_BUILD_STATIC are set, which is the
+ # default, fallback to using BUILD_SHARED_LIBS to determine whether to
+ # set libzstd to static or shared.
+ if (BUILD_SHARED_LIBS)
+ add_library(libzstd INTERFACE)
+ target_link_libraries(libzstd INTERFACE libzstd_shared)
+ list(APPEND library_targets libzstd)
+ else ()
+ add_library(libzstd INTERFACE)
+ target_link_libraries(libzstd INTERFACE libzstd_static)
+ list(APPEND library_targets libzstd)
+ endif ()
+endif ()
# Add specific compile definitions for MSVC project
if (MSVC)