Files
chromaprint/c_src/CMakeLists.txt
T
2026-05-20 14:35:34 +02:00

66 lines
2.5 KiB
CMake

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}")