cmake_minimum_required(VERSION 3.10) project(chromaprint_nif LANGUAGES CXX) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) if(NOT ERTS_INCLUDE_DIR) message(FATAL_ERROR "ERTS_INCLUDE_DIR is required (path to erts-x.y.z/include)") endif() if(NOT PRIV_DIR) message(FATAL_ERROR "PRIV_DIR is required (mix app priv/ directory)") endif() option(CHROMAPRINT_USE_SYSTEM "Link against a system-provided libchromaprint" OFF) if(CHROMAPRINT_USE_SYSTEM) find_path(CHROMAPRINT_INCLUDE_DIR chromaprint.h) find_library(CHROMAPRINT_LIBRARY NAMES chromaprint) if(NOT CHROMAPRINT_INCLUDE_DIR OR NOT CHROMAPRINT_LIBRARY) message(FATAL_ERROR "CHROMAPRINT_USE_SYSTEM=ON but chromaprint.h or libchromaprint not found. " "Set CHROMAPRINT_INCLUDE_DIR and CMAKE_LIBRARY_PATH (or CMAKE_PREFIX_PATH).") endif() message(STATUS "Using system chromaprint: ${CHROMAPRINT_LIBRARY}") add_library(chromaprint_dep INTERFACE) target_include_directories(chromaprint_dep INTERFACE "${CHROMAPRINT_INCLUDE_DIR}") target_link_libraries(chromaprint_dep INTERFACE "${CHROMAPRINT_LIBRARY}") else() message(STATUS "Building vendored chromaprint (c_src/chromaprint)") set(BUILD_TOOLS OFF CACHE BOOL "" FORCE) set(BUILD_TESTS OFF CACHE BOOL "" FORCE) set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(BUILD_FRAMEWORK OFF CACHE BOOL "" FORCE) set(FFT_LIB "kissfft" CACHE STRING "" FORCE) # FindKissFFT.cmake searches CMAKE_SOURCE_DIR/src/3rdparty/kissfft, which would # resolve to c_src/src/... when chromaprint is added as a subdirectory. Point # it at the vendored copy inside the submodule. set(KISSFFT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/chromaprint/src/3rdparty/kissfft" CACHE PATH "" FORCE) add_subdirectory(chromaprint EXCLUDE_FROM_ALL) add_library(chromaprint_dep INTERFACE) target_link_libraries(chromaprint_dep INTERFACE chromaprint) target_include_directories(chromaprint_dep INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/chromaprint/src") endif() add_library(chromaprint_nif SHARED chromaprint_nif.cpp) set_target_properties(chromaprint_nif PROPERTIES PREFIX "" SUFFIX ".so" ) target_include_directories(chromaprint_nif PRIVATE "${ERTS_INCLUDE_DIR}") target_link_libraries(chromaprint_nif PRIVATE chromaprint_dep) if(APPLE) set_target_properties(chromaprint_nif PROPERTIES LINK_FLAGS "-flat_namespace -undefined suppress") endif() install(TARGETS chromaprint_nif LIBRARY DESTINATION "${PRIV_DIR}" RUNTIME DESTINATION "${PRIV_DIR}")