## This file is a quick tutorial on writing CMakeLists for targeting the Vita
cmake_minimum_required(VERSION 2.8)

## This includes the Vita toolchain, must go before project definition
# It is a convenience so you do not have to type
# -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake for cmake. It is
# highly recommended that you include this block for all projects.
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
  if(DEFINED ENV{VITASDK})
    set(CMAKE_TOOLCHAIN_FILE "$ENV{VITASDK}/share/vita.toolchain.cmake" CACHE PATH "toolchain file")
  else()
    message(FATAL_ERROR "Please define VITASDK to point to your SDK path!")
  endif()
endif()

## Define project parameters here
# Name of the project
project(hello_cpp_world)
# This line adds Vita helper macros, must go after project definition in order
# to build Vita specific artifacts (self/vpk).
include("${VITASDK}/share/vita.cmake" REQUIRED)

## Configuration options for this app
# Display name (under bubble in LiveArea)
set(VITA_APP_NAME "Super Space Shooter")
# Unique ID must be exactly 9 characters. Recommended: XXXXYYYYY where X =
# unique string of developer and Y = a unique number for this app
set(VITA_TITLEID  "IGDC00163")
# Optional version string to show in LiveArea's more info screen
set(VITA_VERSION  "01.00")

## Flags and includes for building
# Note that we make sure not to overwrite previous flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
# Optional. You can specify more param.sfo flags this way.
set(VITA_MKSFOEX_FLAGS "${VITA_MKSFOEX_FLAGS} -d PARENTAL_LEVEL=1")


include_directories(
  ./src
)

link_directories(
  ${CMAKE_CURRENT_BINARY_DIR}
)


get_filename_component(data_path ./data ABSOLUTE)

FILE(GLOB v_shaders ./shaders/*_v.cg)
FILE(GLOB f_shaders ./shaders/*_f.cg)

foreach(shader ${v_shaders})
  get_filename_component(shader_we ${shader} NAME_WE)

  add_custom_command(OUTPUT "${shader_we}.gxp"
    COMMAND psp2cgc -profile sce_vp_psp2 "${shader}"
      -o "${data_path}/shaders/${shader_we}.gxp"
    DEPENDS ${shader}
    COMMENT "Compiling ${shader} to ${shader_we}.gxp"
  )
  list(APPEND SHADER_GXPS "${shader_we}.gxp")
endforeach()

foreach(shader ${f_shaders})
  get_filename_component(shader_we ${shader} NAME_WE)

  add_custom_command(OUTPUT "${shader_we}.gxp"
    COMMAND psp2cgc -profile sce_fp_psp2 "${shader}"
      -o "${data_path}/shaders/${shader_we}.gxp"
    DEPENDS ${shader}
    COMMENT "Compiling ${shader} to ${shader_we}.gxp"
  )
  list(APPEND SHADER_GXPS "${shader_we}.gxp")
endforeach()

FILE(GLOB sources ./src/*.cpp ./src/**/*.cpp ./src/**/**/*.cpp ./src/**/**/**/*.cpp)

add_executable(${PROJECT_NAME}
  ./src/main.cpp ${sources} ${SHADER_GXPS}
)

# Library to link to (drop the -l prefix). This will mostly be stubs.
target_link_libraries(${PROJECT_NAME}
  soloud
  pthread
  m
  SceCommonDialog_stub
  SceGxm_stub
  SceDisplay_stub
  SceCtrl_stub
  SceAudio_stub
  SceSysmodule_stub
  png
  z
)

set(VITA_PACK_VPK_FLAGS "${VITA_PACK_VPK_FLAGS} -a ${data_path}=data")

## Create Vita files
vita_create_self(${PROJECT_NAME}.self ${PROJECT_NAME})
# The FILE directive lets you add additional files to the VPK, the syntax is
# FILE src_path dst_path_in_vpk. In this case, we add the LiveArea paths.
vita_create_vpk(${PROJECT_NAME}.vpk ${VITA_TITLEID} ${PROJECT_NAME}.self
  VERSION ${VITA_VERSION}
  NAME ${VITA_APP_NAME}
  FILE sce_sys/icon0.png sce_sys/icon0.png
  FILE sce_sys/livearea/contents/bg.png sce_sys/livearea/contents/bg.png
  FILE sce_sys/livearea/contents/startup.png sce_sys/livearea/contents/startup.png
  FILE sce_sys/livearea/contents/template.xml sce_sys/livearea/contents/template.xml
)
