Add cmake configuration files
parent
e08f4992d1
commit
66aed70e6b
|
@ -92,7 +92,7 @@ DocProject/Help/Html2
|
||||||
DocProject/Help/html
|
DocProject/Help/html
|
||||||
|
|
||||||
# Cmake, make and compiled objects on unix
|
# Cmake, make and compiled objects on unix
|
||||||
*.cmake
|
#*.cmake
|
||||||
*.c.o
|
*.c.o
|
||||||
*/CMakeFiles/*
|
*/CMakeFiles/*
|
||||||
*/Makefile
|
*/Makefile
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
|
||||||
|
# ##### # # # #
|
||||||
|
# #### ##### ###### # # # # # # # #
|
||||||
|
# # # # # # ## # # # # # #
|
||||||
|
# # # # # ##### # # # # #### # ### #
|
||||||
|
# # # ##### # # # # # # # # # # #
|
||||||
|
# # # # # # ## # # # # # # #
|
||||||
|
# #### # ###### # # ##### ##### # # #
|
||||||
|
# #
|
||||||
|
# This file is part of openGJK. #
|
||||||
|
# #
|
||||||
|
# openGJK is free software: you can redistribute it and/or modify #
|
||||||
|
# it under the terms of the GNU General Public License as published by #
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or #
|
||||||
|
# any later version. #
|
||||||
|
# #
|
||||||
|
# openGJK is distributed in the hope that it will be useful, #
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See The #
|
||||||
|
# GNU General Public License for more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License #
|
||||||
|
# along with Foobar. If not, see <https://www.gnu.org/licenses/>. #
|
||||||
|
# #
|
||||||
|
# openGJK: open-source Gilbert-Johnson-Keerthi algorithm #
|
||||||
|
# Copyright (C) Mattia Montanari 2018 - 2019 #
|
||||||
|
# http://iel.eng.ox.ac.uk/?page_id=504 #
|
||||||
|
# #
|
||||||
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
|
||||||
|
|
||||||
|
# Include srcdir and builddir in include path to save typing ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY} in every subdir
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
|
||||||
|
# Put the include dirs which are in the source or build tree
|
||||||
|
# before all other include dirs, so the headers in the sources
|
||||||
|
# are prefered over the already installed ones
|
||||||
|
# since cmake 2.4.1
|
||||||
|
set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
|
||||||
|
|
||||||
|
# Use colored output
|
||||||
|
set(CMAKE_COLOR_MAKEFILE ON)
|
||||||
|
|
||||||
|
# Create the compile command database for clang by default
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
# Always build with -fPIC
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
|
# Avoid source tree pollution
|
||||||
|
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
|
||||||
|
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
|
|
@ -0,0 +1,44 @@
|
||||||
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
|
||||||
|
# ##### # # # #
|
||||||
|
# #### ##### ###### # # # # # # # #
|
||||||
|
# # # # # # ## # # # # # #
|
||||||
|
# # # # # ##### # # # # #### # ### #
|
||||||
|
# # # ##### # # # # # # # # # # #
|
||||||
|
# # # # # # ## # # # # # # #
|
||||||
|
# #### # ###### # # ##### ##### # # #
|
||||||
|
# #
|
||||||
|
# This file is part of openGJK. #
|
||||||
|
# #
|
||||||
|
# openGJK is free software: you can redistribute it and/or modify #
|
||||||
|
# it under the terms of the GNU General Public License as published by #
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or #
|
||||||
|
# any later version. #
|
||||||
|
# #
|
||||||
|
# openGJK is distributed in the hope that it will be useful, #
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See The #
|
||||||
|
# GNU General Public License for more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License #
|
||||||
|
# along with Foobar. If not, see <https://www.gnu.org/licenses/>. #
|
||||||
|
# #
|
||||||
|
# openGJK: open-source Gilbert-Johnson-Keerthi algorithm #
|
||||||
|
# Copyright (C) Mattia Montanari 2018 - 2020 #
|
||||||
|
# http://iel.eng.ox.ac.uk/?page_id=504 #
|
||||||
|
# #
|
||||||
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
|
||||||
|
|
||||||
|
option(WITH_STATIC_LIB "Build static lib" OFF)
|
||||||
|
option(WITH_EXAMPLES "Build C example" ON)
|
||||||
|
|
||||||
|
# Default build type
|
||||||
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Release")
|
||||||
|
|
||||||
|
# APPLY USER OPTIONS
|
||||||
|
IF (WITH_STATIC_LIB)
|
||||||
|
set(BUILD_STATIC_LIB ON)
|
||||||
|
ENDIF (WITH_STATIC_LIB)
|
||||||
|
|
||||||
|
# FEEDBACK
|
||||||
|
message(STATUS " Build static lib (ON): " ${WITH_STATIC_LIB})
|
||||||
|
message(STATUS " Build C examples (ON): " ${WITH_EXAMPLES})
|
|
@ -0,0 +1,109 @@
|
||||||
|
include(AddCCompilerFlag)
|
||||||
|
include(CheckCCompilerFlagSSP)
|
||||||
|
|
||||||
|
if (UNIX)
|
||||||
|
#
|
||||||
|
# Check for -Werror turned on if possible
|
||||||
|
#
|
||||||
|
# This will prevent that compiler flags are detected incorrectly.
|
||||||
|
#
|
||||||
|
check_c_compiler_flag("-Werror" REQUIRED_FLAGS_WERROR)
|
||||||
|
if (REQUIRED_FLAGS_WERROR)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "-Werror")
|
||||||
|
|
||||||
|
if (PICKY_DEVELOPER)
|
||||||
|
list(APPEND SUPPORTED_COMPILER_FLAGS "-Werror")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_c_compiler_flag("-std=gnu99" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wpedantic" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wall" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wshadow" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wmissing-prototypes" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wcast-align" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
#add_c_compiler_flag("-Wcast-qual" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=address" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wstrict-prototypes" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=strict-prototypes" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wwrite-strings" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=write-strings" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror-implicit-function-declaration" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wpointer-arith" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=pointer-arith" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wdeclaration-after-statement" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=declaration-after-statement" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wreturn-type" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=return-type" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wuninitialized" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=uninitialized" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wimplicit-fallthrough" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=strict-overflow" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wstrict-overflow=2" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wno-format-zero-length" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wmissing-field-initializers" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
|
||||||
|
check_c_compiler_flag("-Wformat" REQUIRED_FLAGS_WFORMAT)
|
||||||
|
if (REQUIRED_FLAGS_WFORMAT)
|
||||||
|
list(APPEND SUPPORTED_COMPILER_FLAGS "-Wformat")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Wformat")
|
||||||
|
endif()
|
||||||
|
add_c_compiler_flag("-Wformat-security" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Werror=format-security" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
|
||||||
|
# Allow zero for a variadic macro argument
|
||||||
|
string(TOLOWER "${CMAKE_C_COMPILER_ID}" _C_COMPILER_ID)
|
||||||
|
if ("${_C_COMPILER_ID}" STREQUAL "clang")
|
||||||
|
add_c_compiler_flag("-Wno-gnu-zero-variadic-macro-arguments" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_c_compiler_flag("-fno-common" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
|
||||||
|
if (CMAKE_BUILD_TYPE)
|
||||||
|
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
|
||||||
|
if (CMAKE_BUILD_TYPE_LOWER MATCHES (release|relwithdebinfo|minsizerel))
|
||||||
|
add_c_compiler_flag("-Wp,-D_FORTIFY_SOURCE=2" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
check_c_compiler_flag_ssp("-fstack-protector-strong" WITH_STACK_PROTECTOR_STRONG)
|
||||||
|
if (WITH_STACK_PROTECTOR_STRONG)
|
||||||
|
list(APPEND SUPPORTED_COMPILER_FLAGS "-fstack-protector-strong")
|
||||||
|
# This is needed as Solaris has a seperate libssp
|
||||||
|
if (SOLARIS)
|
||||||
|
list(APPEND SUPPORTED_LINKER_FLAGS "-fstack-protector-strong")
|
||||||
|
endif()
|
||||||
|
else (WITH_STACK_PROTECTOR_STRONG)
|
||||||
|
check_c_compiler_flag_ssp("-fstack-protector" WITH_STACK_PROTECTOR)
|
||||||
|
if (WITH_STACK_PROTECTOR)
|
||||||
|
list(APPEND SUPPORTED_COMPILER_FLAGS "-fstack-protector")
|
||||||
|
# This is needed as Solaris has a seperate libssp
|
||||||
|
if (SOLARIS)
|
||||||
|
list(APPEND SUPPORTED_LINKER_FLAGS "-fstack-protector")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif (WITH_STACK_PROTECTOR_STRONG)
|
||||||
|
|
||||||
|
check_c_compiler_flag_ssp("-fstack-clash-protection" WITH_STACK_CLASH_PROTECTION)
|
||||||
|
if (WITH_STACK_CLASH_PROTECTION)
|
||||||
|
list(APPEND SUPPORTED_COMPILER_FLAGS "-fstack-clash-protection")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (PICKY_DEVELOPER)
|
||||||
|
add_c_compiler_flag("-Wno-error=deprecated-declarations" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("-Wno-error=tautological-compare" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Unset CMAKE_REQUIRED_FLAGS
|
||||||
|
unset(CMAKE_REQUIRED_FLAGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
add_c_compiler_flag("/D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("/D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("/D _CRT_NONSTDC_NO_WARNINGS=1" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
add_c_compiler_flag("/D _CRT_SECURE_NO_WARNINGS=1" SUPPORTED_COMPILER_FLAGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(DEFAULT_C_COMPILE_FLAGS ${SUPPORTED_COMPILER_FLAGS} CACHE INTERNAL "Default C Compiler Flags" FORCE)
|
||||||
|
set(DEFAULT_LINK_FLAGS ${SUPPORTED_LINKER_FLAGS} CACHE INTERNAL "Default C Linker Flags" FORCE)
|
|
@ -0,0 +1,103 @@
|
||||||
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
|
||||||
|
# ##### # # # #
|
||||||
|
# #### ##### ###### # # # # # # # #
|
||||||
|
# # # # # # ## # # # # # #
|
||||||
|
# # # # # ##### # # # # #### # ### #
|
||||||
|
# # # ##### # # # # # # # # # # #
|
||||||
|
# # # # # # ## # # # # # # #
|
||||||
|
# #### # ###### # # ##### ##### # # #
|
||||||
|
# #
|
||||||
|
# This file is part of openGJK. #
|
||||||
|
# #
|
||||||
|
# openGJK is free software: you can redistribute it and/or modify #
|
||||||
|
# it under the terms of the GNU General Public License as published by #
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or #
|
||||||
|
# any later version. #
|
||||||
|
# #
|
||||||
|
# openGJK is distributed in the hope that it will be useful, #
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See The #
|
||||||
|
# GNU General Public License for more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License #
|
||||||
|
# along with openGJK. If not, see <https://www.gnu.org/licenses/>. #
|
||||||
|
# #
|
||||||
|
# openGJK: open-source Gilbert-Johnson-Keerthi algorithm #
|
||||||
|
# Copyright (C) Mattia Montanari 2018 - 2019 #
|
||||||
|
# http://iel.eng.ox.ac.uk/?page_id=504 #
|
||||||
|
# #
|
||||||
|
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
|
||||||
|
|
||||||
|
|
||||||
|
# PLATFORM-SPECIFIC SETTING
|
||||||
|
if (UNIX)
|
||||||
|
find_library(M_LIB m)
|
||||||
|
set(CMAKE_C_FLAGS "-lm")
|
||||||
|
else ()
|
||||||
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||||
|
# using GCC
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra -Werror")
|
||||||
|
|
||||||
|
add_compile_options(-static-libgcc -static-libstdc++ )
|
||||||
|
add_definitions(-DMT)
|
||||||
|
|
||||||
|
elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4131 /wd4701 /wd4255 /wd4710 /wd4820 /wd4711 /wd5045")
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "/Ox")
|
||||||
|
|
||||||
|
set(CMAKE_SUPPRESS_REGENERATION true)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (UNIX AND NOT WIN32)
|
||||||
|
|
||||||
|
# Activate with: -DCMAKE_BUILD_TYPE=Debug
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "-g -DDEBUG -Wall -Wextra -Werror"
|
||||||
|
CACHE STRING "Flags used by the C compiler during DEBUG builds.")
|
||||||
|
|
||||||
|
# Activate with: -DCMAKE_BUILD_TYPE=Release
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "-O3 -Wall -finline-functions -Wextra -Werror"
|
||||||
|
CACHE STRING "Flags used by the C compiler during RELEASE builds.")
|
||||||
|
|
||||||
|
# Activate with: -DCMAKE_BUILD_TYPE=Profiling
|
||||||
|
set(CMAKE_C_FLAGS_PROFILING "-O0 -g -fprofile-arcs -ftest-coverage"
|
||||||
|
CACHE STRING "Flags used by the C compiler during PROFILING builds.")
|
||||||
|
set(CMAKE_CXX_FLAGS_PROFILING "-O0 -g -fprofile-arcs -ftest-coverage"
|
||||||
|
CACHE STRING "Flags used by the CXX compiler during PROFILING builds.")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS_PROFILING "-fprofile-arcs -ftest-coverage"
|
||||||
|
CACHE STRING "Flags used by the linker during the creation of shared libraries during PROFILING builds.")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS_PROFILING "-fprofile-arcs -ftest-coverage"
|
||||||
|
CACHE STRING "Flags used by the linker during the creation of shared libraries during PROFILING builds.")
|
||||||
|
set(CMAKE_EXEC_LINKER_FLAGS_PROFILING "-fprofile-arcs -ftest-coverage"
|
||||||
|
CACHE STRING "Flags used by the linker during PROFILING builds.")
|
||||||
|
|
||||||
|
# Activate with: -DCMAKE_BUILD_TYPE=AddressSanitizer
|
||||||
|
set(CMAKE_C_FLAGS_ADDRESSSANITIZER "-g -O1 -fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
CACHE STRING "Flags used by the C compiler during ADDRESSSANITIZER builds.")
|
||||||
|
set(CMAKE_CXX_FLAGS_ADDRESSSANITIZER "-g -O1 -fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
CACHE STRING "Flags used by the CXX compiler during ADDRESSSANITIZER builds.")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS_ADDRESSSANITIZER "-fsanitize=address"
|
||||||
|
CACHE STRING "Flags used by the linker during the creation of shared libraries during ADDRESSSANITIZER builds.")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS_ADDRESSSANITIZER "-fsanitize=address"
|
||||||
|
CACHE STRING "Flags used by the linker during the creation of shared libraries during ADDRESSSANITIZER builds.")
|
||||||
|
set(CMAKE_EXEC_LINKER_FLAGS_ADDRESSSANITIZER "-fsanitize=address"
|
||||||
|
CACHE STRING "Flags used by the linker during ADDRESSSANITIZER builds.")
|
||||||
|
|
||||||
|
# Activate with: -DCMAKE_BUILD_TYPE=MemorySanitizer
|
||||||
|
set(CMAKE_C_FLAGS_MEMORYSANITIZER "-g -O2 -fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer"
|
||||||
|
CACHE STRING "Flags used by the C compiler during MEMORYSANITIZER builds.")
|
||||||
|
set(CMAKE_CXX_FLAGS_MEMORYSANITIZER "-g -O2 -fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer"
|
||||||
|
CACHE STRING "Flags used by the CXX compiler during MEMORYSANITIZER builds.")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS_MEMORYSANITIZER "-fsanitize=memory"
|
||||||
|
CACHE STRING "Flags used by the linker during the creation of shared libraries during MEMORYSANITIZER builds.")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS_MEMORYSANITIZER "-fsanitize=memory"
|
||||||
|
CACHE STRING "Flags used by the linker during the creation of shared libraries during MEMORYSANITIZER builds.")
|
||||||
|
set(CMAKE_EXEC_LINKER_FLAGS_MEMORYSANITIZER "-fsanitize=memory"
|
||||||
|
CACHE STRING "Flags used by the linker during MEMORYSANITIZER builds.")
|
||||||
|
|
||||||
|
endif()
|
|
@ -0,0 +1,149 @@
|
||||||
|
include(CheckIncludeFile)
|
||||||
|
include(CheckSymbolExists)
|
||||||
|
include(CheckFunctionExists)
|
||||||
|
include(CheckLibraryExists)
|
||||||
|
include(CheckTypeSize)
|
||||||
|
include(CheckCXXSourceCompiles)
|
||||||
|
include(CheckStructHasMember)
|
||||||
|
include(TestBigEndian)
|
||||||
|
|
||||||
|
set(PACKAGE ${PROJECT_NAME})
|
||||||
|
set(VERSION ${PROJECT_VERSION})
|
||||||
|
set(DATADIR ${DATA_INSTALL_DIR})
|
||||||
|
set(LIBDIR ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
set(PLUGINDIR "${PLUGIN_INSTALL_DIR}-${LIBRARY_SOVERSION}")
|
||||||
|
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
|
||||||
|
|
||||||
|
set(BINARYDIR ${CMAKE_BINARY_DIR})
|
||||||
|
set(SOURCEDIR ${CMAKE_SOURCE_DIR})
|
||||||
|
|
||||||
|
function(COMPILER_DUMPVERSION _OUTPUT_VERSION)
|
||||||
|
# Remove whitespaces from the argument.
|
||||||
|
# This is needed for CC="ccache gcc" cmake ..
|
||||||
|
string(REPLACE " " "" _C_COMPILER_ARG "${CMAKE_C_COMPILER_ARG1}")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
${CMAKE_C_COMPILER} ${_C_COMPILER_ARG} -dumpversion
|
||||||
|
OUTPUT_VARIABLE _COMPILER_VERSION
|
||||||
|
)
|
||||||
|
|
||||||
|
string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2"
|
||||||
|
_COMPILER_VERSION ${_COMPILER_VERSION})
|
||||||
|
|
||||||
|
set(${_OUTPUT_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW)
|
||||||
|
compiler_dumpversion(GNUCC_VERSION)
|
||||||
|
if (NOT GNUCC_VERSION EQUAL 34)
|
||||||
|
check_c_compiler_flag("-fvisibility=hidden" WITH_VISIBILITY_HIDDEN)
|
||||||
|
endif (NOT GNUCC_VERSION EQUAL 34)
|
||||||
|
endif(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW)
|
||||||
|
|
||||||
|
# DEFINITIONS
|
||||||
|
if (SOLARIS)
|
||||||
|
add_definitions(-D__EXTENSIONS__)
|
||||||
|
endif (SOLARIS)
|
||||||
|
|
||||||
|
# HEADER FILES
|
||||||
|
check_include_file(assert.h HAVE_ASSERT_H)
|
||||||
|
check_include_file(inttypes.h HAVE_INTTYPES_H)
|
||||||
|
check_include_file(io.h HAVE_IO_H)
|
||||||
|
check_include_file(malloc.h HAVE_MALLOC_H)
|
||||||
|
check_include_file(memory.h HAVE_MEMORY_H)
|
||||||
|
check_include_file(setjmp.h HAVE_SETJMP_H)
|
||||||
|
check_include_file(signal.h HAVE_SIGNAL_H)
|
||||||
|
check_include_file(stdarg.h HAVE_STDARG_H)
|
||||||
|
check_include_file(stddef.h HAVE_STDDEF_H)
|
||||||
|
check_include_file(stdint.h HAVE_STDINT_H)
|
||||||
|
check_include_file(stdio.h HAVE_STDIO_H)
|
||||||
|
check_include_file(stdlib.h HAVE_STDLIB_H)
|
||||||
|
check_include_file(string.h HAVE_STRING_H)
|
||||||
|
check_include_file(strings.h HAVE_STRINGS_H)
|
||||||
|
check_include_file(sys/stat.h HAVE_SYS_STAT_H)
|
||||||
|
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
|
||||||
|
check_include_file(time.h HAVE_TIME_H)
|
||||||
|
check_include_file(unistd.h HAVE_UNISTD_H)
|
||||||
|
|
||||||
|
if (HAVE_TIME_H)
|
||||||
|
check_struct_has_member("struct timespec" tv_sec "time.h" HAVE_STRUCT_TIMESPEC)
|
||||||
|
endif (HAVE_TIME_H)
|
||||||
|
|
||||||
|
# FUNCTIONS
|
||||||
|
check_function_exists(calloc HAVE_CALLOC)
|
||||||
|
check_function_exists(exit HAVE_EXIT)
|
||||||
|
check_function_exists(fprintf HAVE_FPRINTF)
|
||||||
|
check_function_exists(free HAVE_FREE)
|
||||||
|
check_function_exists(longjmp HAVE_LONGJMP)
|
||||||
|
check_function_exists(siglongjmp HAVE_SIGLONGJMP)
|
||||||
|
check_function_exists(malloc HAVE_MALLOC)
|
||||||
|
check_function_exists(memcpy HAVE_MEMCPY)
|
||||||
|
check_function_exists(memset HAVE_MEMSET)
|
||||||
|
check_function_exists(printf HAVE_PRINTF)
|
||||||
|
check_function_exists(setjmp HAVE_SETJMP)
|
||||||
|
check_function_exists(signal HAVE_SIGNAL)
|
||||||
|
check_function_exists(strsignal HAVE_STRSIGNAL)
|
||||||
|
check_function_exists(strcmp HAVE_STRCMP)
|
||||||
|
check_function_exists(clock_gettime HAVE_CLOCK_GETTIME)
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
check_function_exists(_vsnprintf_s HAVE__VSNPRINTF_S)
|
||||||
|
check_function_exists(_vsnprintf HAVE__VSNPRINTF)
|
||||||
|
check_function_exists(_snprintf HAVE__SNPRINTF)
|
||||||
|
check_function_exists(_snprintf_s HAVE__SNPRINTF_S)
|
||||||
|
check_symbol_exists(snprintf stdio.h HAVE_SNPRINTF)
|
||||||
|
check_symbol_exists(vsnprintf stdio.h HAVE_VSNPRINTF)
|
||||||
|
else (WIN32)
|
||||||
|
check_function_exists(sprintf HAVE_SNPRINTF)
|
||||||
|
check_function_exists(vsnprintf HAVE_VSNPRINTF)
|
||||||
|
endif (WIN32)
|
||||||
|
|
||||||
|
find_library(RT_LIBRARY rt)
|
||||||
|
if (RT_LIBRARY AND NOT LINUX AND NOT ANDROID)
|
||||||
|
set(CMOCKA_REQUIRED_LIBRARIES ${RT_LIBRARY} CACHE INTERNAL "cmocka required system libraries")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# OPTIONS
|
||||||
|
check_c_source_compiles("
|
||||||
|
__thread int tls;
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
return 0;
|
||||||
|
}" HAVE_GCC_THREAD_LOCAL_STORAGE)
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
check_c_source_compiles("
|
||||||
|
__declspec(thread) int tls;
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
return 0;
|
||||||
|
}" HAVE_MSVC_THREAD_LOCAL_STORAGE)
|
||||||
|
endif(WIN32)
|
||||||
|
|
||||||
|
if (HAVE_TIME_H AND HAVE_STRUCT_TIMESPEC AND HAVE_CLOCK_GETTIME)
|
||||||
|
if (RT_LIBRARY)
|
||||||
|
set(CMAKE_REQUIRED_LIBRARIES ${RT_LIBRARY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
check_c_source_compiles("
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
struct timespec ts;
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_REALTIME, &ts);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}" HAVE_CLOCK_REALTIME)
|
||||||
|
|
||||||
|
# reset cmake requirements
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
set(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# ENDIAN
|
||||||
|
if (NOT WIN32)
|
||||||
|
set(WORDS_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
|
||||||
|
test_big_endian(WORDS_BIGENDIAN)
|
||||||
|
endif (NOT WIN32)
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Set system vars
|
||||||
|
|
||||||
|
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
|
set(LINUX TRUE)
|
||||||
|
endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
|
|
||||||
|
if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
||||||
|
set(FREEBSD TRUE)
|
||||||
|
endif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
||||||
|
|
||||||
|
if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
|
||||||
|
set(OPENBSD TRUE)
|
||||||
|
endif (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
|
||||||
|
|
||||||
|
if (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
||||||
|
set(NETBSD TRUE)
|
||||||
|
endif (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
|
||||||
|
|
||||||
|
if (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
|
||||||
|
set(SOLARIS TRUE)
|
||||||
|
endif (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
|
Loading…
Reference in New Issue