#########################################################################################################
## Copyright (c) 2019-2026 Philip Smart <info@eaw.app>
## Licensed under the GNU General Public License v3. See LICENSE-SOFTWARE.txt.
#########################################################################################################

cmake_minimum_required(VERSION 3.12)

# Pico SDC on Raspberry Pi 4
cmake_policy(VERSION 3.12)

# Pico SDC Toolchai on Windows 10
# cmake_policy(SET CMP0115 OLD)

# Pull in PICO SDK (must be before project)
include(pico_sdk_import.cmake)

# We also need PICO EXTRAS
include(pico_extras_import.cmake)

project(tzpupico C CXX ASM)
# set(PICO_EMBED_XIP_SETUP 1)
# set(PICO_NO_RAM_VECTOR_TABLE 1)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
#set(PICO_CXX_ENABLE_EXCEPTIONS 0)   # Ensure no C++ exception init
#set(PICO_NO_BINARY_INFO 1)          # Strip metadata (reduces init bloat)
#set(PICO_NO_HARDWARE_INIT 1)        # Skip some hardware setup if safe
#set(PICO_NO_FLASH 0)                # Keep flash
#set(PICO_COPY_TO_RAM 0)
#set(PICO_USE_STACK_GUARDS 0)
#set(PICO_STDIO_USB 0)
#set(PICO_STDIO_UART 0)
#set(PICO_STDIO_SEMIHOSTING 0)
#set(PICO_CXX_ENABLE_EXCEPTIONS 0)
#set(PICO_NO_BINARY_INFO 1)
#set(PICO_TIME_DEFAULT_ALARM_POOL_DISABLED 1)
pico_sdk_init()

add_compile_options(-Wall
        -Wno-format          # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int
        -Wno-unused-function # we have some for the docs that aren't called
	-Ofast
        )
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
    add_compile_options(-Wno-maybe-uninitialized)
endif()

# If you want debug output from USB (pass -DPICO_STDIO_USB=1) this ensures you don't lose any debug output while USB is set up
if (NOT DEFINED PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS)
    set(PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS 3000)
    set(PICO_STDIO_USB 1)
endif()

include_directories(${PICO_SDK_PATH}/src/rp2_common/hardware_spi/include)

#add_definitions(-DHID_PROTOCOL_DEFAULT=HID_PROTOCOL_REPORT)

#set(DVI_DEFAULT_SERIAL_CONFIG "pico_sock_cfg" CACHE STRING
#	"Select a default pin configuration from common_dvi_pin_configs.h")

get_filename_component(TZPUPICO_FOLDER ${CMAKE_CURRENT_LIST_DIR}/.. ABSOLUTE)

#include_directories(
#	${TZPUPICO_FOLDER}/PicoDVI/software/include
#)

#add_subdirectory(${TZPUPICO_FOLDER}/PicoDVI/software/libdvi "${CMAKE_CURRENT_BINARY_DIR}/libdvi")
#add_subdirectory(${TZPUPICO_FOLDER}/PicoDVI/software/libsprite "${CMAKE_CURRENT_BINARY_DIR}/libsprite")
#add_subdirectory(${TZPUPICO_FOLDER}/pico-vga-332/ "${CMAKE_CURRENT_BINARY_DIR}/pico-vga-332")
#add_subdirectory(${TZPUPICO_FOLDER}/pico-dvi-menu "${CMAKE_CURRENT_BINARY_DIR}/pico-dvi-menu")
#add_subdirectory(${TZPUPICO_FOLDER}/pico-emu-utils "${CMAKE_CURRENT_BINARY_DIR}/pico-emu-utils")

#add_subdirectory(${TZPUPICO_FOLDER}/pimoroni-pico/drivers/fatfs "${CMAKE_CURRENT_BINARY_DIR}/pimoroni-pico/drivers/fatfs")
#add_subdirectory(${TZPUPICO_FOLDER}/pimoroni-pico/drivers/sdcard "${CMAKE_CURRENT_BINARY_DIR}/pimoroni-pico/drivers/sdcard")
#include_directories(${TZPUPICO_FOLDER}/pimoroni-pico/drivers/fatfs)
#include_directories(${TZPUPICO_FOLDER}/pimoroni-pico/drivers/sdcard)

add_subdirectory(src  "${CMAKE_CURRENT_BINARY_DIR}/bin")

add_subdirectory(${TZPUPICO_FOLDER}/Zeta "${CMAKE_CURRENT_BINARY_DIR}/Zeta")

set(Z80_SHARED_LIBS                 NO  CACHE BOOL "")
set(Z80_WITH_Q                      YES CACHE BOOL "")
#set(Z80_WITH_EXECUTE                YES CACHE BOOL "")
set(Z80_WITH_FULL_IM0               YES CACHE BOOL "")
set(Z80_WITH_ZILOG_NMOS_LD_A_IR_BUG YES CACHE BOOL "")
set(Z_ALWAYS_INLINE                 inline)
set(Zeta_INCLUDE_DIR                "${TZPUPICO_FOLDER}/Zeta")
set(Zeta_VERSION                    "v0.1")

#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -mcpu=cortex-m33 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard")
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -mcpu=cortex-m33 -mthumb")

add_subdirectory(${TZPUPICO_FOLDER}/Z80 "${CMAKE_CURRENT_BINARY_DIR}/Z80")
include_directories(${TZPUPICO_FOLDER}/Z80/API)
