Current section
Files
Jump to
Current section
Files
CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
project(crc32cer_nif)
set(SOURCES
c_src/crc32c_nif.c
)
SET(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
SET(Erlang_EI_INCLUDE_DIRS ${Erlang_OTP_LIB_DIR}/${Erlang_EI_DIR}/include)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/priv/)
# OTP limitation
SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
# For cerl picking up the OTP_ROOT
if (DEFINED ENV{Erlang_OTP_ROOT_DIR})
SET(Erlang_OTP_ROOT_DIR $ENV{Erlang_OTP_ROOT_DIR})
else()
EXECUTE_PROCESS(
COMMAND erl -noshell -eval "io:format(\"~s\", [code:root_dir()])" -s erlang halt
OUTPUT_VARIABLE Erlang_OTP_ROOT_DIR
)
endif()
add_library(crc32cer_nif SHARED ${SOURCES})
target_include_directories(crc32cer_nif PRIVATE ${Erlang_OTP_ROOT_DIR}/usr/include/)
set(CMAKE_CXX_EXTENSIONS ON)
set_property(GLOBAL PROPERTY CXX_STANDARD 11)
set(CRC32C_BUILD_TESTS OFF)
set(CRC32C_BUILD_BENCHMARKS OFF)
set(CRC32C_USE_GLOG OFF)
add_subdirectory(external/crc32c)
# Set appropriate include and link directories
include_directories(${CMAKE_BINARY_DIR}/external/crc32c/include)
# Specify the dependency on the external library
add_dependencies(crc32cer_nif crc32c)
set_property(TARGET crc32c PROPERTY IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/external/src/google-crc32c-build/libcrc32c.a)
if (CMAKE_SYSTEM_NAME MATCHES Darwin)
target_link_libraries(crc32cer_nif PRIVATE crc32c c++ "-Wl,-undefined,dynamic_lookup")
else()
target_link_libraries(crc32cer_nif crc32c stdc++)
endif()
install(TARGETS crc32cer_nif LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/priv/)
set_target_properties(crc32cer_nif
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/priv/
)
set_target_properties(crc32c
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/priv/
)