]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
CMake: Update the main comment and document CMAKE_BUILD_TYPE=Release.
authorLasse Collin <lasse.collin@tukaani.org>
Sat, 17 Feb 2024 19:45:07 +0000 (21:45 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Mon, 19 Feb 2024 14:28:49 +0000 (16:28 +0200)
CMakeLists.txt

index 9716f3506f19ec189a57f6eca4179673df4c5de9..a0e085a24b55d668cc1ad8c3ab38d4dc38915e20 100644 (file)
@@ -2,31 +2,78 @@
 
 #############################################################################
 #
-# Very limited CMake support for building some parts of XZ Utils
+# CMake support for building XZ Utils
 #
-# For now, this is intended to be useful to build static or shared liblzma
-# on Windows with MSVC (to avoid the need to maintain Visual Studio project
-# files). Building liblzma on a few other platforms should work too but it
-# is somewhat experimental and not as portable as using ./configure.
+# The complete CMake-based build hasn't been tested much yet and
+# thus it's still slightly experimental. Testing this especially
+# outside GNU/Linux and Windows would be great now.
 #
-# On some platforms this builds also xz and xzdec, but these are
-# highly experimental and meant for testing only.
+# A few things are still missing compared to the Autotools-based build:
 #
-# Other missing things:
-#   - No xz tests (liblzma tests only)
+#   - A few tests aren't CMake compatible yet and thus aren't run!
 #
-# NOTE: Even if the code compiles without warnings, the end result may be
-# different than via ./configure. Specifically, the list of #defines
-# may be different (if so, probably this CMakeLists.txt got them wrong).
+#   - 32-bit x86 assembly code for CRC32 and CRC64 isn't used.
+#
+#   - External SHA-256 code isn't supported but it's disabled by
+#     default in the Autotools build too (--enable-external-sha256).
+#
+#   - Extra compiler warning flags aren't added by default.
+#
+# About CMAKE_BUILD_TYPE:
+#
+#   - CMake's standard choices are fine to use for production builds,
+#     including "Release" and "RelWithDebInfo".
+#
+#     NOTE: While "Release" uses -O3 by default with some compilers,
+#     this file overrides -O3 to -O2 for "Release" builds if
+#     CMAKE_C_FLAGS_RELEASE is not defined by the user. At least
+#     with GCC and Clang/LLVM, -O3 doesn't seem useful for this
+#     package as it can result in bigger binaries without any
+#     improvement in speed compared to -O2.
+#
+#   - Empty value (the default) is handled slightly specially: It
+#     adds -DNDEBUG to disable debugging code (assert() and a few
+#     other things). No optimization flags are added so an empty
+#     CMAKE_BUILD_TYPE is an easy way to build with whatever
+#     optimization flags one wants, and so this method is also
+#     suitable for production builds.
+#
+#     If debugging is wanted when using empty CMAKE_BUILD_TYPE,
+#     include -UNDEBUG in the CFLAGS environment variable or
+#     in the CMAKE_C_FLAGS CMake variable to override -DNDEBUG.
+#     With empty CMAKE_BUILD_TYPE, the -UNDEBUG option will go
+#     after the -DNDEBUG option on the compiler command line and
+#     thus NDEBUG will be undefined.
+#
+#   - Non-standard build types like "None" aren't treated specially
+#     and thus won't have -DNEBUG. Such non-standard build types
+#     SHOULD BE AVOIDED FOR PRODUCTION BUILDS. Or at least one
+#     should remember to add -DNDEBUG.
+#
+# If building from xz.git instead of a release tarball, consider
+# the following *before* running cmake:
+#
+#   - To get translated messages, install GNU gettext tools (the
+#     command msgfmt is needed). Alternatively disable translations
+#     by setting ENABLE_NLS=OFF.
+#
+#   - To get translated man pages, run po4a/update-po which requires
+#     the po4a tool. The build works without this step too.
+#
+#   - To get Doxygen-generated liblzma API docs in HTML format,
+#     run doxygen/update-doxygen which requires the doxygen tool.
+#     The build works without this step too.
 #
 # This file provides the following installation components (if you only
 # need liblzma, install only its components!):
-#   - liblzma_Runtime
+#   - liblzma_Runtime (shared library only)
 #   - liblzma_Development
 #   - liblzma_Documentation (examples and Doxygen-generated API docs as HTML)
-#   - xz (on some platforms only)
-#   - xzdec (on some platforms only)
-#   - lzmadec (on some platforms only)
+#   - xz
+#   - xzdec
+#   - lzmadec
+#   - lzmainfo
+#   - scripts (xzdiff, xzgrep, xzless, xzmore)
 #   - xz_Documentation (generic docs like README and licenses)
 #
 # To find the target liblzma::liblzma from other packages, use the CONFIG