cmake_minimum_required(VERSION 3.22)
project(ShenmueHangon LANGUAGES CXX)

option(SHEN_AUTO_TEST_ENABLED "Capture a fixed Hang-On screenshot" OFF)

if(NOT WIN32 OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
  message(FATAL_ERROR "Hang-On requires Windows x64 and GameHangon_Winx64_Release.dll")
endif()

add_executable(shenmue_hangon WIN32 main.cpp)
target_compile_features(shenmue_hangon PRIVATE cxx_std_20)
set_target_properties(shenmue_hangon PROPERTIES OUTPUT_NAME ShenmueHangon CXX_EXTENSIONS OFF VS_GLOBAL_VcpkgEnabled false)
target_compile_definitions(shenmue_hangon PRIVATE UNICODE _UNICODE WIN32_LEAN_AND_MEAN NOMINMAX _CRT_SECURE_NO_WARNINGS)
target_link_libraries(shenmue_hangon PRIVATE user32 gdi32 winmm shell32)
if(SHEN_AUTO_TEST_ENABLED)
  target_compile_definitions(shenmue_hangon PRIVATE SHEN_AUTO_TEST_ENABLED=1)
  target_link_libraries(shenmue_hangon PRIVATE gdiplus)
endif()
if(MSVC)
  target_compile_options(shenmue_hangon PRIVATE /W4 /permissive- /GR- "$<$<CONFIG:Release>:/Os>" "$<$<CONFIG:Release>:/GL>")
  target_link_options(shenmue_hangon PRIVATE "$<$<CONFIG:Release>:/LTCG>" "$<$<CONFIG:Release>:/OPT:REF>" "$<$<CONFIG:Release>:/OPT:ICF>")
else()
  target_compile_options(shenmue_hangon PRIVATE -Wall -Wextra -Wpedantic)
  if(MINGW)
    target_link_options(shenmue_hangon PRIVATE -municode)
  endif()
endif()
