set (NATIVE_PROJECT_NAME nativeplayer)

# Native Player
set(NATIVE_SOURCE
    display.cpp
    display.hpp
    nativeplayer.cpp
    nativeplayer.hpp
    shader_cb.h
    streamplayer.cpp
    streamplayer.hpp
    view.cpp
    view.hpp
)

# From avc_basic sample project directory
set(_NativePlayer_SHADERS
  shader_p.pssl
  shader_vv.pssl
)

add_library(${NATIVE_PROJECT_NAME} ${NATIVE_SOURCE} ${_NativePlayer_SHADERS} ${COMMON_SOURCE})
target_link_libraries(${NATIVE_PROJECT_NAME} json11 caption platforms mediaplayer)
set_target_properties (${NATIVE_PROJECT_NAME} PROPERTIES FOLDER examples)

target_link_libraries(${NATIVE_PROJECT_NAME} ScePm4Dump ScePad_stub_weak)

target_include_directories(${NATIVE_PROJECT_NAME}
  PUBLIC
    ${CMAKE_SOURCE_DIR}/vendor/ps4samples/sampleutil/include
    ${CMAKE_CURRENT_SOURCE_DIR}
  PRIVATE
    ${CMAKE_SOURCE_DIR}/vendor/ps4samples   # used to include framework/sample_framework.h
)

set(TOOLKIT_ROOT ${CMAKE_SOURCE_DIR}/vendor/ps4samples/toolkit)
include_external_msproject(toolkit ${TOOLKIT_ROOT}/toolkit.vcxproj PLATFORM Orbis)
add_dependencies(nativeplayer toolkit)
target_link_libraries(nativeplayer debug ${TOOLKIT_ROOT}/toolkit_debug.a)
target_link_libraries(nativeplayer optimized ${TOOLKIT_ROOT}/toolkit.a)

set(FRAMEWORK_ROOT ${CMAKE_SOURCE_DIR}/vendor/ps4samples/framework)
include_external_msproject(framework ${FRAMEWORK_ROOT}/framework.vcxproj PLATFORM Orbis)
add_dependencies(nativeplayer framework)
target_link_libraries(nativeplayer debug ${FRAMEWORK_ROOT}/framework_debug.a)
target_link_libraries(nativeplayer optimized ${FRAMEWORK_ROOT}/framework.a)

set(DBGFONT_ROOT ${CMAKE_SOURCE_DIR}/vendor/ps4samples/dbg_font)
include_external_msproject(dbg_font ${DBGFONT_ROOT}/dbg_font.vcxproj TYPE "Orbis" GUID "43565ad8-688c-4451-a81f-2aba8e957753" PLATFORM "Orbis")
add_dependencies(nativeplayer dbg_font)
target_link_libraries(nativeplayer debug ${DBGFONT_ROOT}/libSceDbgFont_debug.a)
target_link_libraries(nativeplayer optimized ${DBGFONT_ROOT}/libSceDbgFont.a)

set(SAMPLEUTIL_ROOT ${CMAKE_SOURCE_DIR}/vendor/ps4samples/sampleutil/source/sampleutil)
include_external_msproject(sampleutil ${SAMPLEUTIL_ROOT}/libSceSampleUtil.vcxproj PLATFORM Orbis)
add_dependencies(nativeplayer sampleutil)
target_link_libraries(nativeplayer debug     ${SAMPLEUTIL_ROOT}/Orbis_Debug/libSceSampleUtil.a)
target_link_libraries(nativeplayer optimized ${SAMPLEUTIL_ROOT}/Orbis_Release/libSceSampleUtil.a)

find_program(ORBIS_WAVE_PSSLC orbis-wave-psslc)
if(NOT ORBIS_WAVE_PSSLC)
  message(SEND_ERROR "Could not find orbis-wave-psslc.exe")
endif()

# Add command to compile the shaders for the nativeplayer
set(NATIVE_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data)
foreach(shader ${_NativePlayer_SHADERS})
  get_filename_component(filename ${shader} NAME_WE)
  add_custom_command(TARGET ${NATIVE_PROJECT_NAME} PRE_LINK
    COMMAND "${ORBIS_WAVE_PSSLC}"
    ARGS
      "-o"
      "${NATIVE_DATA_DIR}/${filename}.sb"
      "${CMAKE_CURRENT_SOURCE_DIR}/${shader}"
      "-cache"
      "-cachedir"
      "${CMAKE_CURRENT_BINARY_DIR}/")
endforeach()

add_executable(SamplePlayer
  sampleplayer.cpp
  sampleplayer.hpp
)

#This is not working properly - So going hardcore mode
#set_target_properties(SamplePlayer PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data")
file( WRITE "${CMAKE_CURRENT_BINARY_DIR}/SamplePlayer.vcxproj.user"
    "<?xml version=\"1.0\" encoding=\"utf-8\"?>
    <Project ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">
    <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Orbis'\">
        <LocalDebuggerWorkingDirectory>${CMAKE_CURRENT_SOURCE_DIR}/data</LocalDebuggerWorkingDirectory>
        <DebuggerFlavor>ORBISDebugger</DebuggerFlavor>
    </PropertyGroup>
    <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Orbis'\">
        <LocalDebuggerWorkingDirectory>${CMAKE_CURRENT_SOURCE_DIR}/data</LocalDebuggerWorkingDirectory>
        <DebuggerFlavor>ORBISDebugger</DebuggerFlavor>
    </PropertyGroup>
    </Project>")

target_link_libraries(SamplePlayer nativeplayer options)
set_target_properties(SamplePlayer PROPERTIES FOLDER examples)
