set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(CMAKE_C_COMPILER arm-none-eabi-gcc CACHE PATH "Path to C compiler")
set(CMAKE_CXX_COMPILER arm-none-eabi-g++ CACHE PATH "Path to C++ compiler")

set(CMAKE_SIZE arm-none-eabi-size CACHE PATH "Path to size tool")
set(CMAKE_READELF arm-none-eabi-readelf CACHE PATH "Path to readelf tool")
set(CMAKE_RANLIB arm-none-eabi-gcc-ranlib CACHE PATH "Path to ranlib")
set(CMAKE_AR arm-none-eabi-gcc-ar CACHE PATH "Path to ar")
set(CMAKE_OBJCOPY arm-none-eabi-objcopy CACHE PATH "Path to objcopy")
set(CMAKE_LINKER arm-none-eabi-ld CACHE PATH "Path to linker")
set(CMAKE_DFU "${CMAKE_CURRENT_LIST_DIR}/tools/dfu" CACHE PATH "Path to DFU builder")

set(MCU_LINKER_SCRIPT STM32H750VBTx.ld)
set(MCU_LINKER_FLAGS_INT -Wl,--defsym=FLASH_TARGET_INT=1)
set(MCU_ARCH cortex-m7)
set(MCU_FLOAT_ABI hard)
set(MCU_FPU fpv5-d16)
set(MCU_FLAGS "-mcpu=${MCU_ARCH} -mthumb -mfloat-abi=${MCU_FLOAT_ABI} ")

if (MCU_FLOAT_ABI STREQUAL hard)
    set(MCU_FLAGS "${MCU_FLAGS} -mfpu=${MCU_FPU}")
endif ()

set(APPLICATION_VTOR 0x08000000)
set(EXTERNAL_LOAD_ADDRESS 0x90000000)
set(INITIALISE_QSPI 1)
set(CDC_FIFO_BUFFERS 64)

set(APPLICATION_VTOR_EXT 0x90000000)
set(EXTERNAL_LOAD_ADDRESS_EXT 0x08000000)
set(INITIALISE_QSPI_EXT 0)
set(CDC_FIFO_BUFFERS_EXT 4)

set(COMMON_FLAGS "${MCU_FLAGS} -fsingle-precision-constant -Wall -fdata-sections -ffunction-sections -Wattributes -Wdouble-promotion -Werror=double-promotion -Wno-unused-variable -Wno-write-strings -mno-pic-data-is-text-relative -mno-single-pic-base")

set(CMAKE_C_FLAGS_INIT "${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS_INIT "${COMMON_FLAGS} -fno-exceptions")
set(CMAKE_C_FLAGS_DEBUG_INIT "-g -Og")
set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g -Og")
#set(CMAKE_EXE_LINKER_FLAGS_INIT "-specs=nano.specs -T ${MCU_LINKER_SCRIPT} -Wl,--gc-sections")

set(CMAKE_EXE_LINKER_FLAGS_INIT "-specs=nosys.specs -Wl,--gc-sections,--no-wchar-size-warning")

set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# stdlibs
set(STDLIB_HASHTYPE "SHA256")
set(STDLIB_PATH ${CMAKE_CURRENT_LIST_DIR}/stdlib)
set(STDLIB_URL https://github.com/32blit/stdlibs/releases/download/newlib-3.3.0-gcc-9.2.0/stdlibs.zip)
set(STDLIB_HASH "${STDLIB_HASHTYPE}=0431fa7b3fe5e463424078546560b06490890abf4967745ac85b8b6b430d1941")

if(${CMAKE_VERSION} VERSION_LESS "3.18")
    find_program(UNZIP NAMES unzip)
    if(NOT UNZIP)
        message(FATAL_ERROR "Failed to find required program: \"unzip\"\n(maybe you need to \"apt install unzip\")\n")
    endif()
endif()

# file() is great, but it doesn't tell the user what it's downloading
if(EXISTS ${STDLIB_PATH}/stdlibs.zip)
    file(${STDLIB_HASHTYPE} ${STDLIB_PATH}/stdlibs.zip FOUND_HASH)
endif()
if(NOT EXISTS ${STDLIB_PATH}/stdlibs.zip OR NOT STDLIB_HASH STREQUAL "${STDLIB_HASHTYPE}=${FOUND_HASH}")
    message("Downloading stdlibs...")
endif()

file(DOWNLOAD ${STDLIB_URL} ${STDLIB_PATH}/stdlibs.zip EXPECTED_HASH ${STDLIB_HASH} SHOW_PROGRESS STATUS DOWNLOAD_STATUS)

list(GET DOWNLOAD_STATUS 0 STATUS_CODE)

# check for non-0 status
if(${STATUS_CODE})
    list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
    message(FATAL_ERROR "Failed to download stdlibs: ${ERROR_MESSAGE}\n")
endif()

if(NOT EXISTS ${STDLIB_PATH}/pic)
    message("Extracting stdlibs...")

    if(${CMAKE_VERSION} VERSION_LESS "3.18")
        execute_process(COMMAND ${UNZIP} -u ${STDLIB_PATH}/stdlibs.zip -d ${STDLIB_PATH} RESULT_VARIABLE UNZIP_STATUS)
    else()
        file(ARCHIVE_EXTRACT INPUT ${STDLIB_PATH}/stdlibs.zip DESTINATION ${STDLIB_PATH})
        set(UNZIP_STATUS 0)
    endif()

    if(NOT ${UNZIP_STATUS} EQUAL 0)
        message(FATAL_ERROR "Failed to extract stdlibs: ${UNZIP_STATUS}\n")
    endif()
endif()

set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "-nodefaultlibs -lstdc++_nano -lm -Wl,--start-group -lgcc -lc_nano -Wl,--end-group -Wl,--start-group -lgcc -lc_nano -lnosys -Wl,--end-group")

set(PIC_STDLIBS "-L ${STDLIB_PATH}/pic")
set(NONPIC_STDLIBS "-L ${STDLIB_PATH}/no-pic")

add_definitions(-DTARGET_32BLIT_HW)
set(32BLIT_HW 1)
set(32BLIT_DIR ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Path to 32blit.cmake")
