cmake_minimum_required(VERSION 3.24)
project(materials_rpsmes)

if(POLICY CMP0167)
    cmake_policy(SET CMP0167 NEW)
endif()

if(POLICY CMP0144)
    cmake_policy(SET CMP0144 NEW)
endif()

if(MSVC)    # flags needed by Visual Studio:
    set(CMAKE_CXX_FLAGS "/bigobj ${CMAKE_CXX_FLAGS}")   # increase a number of sections in obj. file, required by plask
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251")   # disable many warning (all stl & boost tamplates) about wrong dll import/export, TODO subject for future investigation
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4018")   # disable warning about signed/unsigned generated mainly by workaround for OpenMP 2 (which can use only signed types)
    add_definitions(-D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS) # hide many warnings which are caused by boost and fmt under MSVC, https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(C4996)&rd=true
    add_definitions(-DFMT_SHARED)   # import fmt from PLaSK
elseif(MINGW)
    set(CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}")
    add_definitions(-DFMT_SHARED)   # import fmt from PLaSK
else()
    set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
endif()

find_package(Boost 1.54.0 REQUIRED)
find_package(PLaSK REQUIRED)

include_directories("${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/fakelibs" ${Boost_INCLUDE_DIRS} ${PLASK_INCLUDE_DIRS})

file(GLOB rpsmes_src MaterialDataBase/*.cpp)
set(src ${rpsmes_src} materials.cpp functions.cpp Faddeeva.cc)

if (WIN32)
    add_library(materials_rpsmes SHARED ${src})
    # install(TARGETS materials_rpsmes RUNTIME DESTINATION lib/plask/materials)
else()
    add_library(materials_rpsmes MODULE ${src})
    # install(TARGETS materials_rpsmes LIBRARY DESTINATION lib/plask/materials)
endif()

set_target_properties(materials_rpsmes PROPERTIES OUTPUT_NAME materials_rpsmes PREFIX "")
target_link_libraries(materials_rpsmes ${PLASK_LIBRARIES})
