# Enforce CMake version 3.20 or newer needed for path function
cmake_minimum_required (VERSION 3.20)

# Use new policy for project version settings and default warning level
cmake_policy(SET CMP0048 NEW)   # requires CMake 3.14
cmake_policy(SET CMP0092 NEW)   # requires CMake 3.15

# Define project
project(proxystub VERSION 1.0 LANGUAGES CXX)

# Use C++17 support
set(CMAKE_CXX_STANDARD 17)

# Library symbols are hidden by default
set(CMAKE_CXX_VISIBILITY_PRESET hidden)

# Set target name.
set(TARGET_NAME proxystub)

# Set the SDV_FRAMEWORK_DEV_INCLUDE if not defined yet
if (NOT DEFINED SDV_FRAMEWORK_DEV_INCLUDE)
    if (NOT DEFINED ENV{SDV_FRAMEWORK_DEV_INCLUDE})
        message( FATAL_ERROR "The environment variable SDV_FRAMEWORK_DEV_INCLUDE needs to be pointing to the SDV V-API development include files location!")
    endif()
    set (SDV_FRAMEWORK_DEV_INCLUDE "$ENV{SDV_FRAMEWORK_DEV_INCLUDE}")
endif()

# Include link to export directory of SDV V-API development include files location
include_directories(${SDV_FRAMEWORK_DEV_INCLUDE})

# Set platform specific compile flags
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
    add_compile_options(/W4 /WX /wd4996 /wd4100 /permissive- /Zc:rvalueCast)
else()
    add_compile_options(-Werror -Wall -Wextra -Wshadow -Wpedantic -Wunreachable-code -fno-common)
endif()

# Add the dynamic library
add_library(${TARGET_NAME} SHARED
    toml_proxy.h
    toml_proxy.cpp
    toml_stub.h
    toml_stub.cpp
    app_proxy.h
    app_proxy.cpp
    app_stub.h
    app_stub.cpp
    core_proxy.h
    core_proxy.cpp
    core_stub.h
    core_stub.cpp
    timer_proxy.h
    timer_proxy.cpp
    timer_stub.h
    timer_stub.cpp
    module_proxy.h
    module_proxy.cpp
    module_stub.h
    module_stub.cpp
    config_proxy.h
    config_proxy.cpp
    config_stub.h
    config_stub.cpp
    com_proxy.h
    com_proxy.cpp
    com_stub.h
    com_stub.cpp
    repository_proxy.h
    repository_proxy.cpp
    repository_stub.h
    repository_stub.cpp
    core_idl_proxy.h
    core_idl_proxy.cpp
    core_idl_stub.h
    core_idl_stub.cpp
    core_types_proxy.h
    core_types_proxy.cpp
    core_types_stub.h
    core_types_stub.cpp)

# Set extension to .sdv
set_target_properties(${TARGET_NAME} PROPERTIES PREFIX "")
set_target_properties(${TARGET_NAME} PROPERTIES SUFFIX ".sdv")

# TODO: set target name.
#add_dependencies(${TARGET_NAME} <add_cmake_target_this_depends_on>)
