-
Notifications
You must be signed in to change notification settings - Fork 196
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
further simplifications/improvements
* bump to CMake 3.10 * only support the CMake standard way to define variables via `-DFOO=On` and not via the environment * clean-up switches only used for unit tests * mingw's ID is "GNU", so we match on the full compiler name instead * use CMake variables instead of environment variables via `$ENV{<stuff>}` * unconditionally set {C,LD}FLAGS passed by user * clean-up duplicate CPack keys + add FreeBSD config Signed-off-by: Steffen Jaeckel <[email protected]>
- Loading branch information
Showing
1 changed file
with
47 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,9 +4,15 @@ | |
# integer (MPI) library written entirely in C. | ||
# | ||
|
||
cmake_minimum_required(VERSION 3.7) | ||
cmake_minimum_required(VERSION 3.10) | ||
|
||
project(tommath VERSION 1.2.0) | ||
|
||
# package release version | ||
# bump if re-releasing the same VERSION + patches | ||
# set to 1 if releasing a new version | ||
set(PACKAGE_RELEASE_VERSION 1) | ||
|
||
#----------------------------------------------------------------------------- | ||
# Include cmake modules | ||
#----------------------------------------------------------------------------- | ||
|
@@ -26,74 +32,53 @@ option(BUILD_SHARED_LIBS "Build shared library and only the shared library if \" | |
# Basic set | ||
set(LTM_C_FLAGS -Wall -Wsign-compare -Wextra -Wshadow) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wstrict-prototypes -Wpointer-arith) | ||
|
||
# Do we run the sanitizer? | ||
if(DEFINED ENV{SANITIZER}) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all -fno-sanitize=float-divide-by-zero) | ||
endif() | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wstrict-prototypes -Wpointer-arith -Wsystem-headers) | ||
|
||
if(DEFINED ENV{CONV_WARNINGS}) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -std=c89 -Wconversion -Wsign-conversion) | ||
if($ENV{CONV_WARNINGS} EQUAL "strict") | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wc++-compat) | ||
endif() | ||
else() | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wsystem-headers) | ||
endif() | ||
|
||
if(DEFINED ENV{COMPILE_DEBUG}) | ||
if(COMPILE_DEBUG) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -g3) | ||
endif() | ||
|
||
if(DEFINED ENV{COMPILE_SIZE}) | ||
if(COMPILE_SIZE) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Os) | ||
else() | ||
if(NOT DEFINED ENV{IGNORE_SPEED}) | ||
if(NOT IGNORE_SPEED) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -O3 -funroll-loops) | ||
#x86 optimizations [should be valid for any GCC install though] | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -fomit-frame-pointer) | ||
endif() | ||
# TODO: | ||
# if(DEFINED ENV{COMPILE_LTO}) | ||
# set(LTM_C_FLAGS "${LTM_C_FLAGS} -flto") | ||
# set(LTM_LD_FLAGS "${LTM_LD_FLAGS} -flto") | ||
# #AR = $(subst clang,llvm-ar,$(subst gcc,gcc-ar,$(CC))) | ||
# endif() | ||
if(COMPILE_LTO) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -flto) | ||
set(LTM_LD_FLAGS ${LTM_LD_FLAGS} -flto) | ||
endif() | ||
endif() | ||
|
||
# TODO | ||
# Are the coming three checks really the best way? | ||
|
||
# What compiler do we have and what are their...uhm... peculiarities | ||
# TODO: is the check for a C++ compiler necessary? | ||
if( (CMAKE_C_COMPILER_ID MATCHES "(C|c?)lang") OR (CMAKE_CXX_COMPILER_ID MATCHES "(C|c?)lang")) | ||
if(CMAKE_C_COMPILER_ID MATCHES "(C|c?)lang") | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-typedef-redefinition -Wno-tautological-compare -Wno-builtin-requires-header) | ||
endif() | ||
|
||
if( (CMAKE_C_COMPILER_ID MATCHES "mingw") OR (CMAKE_CXX_COMPILER_ID MATCHES "mingw")) | ||
if(CMAKE_C_COMPILER MATCHES "mingw") | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-shadow) | ||
endif() | ||
|
||
if(DEFINED ENV{PLATFORM}) | ||
if($ENV{PLATFORM} MATCHES "Darwin") | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-nullability-completeness) | ||
endif() | ||
if($ENV{PLATFORM} MATCHES "CYGWIN") | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -no-undefined) | ||
endif() | ||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin") | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-nullability-completeness) | ||
endif() | ||
if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN") | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} -no-undefined) | ||
endif() | ||
|
||
# TODO: coverage (lgcov) | ||
|
||
# If the user set the environment variables at generate-time, append them | ||
# in order to allow overriding our defaults. | ||
if(DEFINED ENV{LTM_CFLAGS}) | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} $ENV{LTM_CFLAGS}) | ||
endif() | ||
if(DEFINED ENV{LTM_LDFLAGS}) | ||
set(LTM_LD_FLAGS ${LTM_LD_FLAGS} $ENV{LTM_LDFLAGS}) | ||
endif() | ||
# ${LTM_CFLAGS} means the user passed it via sth like: | ||
# $ cmake -DLTM_CFLAGS="foo" | ||
set(LTM_C_FLAGS ${LTM_C_FLAGS} ${LTM_CFLAGS}) | ||
set(LTM_LD_FLAGS ${LTM_LD_FLAGS} ${LTM_LDFLAGS}) | ||
|
||
#----------------------------------------------------------------------------- | ||
# library target | ||
|
@@ -200,8 +185,6 @@ export(PACKAGE ${PROJECT_NAME}) | |
#--------------------------------------------------------------------------------------- | ||
# Create release packages | ||
#--------------------------------------------------------------------------------------- | ||
# package release version | ||
set(PACKAGE_RELEASE_VERSION 1) | ||
|
||
# determine distribution and architecture | ||
find_program(LSB_RELEASE lsb_release) | ||
|
@@ -231,25 +214,37 @@ message(STATUS "CPack: packages will be generated under ${CPACK_PACKAGE_DIRECTOR | |
set(CPACK_PACKAGE_NAME "lib${PROJECT_NAME}") | ||
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) | ||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LibTomMath") | ||
set(CPACK_PACKAGE_VENDOR "LibTomMath") | ||
set(CPACK_PACKAGE_DESCRIPTION "A free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C.") | ||
set(CPACK_PACKAGE_VENDOR "libtom projects") | ||
set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.libtom.net/LibTomMath") | ||
set(CPACK_PACKAGE_CONTACT "[email protected]") | ||
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") | ||
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${PACKAGE_RELEASE_VERSION}_${LINUX_DISTRO}-${LINUX_DISTRO_VERSION}_${MACHINE_ARCH}) | ||
set(PACKAGE_NAME_TRAILER ${CPACK_PACKAGE_VERSION}-${PACKAGE_RELEASE_VERSION}_${LINUX_DISTRO}-${LINUX_DISTRO_VERSION}_${MACHINE_ARCH}) | ||
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${PACKAGE_NAME_TRAILER}) | ||
set(CPACK_STRIP_FILES ON) | ||
|
||
# deb specific CPack config | ||
set(CPACK_DEBIAN_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION}) | ||
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) | ||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) | ||
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.libtom.net/LibTomMath") | ||
set(CPACK_DEBIAN_PACKAGE_SECTION "devel") | ||
if(BUILD_SHARED_LIBS) | ||
set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}1") | ||
set(CPACK_DEBIAN_PACKAGE_SECTION "libs") | ||
else() | ||
set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-dev") | ||
set(CPACK_DEBIAN_PACKAGE_SECTION "devel") | ||
endif() | ||
set(CPACK_DEBIAN_FILE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}-${PACKAGE_NAME_TRAILER}.deb") | ||
|
||
# rpm specific CPack config | ||
set(CPACK_RPM_PACKAGE_URL "https://www.libtom.net/LibTomMath") | ||
set(CPACK_RPM_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION}) | ||
set(CPACK_RPM_PACKAGE_ARCHITECTURE ${MACHINE_ARCH}) | ||
set(CPACK_RPM_PACKAGE_NAME "lib${PROJECT_NAME}-${PROJECT_VERSION}") | ||
set(CPACK_RPM_FILE_NAME "lib${PROJECT_NAME}_${PROJECT_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}_${LINUX_DISTRO}-${LINUX_DISTRO_VERSION}_${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm") | ||
set(CPACK_RPM_PACKAGE_LICENSE "WTFPL") | ||
set(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}") | ||
set(CPACK_RPM_FILE_NAME "${CPACK_PACKAGE_NAME}_${PACKAGE_NAME_TRAILER}.rpm") | ||
set(CPACK_RPM_PACKAGE_LICENSE "The Unlicense") | ||
|
||
# FreeBSD specific CPack config | ||
set(CPACK_FREEBSD_PACKAGE_MAINTAINER "[email protected]") | ||
set(CPACK_FREEBSD_PACKAGE_ORIGIN "math/libtommath") | ||
set(CPACK_FREEBSD_PACKAGE_CATEGORIES "math") | ||
|
||
include(CPack) |