CMake: Update the main comment and document CMAKE_BUILD_TYPE=Release.

This commit is contained in:
Lasse Collin 2024-02-17 21:45:07 +02:00
parent 4430e075f7
commit 426bdc709c
1 changed files with 63 additions and 16 deletions

View 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