project init
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
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}")
|
||||
Reference in New Issue
Block a user