Current section
Files
Jump to
Current section
Files
c_src/CMakeLists.txt
##########################################################################
# Project Setup #
##########################################################################
cmake_minimum_required(VERSION 3.3)
project(ErlangH3 C)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 99)
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake)
include(ASan)
IF (APPLE)
set(CMAKE_MODULE_LINKER_FLAGS "-flat_namespace -undefined suppress")
set(CMAKE_MACOSX_RPATH 1)
ENDIF()
#
# Enable sanitization if environment variable is set
#
# Truth Table
#
# +----------------------+--------------------+------------------+
# | SANITIZE_ERLANG_NIFS | SANITIZE_ERLANG_H3 | Enable santizer? |
# +----------------------+--------------------+------------------+
# | undefined | undefined | 0 |
# | 1 | undefined | 1 |
# | don't care | 1 | 1 |
# | don't care | 0 | 0 |
# +----------------------+--------------------+------------------+
#
if(DEFINED ENV{SANITIZE_ERLANG_H3})
if($ENV{SANITIZE_ERLANG_H3})
set(CMAKE_BUILD_TYPE ASan CACHE STRING "Choose the type of build." FORCE)
else()
unset(CMAKE_BUILD_TYPE CACHE)
endif()
elseif(DEFINED ENV{SANITIZE_ERLANG_NIFS})
if($ENV{SANITIZE_ERLANG_NIFS})
set(CMAKE_BUILD_TYPE ASan CACHE STRING "Choose the type of build." FORCE)
else()
unset(CMAKE_BUILD_TYPE CACHE)
endif($ENV{SANITIZE_ERLANG_NIFS})
endif()
#
# Set a default build type if none was specified
#
set(default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
endif()
##########################################################################
# Static Analysis #
##########################################################################
if(CMAKE_VERSION VERSION_GREATER 3.9)
find_program(CPPCHECK
NAMES cppcheck
DOC "Path to cppcheck executable"
)
if(CPPCHECK)
message(STATUS "Found cppcheck: ${CPPCHECK}")
set(CMAKE_C_CPPCHECK ${CPPCHECK}
--enable=all
--inline-suppr
--inconclusive
--quiet
--std=c${CMAKE_C_STANDARD}
--suppress=missingInclude
--template=gcc
)
endif(CPPCHECK)
endif()
if(CMAKE_VERSION VERSION_GREATER 3.5)
find_program(CLANG_TIDY
NAMES clang-tidy
DOC "Path to clang-tidy executable"
)
if(CLANG_TIDY)
message(STATUS "Found clang-tidy: ${CLANG_TIDY}")
set(CMAKE_C_CLANG_TIDY "${CLANG_TIDY}")
endif(CLANG_TIDY)
endif()
##########################################################################
# NIF #
##########################################################################
find_package(Erlang REQUIRED)
find_package(H3 REQUIRED)
add_library(h3 MODULE h3.c)
target_link_libraries(h3
PRIVATE
Erlang::Erlang
H3::H3
)
install(TARGETS h3 DESTINATION ${CMAKE_SOURCE_DIR}/../priv)