cmake_minimum_required(VERSION 3.20)
project(gamejam LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

# ---------------------------------------------------------------------------
# Dependencies
#
# Native build: raylib + RmlUi come from nixpkgs / the `rmlui` derivation,
# found on the default system paths set up by the dev shell.
#
# Wasm build: raylib + RmlUi come from the `raylibWasm` / `rmluiWasm`
# derivations, located via -DCMAKE_PREFIX_PATH set by devShells.wasm.
# ---------------------------------------------------------------------------
find_package(raylib REQUIRED)
find_package(RmlUi REQUIRED)

add_executable(gamejam
  src/main.cpp
  src/Application.cpp
  src/backend/RaylibSystemInterface.cpp
  src/backend/RaylibRenderInterface.cpp
  src/backend/RaylibInput.cpp
)

target_link_libraries(gamejam PRIVATE
  raylib
  RmlUi::Core
  RmlUi::Debugger
)

target_include_directories(gamejam PRIVATE ${CMAKE_SOURCE_DIR}/src)

set(ASSET_DIR ${CMAKE_SOURCE_DIR}/assets)

if(EMSCRIPTEN)
  # -----------------------------------------------------------------------
  # Wasm-specific settings
  # -----------------------------------------------------------------------
  set(CMAKE_EXECUTABLE_SUFFIX ".html")

  target_link_options(gamejam PRIVATE
    "-sUSE_GLFW=3"
    "-sASYNCIFY"
    "-sALLOW_MEMORY_GROWTH=1"
    "-sFORCE_FILESYSTEM=1"
    "--preload-file=${ASSET_DIR}@assets"
 #   "--shell-file=${CMAKE_SOURCE_DIR}/shell.html"
  )


else()
  add_custom_command(TARGET gamejam POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
            ${ASSET_DIR} $<TARGET_FILE_DIR:gamejam>/assets
    COMMENT "Copying assets to build output"
  )
endif()

install(TARGETS gamejam RUNTIME DESTINATION bin)

if(NOT EMSCRIPTEN)
  install(DIRECTORY ${ASSET_DIR} DESTINATION bin)
endif()
