cmake_minimum_required(VERSION 3.20)
project(sma3_menu C CXX)
set(CMAKE_CXX_STANDARD 20)
get_filename_component(SMA3_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)
set(GBARECOMP_GENERATED_BIOS_DIR "${SMA3_ROOT}/build/generated-bios" CACHE PATH "" FORCE)
set(GBARECOMP_COMPILER_CACHE OFF CACHE STRING "" FORCE)
set(GBARECOMP_RUNTIME_UI_ROOT "${SMA3_ROOT}/sources/recomp-ui" CACHE PATH "" FORCE)
add_subdirectory("${SMA3_ROOT}/sources/gbarecomp" framework EXCLUDE_FROM_ALL)
target_compile_definitions(gbarecomp_runtime PUBLIC SMA3_MENU_BUILD=1)
set(UI "${GBARECOMP_RUNTIME_UI_ROOT}/src")
set(IMGUI "${UI}/third_party/imgui")
add_library(sma3_menu_ui STATIC
 "${UI}/common/recomp_runtime_ui.c" "${UI}/common/recomp_runtime_settings.c"
 "${UI}/common/backends/imgui/runtime_ui_imgui.cpp"
 "${IMGUI}/imgui.cpp" "${IMGUI}/imgui_draw.cpp" "${IMGUI}/imgui_tables.cpp" "${IMGUI}/imgui_widgets.cpp"
 "${IMGUI}/backends/imgui_impl_sdl2.cpp")
target_include_directories(sma3_menu_ui PRIVATE "${UI}" "${UI}/common" "${IMGUI}" "${IMGUI}/backends" /opt/homebrew/include/SDL2)
add_library(sma3_cartridge STATIC IMPORTED)
set_target_properties(sma3_cartridge PROPERTIES IMPORTED_LOCATION "${SMA3_ROOT}/build/cartridge/libgbarecomp_game.a")
add_executable(sma3_menu main.cpp sma3_controls.cpp)
target_include_directories(gbarecomp_runtime PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
target_include_directories(sma3_menu PRIVATE "${SMA3_ROOT}/sources/gbarecomp/src/runtime" "${UI}")
target_link_libraries(sma3_menu PRIVATE sma3_cartridge gbarecomp_runtime gbarecomp_debug sma3_menu_ui)

add_executable(sma3_controls_tests controls_test.cpp sma3_controls.cpp)
enable_testing()
add_test(NAME sma3_controls COMMAND sma3_controls_tests)
target_compile_options(sma3_controls_tests PRIVATE -UNDEBUG)
add_executable(sma3_menu_host_tests host_test.cpp sma3_controls.cpp)
target_include_directories(sma3_menu_host_tests PRIVATE "${SMA3_ROOT}/sources/gbarecomp/src/runtime" "${UI}" /opt/homebrew/include/SDL2)
target_link_libraries(sma3_menu_host_tests PRIVATE sma3_cartridge gbarecomp_runtime gbarecomp_debug sma3_menu_ui)
target_compile_options(sma3_menu_host_tests PRIVATE -UNDEBUG)
add_test(NAME sma3_menu_host COMMAND sma3_menu_host_tests)
set_tests_properties(sma3_menu_host PROPERTIES ENVIRONMENT "SDL_VIDEODRIVER=dummy;SDL_AUDIODRIVER=dummy;SDL_RENDER_DRIVER=software")
