mirror of
https://github.com/clockworkpi/PicoCalc.git
synced 2025-12-12 10:18:54 +01:00
310 lines
10 KiB
CMake
310 lines
10 KiB
CMake
cmake_minimum_required(VERSION 3.13)
|
|
# Valid builds are PICO, PICOUSB, VGA, VGAUSB, HDMI(rp2350 only), HDMIUSB(rp2350 only), WEB
|
|
|
|
set(PICOCALC true)
|
|
# For dynamic loading from SD card:
|
|
# SDBOOT requires the bootloader to be in the first 256KB of flash
|
|
# PicoMite will need to be shifted by this amount, and all references to
|
|
# positions in flash updated to accomodate. THIS OPTION IS NOT READY YET.
|
|
# details: https://github.com/adwuard/Picocalc_SD_Boot
|
|
set(SDBOOT true)
|
|
|
|
# Compile for PICO 1 Board
|
|
set(COMPILE PICO)
|
|
|
|
# Compile for PICO 2 Board
|
|
#set(COMPILE PICORP2350)
|
|
#set(COMPILE WEBRP2350)
|
|
|
|
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350" )
|
|
set(PICO_PLATFORM rp2350)
|
|
if (COMPILE STREQUAL "WEBRP2350")
|
|
set(PICO_BOARD pico2_w)
|
|
else()
|
|
set(PICO_BOARD pimoroni_pga2350)
|
|
endif()
|
|
else()
|
|
set(PICO_PLATFORM rp2040)
|
|
if (COMPILE STREQUAL "WEB")
|
|
set(PICO_BOARD pico_w)
|
|
else()
|
|
set(PICO_BOARD pico)
|
|
endif()
|
|
endif()
|
|
include(pico_sdk_import.cmake)
|
|
project(PicoMite C CXX ASM)
|
|
set(CMAKE_C_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
#set(PICO_NO_COPRO_DIS 1)
|
|
pico_sdk_init()
|
|
add_executable(PicoMite
|
|
PicoMite.c
|
|
Memory.c
|
|
regex.c
|
|
MMBasic.c
|
|
Operators.c
|
|
Custom.c
|
|
Functions.c
|
|
Commands.c
|
|
FileIO.c
|
|
ff.c
|
|
ffsystem.c
|
|
ffunicode.c
|
|
mmc_stm32.c
|
|
Draw.c
|
|
Editor.c
|
|
XModem.c
|
|
MM_Misc.c
|
|
External.c
|
|
MATHS.c
|
|
Onewire.c
|
|
I2C.c
|
|
SPI.c
|
|
Serial.c
|
|
SPI-LCD.c
|
|
BmpDecoder.c
|
|
GPS.c
|
|
Audio.c
|
|
CFunction.c
|
|
picojpeg.c
|
|
lfs.c
|
|
lfs_util.c
|
|
hxcmod.c
|
|
VS1053.c
|
|
aes.c
|
|
)
|
|
if (COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350" )
|
|
target_sources(PicoMite PRIVATE
|
|
SSD1963.c
|
|
Touch.c
|
|
GUI.c
|
|
cJSON.c
|
|
mqtt.c
|
|
MMMqtt.c
|
|
MMTCPclient.c
|
|
MMtelnet.c
|
|
MMntp.c
|
|
MMtcpserver.c
|
|
tftp.c
|
|
MMtftp.c
|
|
MMudp.c
|
|
)
|
|
set_source_files_properties(cJSON.c PROPERTIES COMPILE_FLAGS -Os)
|
|
target_include_directories(PicoMite PRIVATE
|
|
${CMAKE_CURRENT_LIST_DIR}
|
|
${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts
|
|
)
|
|
Pico_enable_stdio_usb(PicoMite 1)
|
|
endif()
|
|
|
|
if ((COMPILE STREQUAL "PICO") OR (COMPILE STREQUAL "PICOUSB") OR (COMPILE STREQUAL "PICORP2350") OR (COMPILE STREQUAL "PICOUSBRP2350") OR (COMPILE STREQUAL "WEBRP2350"))
|
|
target_sources(PicoMite PRIVATE
|
|
SSD1963.c
|
|
Touch.c
|
|
GUI.c)
|
|
endif()
|
|
|
|
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB")
|
|
target_sources(PicoMite PRIVATE
|
|
USBKeyboard.c
|
|
)
|
|
else()
|
|
target_sources(PicoMite PRIVATE
|
|
Keyboard.c
|
|
mouse.c
|
|
)
|
|
endif()
|
|
|
|
if(COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
|
|
target_sources(PicoMite PRIVATE
|
|
upng.c
|
|
)
|
|
endif()
|
|
|
|
if(PICOCALC STREQUAL "true")
|
|
target_sources(PicoMite PRIVATE
|
|
picocalc/i2ckbd.c
|
|
)
|
|
endif()
|
|
|
|
set_source_files_properties(mmc_stm32.c PROPERTIES COMPILE_FLAGS -O2)
|
|
set_source_files_properties(ff.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(GUI.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(BmpDecoder.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(GPS.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(I2C.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(lfs.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(picojpeg.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(regex.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(hxcmod.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(MATHS.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(Editor.c PROPERTIES COMPILE_FLAGS -Os)
|
|
set_source_files_properties(aes.c PROPERTIES COMPILE_FLAGS -Os)
|
|
pico_generate_pio_header(PicoMite ${CMAKE_CURRENT_LIST_DIR}/PicoMiteI2S.pio)
|
|
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "WEB")
|
|
pico_define_boot_stage2(slower_boot2 ${PICO_DEFAULT_BOOT_STAGE2_FILE})
|
|
target_compile_definitions(slower_boot2 PRIVATE PICO_FLASH_SPI_CLKDIV=4)
|
|
pico_set_boot_stage2(PicoMite slower_boot2)
|
|
endif()
|
|
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "VGARP2350")
|
|
pico_generate_pio_header(PicoMite ${CMAKE_CURRENT_LIST_DIR}/PicoMiteVGA.pio)
|
|
endif()
|
|
|
|
|
|
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
|
|
Pico_enable_stdio_usb(PicoMite 0)
|
|
target_include_directories(PicoMite PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/usb_host_files
|
|
)
|
|
else()
|
|
Pico_enable_stdio_usb(PicoMite 1)
|
|
endif()
|
|
|
|
pico_enable_stdio_uart(PicoMite 0)
|
|
pico_add_extra_outputs(PicoMite)
|
|
pico_set_printf_implementation(PicoMite compiler)
|
|
if(COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
|
|
pico_set_float_implementation(PicoMite pico_dcp)
|
|
endif()
|
|
target_compile_options(PicoMite PRIVATE -DNDEBUG
|
|
-DPICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0
|
|
-DPICO_ADC_CLKDIV_ROUND_NEAREST
|
|
-DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64
|
|
-DPICO_CLOCK_AJDUST_PERI_CLOCK_WITH_SYS_CLOCK
|
|
-DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64
|
|
-DPICO_FLASH_SIZE_BYTES=16777216
|
|
-DPICO_CORE1_STACK_SIZE=0x00
|
|
-DPICO_MALLOC_PANIC
|
|
-O2
|
|
-Wall)
|
|
# all RP2350 variants
|
|
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
|
|
target_compile_options(PicoMite PRIVATE -Drp2350
|
|
-DPICO_FLASH_SPI_CLKDIV=4
|
|
-DPICO_PIO_USE_GPIO_BASE
|
|
)
|
|
endif()
|
|
# all PicoMite variants - enable the gui
|
|
if (COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
|
|
target_compile_options(PicoMite PRIVATE -DPICOMITE
|
|
-DPICO_HEAP_SIZE=0x1000
|
|
-DGUICONTROLS
|
|
-DPICO_CORE0_STACK_SIZE=0x1000
|
|
)
|
|
endif()
|
|
# all VGA variants
|
|
if (COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
|
|
target_compile_options(PicoMite PRIVATE -DPICOMITEVGA
|
|
-DPICO_HEAP_SIZE=0x2000
|
|
-DPICO_CORE0_STACK_SIZE=0x2000
|
|
)
|
|
endif()
|
|
# HDMI variants
|
|
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB")
|
|
target_compile_options(PicoMite PRIVATE -DPICOMITEVGA
|
|
-DHDMI
|
|
-DPICO_HEAP_SIZE=0x2000
|
|
-DPICO_CORE0_STACK_SIZE=0x2000
|
|
)
|
|
endif()
|
|
#Web variants need more heap
|
|
if(COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350")
|
|
target_compile_options(PicoMite PRIVATE -DPICOMITEWEB
|
|
-DPICO_HEAP_SIZE=0x4000
|
|
-DGUICONTROLS
|
|
-DCYW43_HOST_NAME="WebMite"
|
|
-DPICO_CYW43_ARCH_POLL
|
|
-DPICO_CORE0_STACK_SIZE=0x4000
|
|
)
|
|
endif()
|
|
#USB variants
|
|
if (COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "HDMIUSB")
|
|
target_compile_options(PicoMite PRIVATE -DUSBKEYBOARD
|
|
)
|
|
endif()
|
|
#special case WEB RP2350 gets the GUI controls
|
|
if(COMPILE STREQUAL "WEBRP2350")
|
|
target_compile_options(PicoMite PRIVATE -DGUICONTROLS
|
|
)
|
|
endif()
|
|
#set the PICOCALC flag
|
|
if(PICOCALC STREQUAL "true")
|
|
target_compile_options(PicoMite PRIVATE -DPICOCALC
|
|
)
|
|
endif()
|
|
|
|
|
|
target_link_libraries(PicoMite
|
|
pico_stdlib
|
|
hardware_flash
|
|
hardware_irq
|
|
hardware_adc
|
|
hardware_pwm
|
|
hardware_i2c
|
|
hardware_spi
|
|
hardware_dma
|
|
hardware_exception
|
|
hardware_pio
|
|
)
|
|
|
|
if(COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
|
|
target_link_libraries(PicoMite
|
|
tinyusb_host
|
|
tinyusb_board
|
|
pico_multicore
|
|
)
|
|
endif()
|
|
|
|
if(COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "PICORP2350")
|
|
target_link_libraries(PicoMite
|
|
pico_multicore
|
|
)
|
|
endif()
|
|
|
|
if(COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
|
|
target_link_libraries(PicoMite
|
|
pico_rand
|
|
)
|
|
endif()
|
|
|
|
if(COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350" )
|
|
target_link_libraries(PicoMite
|
|
pico_cyw43_arch_lwip_poll
|
|
)
|
|
endif()
|
|
|
|
if(SDBOOT STREQUAL "true" AND (COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "WEBRP2350"))
|
|
pico_set_linker_script(PicoMite ${CMAKE_SOURCE_DIR}/memmap_default_rp2350.ld)
|
|
endif()
|
|
|
|
if(SDBOOT STREQUAL "true" AND (COMPILE STREQUAL "PICO"))
|
|
pico_set_linker_script(PicoMite ${CMAKE_SOURCE_DIR}/memmap_default_rp2040.ld)
|
|
endif()
|
|
|
|
set(UF2_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/PicoMite.uf2)
|
|
set(UF2_DEST ${CMAKE_BINARY_DIR}/PicoMite.uf2)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${UF2_DEST}
|
|
DEPENDS ${UF2_SOURCE}
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${UF2_SOURCE} ${UF2_DEST}
|
|
COMMENT "Copying PicoMite.uf2 to top-level build dir"
|
|
)
|
|
|
|
|
|
add_custom_target(PREPARE_PicoMite
|
|
COMMENT "Create Linker Script for 'PicoMite'"
|
|
COMMAND ${Python3_EXECUTABLE}
|
|
${CMAKE_SOURCE_DIR}/applink.py PREPARE
|
|
${CMAKE_BINARY_DIR}
|
|
PicoMite)
|
|
|
|
add_custom_target(BUILT_PicoMite
|
|
COMMENT "Record Build Details for 'PicoMite'"
|
|
DEPENDS ${UF2_DEST}
|
|
COMMAND ${Python3_EXECUTABLE}
|
|
${CMAKE_SOURCE_DIR}/applink.py BUILT
|
|
${CMAKE_BINARY_DIR}
|
|
PicoMite)
|
|
|