Skip to content

Commit

Permalink
further simplifications/improvements
Browse files Browse the repository at this point in the history
* 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
sjaeckel committed Feb 28, 2022
1 parent bafc708 commit 302d541
Showing 1 changed file with 47 additions and 52 deletions.
99 changes: 47 additions & 52 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
#-----------------------------------------------------------------------------
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)

0 comments on commit 302d541

Please sign in to comment.