cmake_minimum_required (VERSION 3.6)

project(HLSL2GLSLConverterLib CXX)

set(INCLUDE 
    include/GLSLDefinitions.h
    include/HLSL2GLSLConverterImpl.h
    include/HLSL2GLSLConverterObject.h
    include/HLSLKeywords.h
)

set(INTERFACE 
    interface/HLSL2GLSLConverter.h
)

set(SOURCE 
    src/HLSL2GLSLConverterImpl.cpp
    src/HLSL2GLSLConverterObject.cpp
)

add_library(HLSL2GLSLConverterLib STATIC ${SOURCE} ${INTERFACE} ${INCLUDE} include/GLSLDefinitions_inc.h)
set_common_target_properties(HLSL2GLSLConverterLib)

set_source_files_properties(
    ${CMAKE_CURRENT_SOURCE_DIR}/include/GLSLDefinitions_inc.h
    PROPERTIES GENERATED TRUE
)

target_include_directories(HLSL2GLSLConverterLib 
PUBLIC 
    interface
PRIVATE
    include
)

target_link_libraries(HLSL2GLSLConverterLib 
PRIVATE 
    BuildSettings 
    Common 
    PlatformInterface 
    GraphicsEngine
PUBLIC
    GraphicsEngineInterface
)

if(NOT FILE2STRING_PATH STREQUAL "")
    # Create custom target to convert GLSLDefinitions.h to GLSLDefinitions_inc.h
    add_custom_target(ProcessGLSLDefinitions 
    SOURCES
        include/GLSLDefinitions.h
    )

    add_custom_command(TARGET ProcessGLSLDefinitions 
                       # Unfortunately it is not possible to set TARGET directly to HLSL2GLSLConverterLib
                       # because PRE_BUILD is only supported on Visual Studio 8 or later. For all other generators 
                       # PRE_BUILD is treated as PRE_LINK.
                       COMMAND ${FILE2STRING_PATH} include/GLSLDefinitions.h include/GLSLDefinitions_inc.h
                       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                       COMMENT "Processing GLSLDefinitions.h"
                       VERBATIM
    )

    add_dependencies(HLSL2GLSLConverterLib ProcessGLSLDefinitions)
    set_target_properties(ProcessGLSLDefinitions PROPERTIES
        FOLDER Core/Graphics/Helper
    )
else()
    message(WARNING "File2String utility is currently unavailable on this host system. This is not an issues unless you modify GLSLDefinitions.h file")
endif()

source_group("src" FILES ${SOURCE})
source_group("include" FILES ${INCLUDE})
source_group("interface" FILES ${INTERFACE})
source_group("generated" FILES include/GLSLDefinitions_inc.h)

set_target_properties(HLSL2GLSLConverterLib PROPERTIES
    FOLDER Core/Graphics
)
