cmake_minimum_required(VERSION 3.15)

if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
    message(FATAL_ERROR "Source and build directories cannot be the same. Go use the /build directory.")
endif()

project(normal-driven-spherical-shape-analogies)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif()

if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
    # Might work.
    #set(CMAKE_CXX_FLAGS_RELEASE "/MT")
    #set(CMAKE_CXX_FLAGS_DEBUG   "/MTd")
    set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)
    # Required for boost static linking.
    set(Boost_USE_STATIC_LIBS    ON)
    set(Boost_USE_MULTITHREADED  ON)
    set(Boost_USE_STATIC_RUNTIME ON)
else()
    set(CMAKE_CXX_FLAGS         "-Wall -Wextra -Wfatal-errors")
    set(CMAKE_CXX_FLAGS_DEBUG   "-g")
    set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

find_package(OpenMP     REQUIRED)
find_package(Eigen3 3.3 REQUIRED)
find_package(LIBIGL     REQUIRED)
find_package(Polyscope  REQUIRED)

add_executable(ndssa main.cpp)

target_link_libraries(ndssa PUBLIC OpenMP::OpenMP_CXX)
target_link_libraries(ndssa PUBLIC Eigen3::Eigen)
target_link_libraries(ndssa PUBLIC igl::core)
target_link_libraries(ndssa PUBLIC polyscope)
