cmake_minimum_required(VERSION 3.10)
project(fastimagehash)


set(BUILD_UT OFF CACHE INTERNAL "")
add_subdirectory(thirdparty/wavelib)

set(BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE INTERNAL "")
set(BENCHMARK_ENABLE_TESTING OFF CACHE INTERNAL "")
set(BENCHMARK_ENABLE_INSTALL OFF CACHE INTERNAL "")
set(CMAKE_BUILD_TYPE RELEASE CACHE INTERNAL "")
add_subdirectory(thirdparty/benchmark)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_C_STANDARD 11)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "cmake/" CACHE INTERNAL "")

find_package(OpenCV REQUIRED)
find_package(FFTW REQUIRED)

add_library(
        fastimagehash
        SHARED
        fastimagehash.cpp fastimagehash.h
)

add_library(
        fastimagehash_debug
        SHARED
        fastimagehash.cpp fastimagehash.h
)

target_include_directories(
        fastimagehash
        PUBLIC
        ${CMAKE_SOURCE_DIR}/thirdparty/wavelib/header/
        ${OpenCV_INCLUDE_DIRS}
        ${FFTW_INCLUDE_DIRS}
)

target_include_directories(
        fastimagehash_debug
        PUBLIC
        ${CMAKE_SOURCE_DIR}/thirdparty/wavelib/header/
        ${OpenCV_INCLUDE_DIRS}
        ${FFTW_INCLUDE_DIRS}
)

target_link_libraries(
        fastimagehash
        ${OpenCV_LIBS}
        ${FFTW_LIBRARIES}
        wavelib
        pthread
)

target_link_libraries(
        fastimagehash_debug
        asan
        ${OpenCV_LIBS}
        ${FFTW_LIBRARIES}
        wavelib
        pthread
)

target_compile_options(
        fastimagehash
        PRIVATE
        -fPIC
        -Ofast
        #        -march=native
        -fno-stack-protector
        -fomit-frame-pointer
        -freciprocal-math
)

target_compile_options(
        fastimagehash_debug
        PRIVATE
        -fPIC
        -g
        -fsanitize=address
)


add_executable(bm benchmark.cpp)
target_link_libraries(
        bm
        fastimagehash
        benchmark
)
set_target_properties(
        bm
        PROPERTIES
        RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bench/"
)

add_executable(imhash imhash.c)
target_link_libraries(
        imhash
        ${CMAKE_SOURCE_DIR}/libfastimagehash_debug.so
)
target_compile_options(
        imhash
        PRIVATE
        -g
)

set_target_properties(fastimagehash PROPERTIES PUBLIC_HEADER "fastimagehash.h")
INSTALL(
        TARGETS fastimagehash fastimagehash_debug
        LIBRARY DESTINATION /usr/lib/
        PUBLIC_HEADER DESTINATION /usr/include/
)

add_dependencies(fastimagehash wavelib)
add_dependencies(fastimagehash_debug wavelib)
add_dependencies(bm fastimagehash)
add_dependencies(bm benchmark)
add_dependencies(imhash fastimagehash_debug)
