# Generated Cmake Pico project file

cmake_minimum_required(VERSION 3.13)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Initialise pico_sdk from installed location
# (note this can come from environment, CMake cache etc)

# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
if(WIN32)
    set(USERHOME $ENV{USERPROFILE})
else()
    set(USERHOME $ENV{HOME})
endif()
set(sdkVersion 2.2.0)
set(toolchainVersion 14_2_Rel1)
set(picotoolVersion 2.2.0)
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
if (EXISTS ${picoVscode})
    include(${picoVscode})
endif()
# ====================================================================================
set(PICO_BOARD pico2 CACHE STRING "Board type")

# Pull in Raspberry Pi Pico SDK (must be before project)
include(pico_sdk_import.cmake)

project(Firmware C CXX ASM)

# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()

# Add executable. Default name is the project name, version 0.1
add_custom_command(OUTPUT Build_Number
    # PRE_BUILD
    COMMAND cmd /c increment_build_number.bat
)

add_custom_target(fakeTarget1 ALL
	DEPENDS Build_Number
)

# Add executable. Default name is the project name, version 0.1

aux_source_directory(Images/ IMAGE_SOURCES)
include_directories(Images/)

aux_source_directory(Fonts/ FONT_SOURCES)
include_directories(Fonts/)

aux_source_directory(Screens_Display/ SCREEN_DISPLAY_SOURCES)
include_directories(Screens_Display/)

add_executable(Firmware
    main.c
    PWM.c
    UART0.c
    Convert.c
    I2C_Master.c
    USB_Serial.c
    Serial_Command.c
    
    Hue.c
    Easings.c
    Command.c
    UI_Control.c
    Mode_Manager.c
    MIDI_Note_List.c
    
    INA260.c
    Switch.c
    Rotary_Encoder.c
    EEPROM_M24C64.c

    Core1.c
    Core1_ADC.c
    Core1_LED_Enable.c
    Core1_LED_Control.c
    Core1_MIDI_Receiver.c
    Core1_Light_Controller.c

    Display_Default_Configurations.c
    Display_Message_Box_Icons.c
    Display_Render_Complex.c
    Display_Render_Simple.c
    Display_Color.c
    Display_Font.c
    Display_Image.c
    Display_Init.c
    Display_Touch.c
    Display_Objects.c
    Display_Shapes.c
    Display_SPI.c
    Display.c

    Screen_Variables.c
    Hierarchical_Menu.c

    ${IMAGE_SOURCES}
    ${FONT_SOURCES}
    ${SCREEN_DISPLAY_SOURCES}
)

pico_set_program_name(Firmware "Firmware")
pico_set_program_version(Firmware "0.1")

# Modify the below lines to enable/disable output over UART/USB
pico_enable_stdio_uart(Firmware 0)
pico_enable_stdio_usb(Firmware 1)

set_property(TARGET Firmware APPEND_STRING PROPERTY LINK_FLAGS "-Wl,--print-memory-usage")

# Add the standard library to the build
target_link_libraries(Firmware
        pico_stdlib)

# Add the standard include files to the build
target_include_directories(Firmware PRIVATE
        ${CMAKE_CURRENT_LIST_DIR}
)

# Add any user requested libraries
target_link_libraries(Firmware 
        hardware_spi
        hardware_i2c
        hardware_dma
        hardware_pwm
        hardware_adc
        hardware_interp
        hardware_timer
        hardware_watchdog
        hardware_clocks
        hardware_uart
        pico_multicore
        pico_rand
        )

pico_add_extra_outputs(Firmware)

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND ${CMAKE_OBJDUMP} -t $<TARGET_FILE:${PROJECT_NAME}> > ${CMAKE_CURRENT_BINARY_DIR}/symbols_full.txt
    COMMENT "Extracting all symbols to symbols_full.txt"
)