# -----------------------------------------------------------------------------
# MCDS project
# -----------------------------------------------------------------------------
project(mcds
    DESCRIPTION "Infineon trace MCDS tools and libraries"
    HOMEPAGE_URL "https://www.infineon.com/DAS"
    LANGUAGES C CXX
)

set(INPUT_JSON_FILE "${CMAKE_SOURCE_DIR}/data/configuration_schema.json")
set(OUTPUT_HEADER_FILE "${CMAKE_BINARY_DIR}/mcds_json_schema.h")

# Custom command to generate header file
add_custom_command(
    OUTPUT ${OUTPUT_HEADER_FILE}
    COMMAND ${CMAKE_COMMAND} -DINPUT_FILE=${INPUT_JSON_FILE} -DOUTPUT_FILE=${OUTPUT_HEADER_FILE} -P ${CMAKE_SOURCE_DIR}/cmake/generate_json_header.cmake
    DEPENDS ${INPUT_JSON_FILE}
    COMMENT "Generating mcds_json_schema.h from data/configuration_schema.json"
)

# -----------------------------------------------------------------------------
# Relevant targets:
# -----------------------------------------------------------------------------

# Add the generated header file as part of the build
add_custom_target(GenerateMCDSJsonSchemaHeader ALL DEPENDS ${OUTPUT_HEADER_FILE})

if(MCDS_BUILD_DEMOS)
    add_executable(mcds_lib_demo "")
    set_target_properties(mcds_lib_demo PROPERTIES
        VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/test/mcds_lib_demo/"
    )
endif()

if(MCDS_BUILD_MTV)
    add_executable(mcds_trace_viewer "")
endif()

add_library(mcds_core STATIC "")

add_library(mcds_configurator "")
add_library(mcds_decoder "")
add_library(mcds_recorder "")

if(MCDS_BUILD_TEST)
    # mcds_hl_decoder_test accesses internal (non-exported) symbols that are not
    # visible in shared builds (LNK2019/LNK1120).  Skip in shared configurations.
    if(NOT BUILD_SHARED_LIBS)
        add_executable(mcds_hl_decoder_test "")
        set_target_properties(mcds_hl_decoder_test PROPERTIES
            VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/test/decoder/"
        )
    endif()
endif()

# generate IDE virtual folders where supported
set(REC ".*([.]cpp|[.]h)")

set(REG1 ".*/src/das/")
source_group("das" REGULAR_EXPRESSION "${REG1}${REC}")

set(REG1 ".*/src/generated/")
source_group("generated" REGULAR_EXPRESSION "${REG1}${REC}")

set(REG1 ".*/src/mcds/")
source_group("mcds" REGULAR_EXPRESSION "${REG1}${REC}")

set(REG1 ".*/src/mcds_tools/")
source_group("mcds_tools" REGULAR_EXPRESSION "${REG1}${REC}")


# -----------------------------------------------------------------------------
# Install
# -----------------------------------------------------------------------------

# -----------------------------------------------------------------------------
# Package Generator
# -----------------------------------------------------------------------------
