cmake_minimum_required(VERSION 3.0)

function(LinkLibrary name path)
    unset(DBG_LIBRARY CACHE)
    find_library(DBG_LIBRARY
        NAMES ${name}d
        HINTS ${path}
    )
    unset(REL_LIBRARY CACHE)
    find_library(REL_LIBRARY
        NAMES ${name}
        HINTS ${path}
    )
    message("LinkLibrary(${name}, ${path}): D=${DBG_LIBRARY}, R=${REL_LIBRARY}")
    target_link_libraries(SampleApp debug ${DBG_LIBRARY} optimized ${REL_LIBRARY})
endfunction(LinkLibrary)

# Sources
set(sample_Sources
    sample/src/nativeplayer.cpp
    sample/src/nativeplayer.hpp
    sample/src/App.cpp
    sample/src/App.h
    sample/src/nativeplayerMain.cpp
    sample/src/nativeplayerMain.h
    sample/src/pch.cpp
    sample/src/pch.h
    sample/src/common/DeviceResources.cpp
    sample/src/common/DeviceResources.h
    sample/src/common/DirectXHelper.h
    sample/src/common/StepTimer.h
    sample/src/common/TextureAndSRVNV12.cpp
    sample/src/common/TextureAndSRVNV12.hpp
    sample/src/common/TextureMapper.cpp
    sample/src/common/TextureMapper.hpp
    sample/src/content/Renderer.cpp
    sample/src/content/Renderer.h
    sample/src/content/ControlRenderer.cpp
    sample/src/content/ControlRenderer.h
    sample/src/content/DebugRenderer.cpp
    sample/src/content/DebugRenderer.h
    sample/src/content/QualityButtonRenderer.cpp
    sample/src/content/QualityButtonRenderer.h
    sample/src/content/Sample3DSceneRenderer.cpp
    sample/src/content/Sample3DSceneRenderer.h
    sample/src/content/ShaderStructures.h
    sample/src/content/TimelineRenderer.cpp
    sample/src/content/TimelineRenderer.h
)    
# Assets
set(sample_Assets
    sample/assets/LockScreenLogo.scale-200.png
    sample/assets/SplashScreen.png
    sample/assets/Square44x44Logo.scale-200.png
    sample/assets/Square44x44Logo.targetsize-24_altform-unplated.png
    sample/assets/Square150x150Logo.scale-200.png
    sample/assets/StoreLogo.png
    sample/assets/Wide310x150Logo.scale-200.png
)
# Shaders
set(sample_VertexShaders
    sample/src/common/SampleVertexShader.hlsl
)
set(sample_PixelShaders
    sample/src/common/SamplePixelShader.hlsl
)
 
# Manifest
set(sample_AppXManifest sample/SampleApp.appxmanifest)
set_property(SOURCE ${sample_AppXManifest} PROPERTY VS_DEPLOYMENT_CONTENT 1)
# CertKey
set(sample_CertKey sample/distkey.pfx)

add_executable( SampleApp
    ${sample_Sources}
    ${sample_Assets}
    ${sample_VertexShaders}
    ${sample_PixelShaders}
    ${sample_CertKey}
    ${sample_AppXManifest}
)

# Native libs
LinkLibrary(playercore "${CMAKE_SOURCE_DIR}/playercore/lib")
LinkLibrary(platforms "${CMAKE_SOURCE_DIR}/playercore/lib")
LinkLibrary(options "${CMAKE_SOURCE_DIR}/playercore/lib")

# Vendor Libs
LinkLibrary(json11 "${CMAKE_SOURCE_DIR}/vendor/lib")
LinkLibrary(caption "${CMAKE_SOURCE_DIR}/vendor/lib")

# Platform libs
target_link_libraries(SampleApp
    mfuuid
    mincore
    d3d12
    dxgi
    dxguid
)

# Includes
target_include_directories(SampleApp
    PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}/playercore/include
        ${CMAKE_CURRENT_SOURCE_DIR}/playercore/include/mediaplayer
        ${CMAKE_CURRENT_SOURCE_DIR}/sample/src
        ${CMAKE_CURRENT_SOURCE_DIR}/sample/src/common
        ${CMAKE_CURRENT_SOURCE_DIR}/sample/src/content
)

# Platform properties
set_property(SOURCE ${sample_PixelShaders} PROPERTY VS_SHADER_TYPE Pixel)
set_property(SOURCE ${sample_PixelShaders} PROPERTY VS_SHADER_MODEL 4.0_level_9_3)
set_property(SOURCE ${sample_PixelShaders} PROPERTY VS_SHADER_ENTRYPOINT main)
set_property(SOURCE ${sample_PixelShaders} PROPERTY VS_DEPLOYMENT_CONTENT 1)
set_property(SOURCE ${sample_VertexShaders} PROPERTY VS_SHADER_TYPE Vertex)
set_property(SOURCE ${sample_VertexShaders} PROPERTY VS_SHADER_MODEL 4.0_level_9_3)
set_property(SOURCE ${sample_VertexShaders} PROPERTY VS_SHADER_ENTRYPOINT main)
set_property(SOURCE ${sample_VertexShaders} PROPERTY VS_DEPLOYMENT_CONTENT 1)
set_property(SOURCE ${sample_Assets} PROPERTY VS_DEPLOYMENT_CONTENT 1)
set_property(SOURCE ${sample_Assets} PROPERTY VS_DEPLOYMENT_LOCATION "Assets")
set_property(SOURCE ${DEBUG_CONTENT_FILES} PROPERTY VS_DEPLOYMENT_CONTENT $<CONFIG:Debug>)
set_property(SOURCE ${RELEASE_CONTENT_FILES} PROPERTY VS_DEPLOYMENT_CONTENT $<OR:$<CONFIG:Release>>)    
set_property(TARGET SampleApp PROPERTY VS_WINRT_COMPONENT TRUE)
message(STATUS "Targeting Windows 10. Setting Extensions to version ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
set_property(TARGET SampleApp PROPERTY VS_DESKTOP_EXTENSIONS_VERSION "${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
set_property(TARGET SampleApp PROPERTY VS_MOBILE_EXTENSIONS_VERSION "${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
set_property(TARGET SampleApp PROPERTY VS_IOT_EXTENSIONS_VERSION "${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")    
