diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 03:32:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 03:32:49 +0000 |
commit | 8053187731ae8e3eb368d8360989cf5fd6eed9f7 (patch) | |
tree | 32bada84ff5d7460cdf3934fcbdbe770d6afe4cd /CMakeLists.txt | |
parent | Initial commit. (diff) | |
download | rnp-8053187731ae8e3eb368d8360989cf5fd6eed9f7.tar.xz rnp-8053187731ae8e3eb368d8360989cf5fd6eed9f7.zip |
Adding upstream version 0.17.0.upstream/0.17.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | CMakeLists.txt | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..bb6d40c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,206 @@ +# Copyright (c) 2018-2020 Ribose Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# 3.7+ for the BZip2 target in the cmake-bundled finder (basic build) +# 3.8+ for CPACK_RPM_MAIN_COMPONENT (RPM packaging) +# 3.10+ for CPackFreeBSD (FreeBSD packaging) +# 3.10+ for gtest_discover_tests (parallel rnp_tests) +# 3.12+ for NAMELINK_COMPONENT (for better RPM packaging) +# 3.12+ for Python3 find module +# 3.14+ for object library link dependency propagation +# 3.18+ for OpenSSL::applink +cmake_minimum_required(VERSION 3.18) + +# contact email, other info +include(cmake/info.cmake) + +# determine version +if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.cmake") + file(DOWNLOAD https://raw.githubusercontent.com/rnpgp/cmake-versioning/main/version.cmake + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.cmake") +endif() +include(cmake/version.cmake) +determine_version("${CMAKE_CURRENT_SOURCE_DIR}" RNP) + +# project name, etc +project(RNP + VERSION "${RNP_VERSION}" + LANGUAGES C CXX + DESCRIPTION "${PACKAGE_DESCRIPTION_SHORT}" +) + +# tri-state options +set(TRISTATE_VALUES On Off Auto) + +# options +option(ENABLE_COVERAGE "Enable code coverage testing.") +option(ENABLE_SANITIZERS "Enable ASan and other sanitizers.") +option(ENABLE_FUZZERS "Enable fuzz targets.") +option(DOWNLOAD_GTEST "Download Googletest" On) +# crypto components +function(tristate_feature_auto NAME DESCRIPTION) + set(${NAME} Auto CACHE STRING ${DESCRIPTION}) + set_property(CACHE ${NAME} PROPERTY STRINGS ${TRISTATE_VALUES}) +endfunction() +set(ENABLE_SM2 Auto CACHE STRING "Enable SM2/SM3/SM4 algorithms support.") +set_property(CACHE ENABLE_SM2 PROPERTY STRINGS ${TRISTATE_VALUES}) +set(ENABLE_AEAD Auto CACHE STRING "Enable AEAD ciphers support.") +set_property(CACHE ENABLE_AEAD PROPERTY STRINGS ${TRISTATE_VALUES}) +set(ENABLE_TWOFISH Auto CACHE STRING "Enable Twofish cipher support.") +set_property(CACHE ENABLE_TWOFISH PROPERTY STRINGS ${TRISTATE_VALUES}) +set(ENABLE_BRAINPOOL Auto CACHE STRING "Enable Brainpool curves support.") +set_property(CACHE ENABLE_BRAINPOOL PROPERTY STRINGS ${TRISTATE_VALUES}) +set(ENABLE_IDEA Auto CACHE STRING "Enable IDEA algorithm support.") +set_property(CACHE ENABLE_IDEA PROPERTY STRINGS ${TRISTATE_VALUES}) +tristate_feature_auto(ENABLE_BLOWFISH "Enable Blowfish cipher support.") +tristate_feature_auto(ENABLE_CAST5 "Enable CAST5 cipher support.") +tristate_feature_auto(ENABLE_RIPEMD160 "Enable RIPEMD-160 hash support.") + +set(ENABLE_DOC Auto CACHE STRING "Enable building documentation.") +set_property(CACHE ENABLE_DOC PROPERTY STRINGS ${TRISTATE_VALUES}) + +# so we can use our bundled finders +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules") + +# required modules +include(CTest) +include(FetchContent) + +# default to a release build +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING + "Build type. Options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE + ) +endif() + +# crypto backend +if (NOT CRYPTO_BACKEND) + set(CRYPTO_BACKEND "botan" CACHE STRING + "Crypto backend. Possible values are botan and openssl (under development, only for debug builds). Default is botan." + FORCE + ) +endif() +string(TOLOWER ${CRYPTO_BACKEND} CRYPTO_BACKEND_LOWERCASE) +if(CRYPTO_BACKEND_LOWERCASE STREQUAL "botan") + # Default value; + set(CRYPTO_BACKEND_BOTAN 1) +elseif(CRYPTO_BACKEND_LOWERCASE STREQUAL "openssl") + set(CRYPTO_BACKEND_OPENSSL 1) +else() + message(FATAL_ERROR "Invalid crypto backend: ${CRYPTO_BACKEND}") +endif() + +# set warning flags at the top level +if(NOT MSVC) + add_compile_options( + -Wall -Wextra + -Wunreachable-code -Wpointer-arith + -Wmissing-declarations + ) +# relax some warnings a bit + add_compile_options( + -Wno-pedantic + -Wno-ignored-qualifiers + -Wno-unused-parameter + -Wno-missing-field-initializers + ) +endif(NOT MSVC) + +# THis works both for MSVC and CL on Windows +if(WIN32) + add_compile_definitions(_CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE) +endif(WIN32) + +# set a few other things at the top level to prevent incompatibilities +set(CMAKE_C_STANDARD 99) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +add_definitions(-D_GNU_SOURCE) + +if (ENABLE_COVERAGE OR ENABLE_SANITIZERS) + message("Forcing build type to Debug (for code coverage or sanitizers).") + set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type. Forced to Debug." FORCE) +endif() + +# coverage +if (ENABLE_COVERAGE) + if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + message(FATAL_ERROR "Coverage has only been tested with the GNU compiler.") + endif() + add_compile_options(--coverage -O0) + link_libraries(--coverage) +endif() + +# sanitizers +if (ENABLE_SANITIZERS) + if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + message(FATAL_ERROR "Sanitizers have only been tested with the clang compiler.") + endif() + add_compile_options(-fsanitize=leak,address,undefined -fno-omit-frame-pointer -fno-common -O1) + link_libraries(-fsanitize=leak,address,undefined) +endif() + +# adoc for man generation +if (ENABLE_DOC) + include(AdocMan) +endif() + +# everything else is in subdirs +add_subdirectory(src/examples) +if (ENABLE_FUZZERS) + add_subdirectory(src/fuzzing) + add_compile_options(-DFUZZERS_ENABLED=1) +endif() +add_subdirectory(src/common) + +set(WITH_SEXP_CLI OFF) +set(WITH_SEXP_TESTS OFF) +set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME development) +add_subdirectory(src/libsexp EXCLUDE_FROM_ALL) + +add_subdirectory(src/lib) +add_subdirectory(src/rnp) +add_subdirectory(src/rnpkeys) + +# build tests, if desired +if (BUILD_TESTING) + # Googletest source path + if (NOT GTEST_SOURCES) + set(GTEST_SOURCES "" CACHE STRING + "Path to the Googletest sources in case of download or linking to the precompiled library is disabled." + FORCE + ) + else() + # Canonicalize path to the Googletest sources. + get_filename_component(GTEST_SOURCES_FULL ${GTEST_SOURCES} REALPATH) + set(GTEST_SOURCES ${GTEST_SOURCES_FULL}) + endif() + add_subdirectory(src/tests) +endif() + + +# cpack packaging (RPM etc) +include(cmake/packaging.cmake) |