diff --git a/cmake/boards.cmake b/cmake/boards.cmake new file mode 100644 index 0000000..a6145a2 --- /dev/null +++ b/cmake/boards.cmake @@ -0,0 +1,70 @@ +include(pico-keys-sdk/cmake/dict.cmake) + +dict(SET led_driver 0xcb_helios led_ws2812) +dict(SET led_driver adafruit_feather_rp2040_usb_host led_pico) +dict(SET led_driver adafruit_feather_rp2040 led_ws2812) +dict(SET led_driver adafruit_itsybitsy_rp2040 led_ws2812) +dict(SET led_driver adafruit_kb2040 led_ws2812) +dict(SET led_driver adafruit_macropad_rp2040 led_ws2812) +dict(SET led_driver adafruit_qtpy_rp2040 led_ws2812) +dict(SET led_driver adafruit_trinkey_qt2040 led_ws2812) +dict(SET led_driver amethyst_fpga led_pico) +dict(SET led_driver archi led_ws2812) +dict(SET led_driver arduino_nano_rp2040_connect led_pico) +dict(SET led_driver cytron_maker_pi_rp2040 led_ws2812) +dict(SET led_driver datanoisetv_rp2040_dsp led_pico) +dict(SET led_driver eetree_gamekit_rp2040 led_pico) +dict(SET led_driver garatronic_pybstick26_rp2040 led_pico) +dict(SET led_driver ilabs_challenger_rp2350_bconnect led_ws2812) +dict(SET led_driver ilabs_challenger_rp2350_wifi_ble led_pico) +dict(SET led_driver ilabs_opendec02 led_pico) +dict(SET led_driver melopero_perpetuo_rp2350_lora led_pico) +dict(SET led_driver melopero_shake_rp2040 led_ws2812) +dict(SET led_driver metrotech_xerxes_rp2040 led_pico) +dict(SET led_driver net8086_usb_interposer led_pico) +dict(SET led_driver nullbits_bit_c_pro led_pico) # rgb +dict(SET led_driver phyx_rick_tny_rp2350 led_ws2812) +dict(SET led_driver pi-plates_micropi led_pico) +dict(SET led_driver pico led_pico) +dict(SET led_driver pico_w led_cyw43) +dict(SET led_driver pico2 led_pico) +dict(SET led_driver pimoroni_badger2040 led_pico) +dict(SET led_driver pimoroni_interstate75 led_pico) # rgb +dict(SET led_driver pimoroni_motor2040 led_ws2812) +dict(SET led_driver pimoroni_pga2350 led_pico) +dict(SET led_driver pimoroni_pico_plus2_rp2350 led_pico) +dict(SET led_driver pimoroni_picolipo_4mb led_pico) +dict(SET led_driver pimoroni_picolipo_16mb led_pico) +dict(SET led_driver pimoroni_picosystem led_pico) # rgb +dict(SET led_driver pimoroni_plasma2040 led_pico) # rgb +dict(SET led_driver pimoroni_plasma2350 led_pico) # rgb +dict(SET led_driver pimoroni_servo2040 led_ws2812) +dict(SET led_driver pimoroni_tiny2040 led_pimoroni) +dict(SET led_driver pimoroni_tiny2040_2mb led_pimoroni) +dict(SET led_driver pimoroni_tiny2350 led_pimoroni) +dict(SET led_driver pololu_3pi_2040_robot led_pico) +dict(SET led_driver pololu_zumo_2040_robot led_pico) +dict(SET led_driver seeed_xiao_rp2040 led_ws2812) +dict(SET led_driver seeed_xiao_rp2350 led_ws2812) +dict(SET led_driver solderparty_rp2040_stamp led_ws2812) +dict(SET led_driver solderparty_rp2040_stamp_carrier led_ws2812) +dict(SET led_driver solderparty_rp2040_stamp_round_carrier led_ws2812) +dict(SET led_driver sparkfun_micromod led_pico) +dict(SET led_driver sparkfun_promicro led_ws2812) +dict(SET led_driver sparkfun_promicro_rp2350 led_ws2812) +dict(SET led_driver sparkfun_thingplus led_ws2812) +dict(SET led_driver switchscience_picossci2_conta_base led_pico) +dict(SET led_driver switchscience_picossci2_dev_board led_pico) +dict(SET led_driver switchscience_picossci2_rp2350_breakout led_pico) +dict(SET led_driver switchscience_picossci2_tiny led_pico) +dict(SET led_driver tinycircuits_thumby_color_rp2350 led_pico) +dict(SET led_driver vgaboard led_pico) +dict(SET led_driver waveshare_rp2040_one led_ws2812) +dict(SET led_driver waveshare_rp2040_plus_4mb led_pico) +dict(SET led_driver waveshare_rp2040_plus_16mb led_pico) +dict(SET led_driver waveshare_rp2040_zero led_ws2812) +dict(SET led_driver weact_studio_rp2040_2mb led_pico) +dict(SET led_driver weact_studio_rp2040_4mb led_pico) +dict(SET led_driver weact_studio_rp2040_8mb led_pico) +dict(SET led_driver weact_studio_rp2040_16mb led_pico) +dict(SET led_driver wiznet_w5100s_evb_pico led_pico) diff --git a/cmake/dict.cmake b/cmake/dict.cmake new file mode 100644 index 0000000..69a7bb6 --- /dev/null +++ b/cmake/dict.cmake @@ -0,0 +1,44 @@ +function(dict command dict ) + if(command STREQUAL SET) + set(arg_key ${ARGV2}) + set(arg_value ${ARGV3}) + + dict(_IDX ${dict} "${arg_key}" idx) + if(NOT idx STREQUAL -1) + list(REMOVE_AT ${dict} ${idx}) + endif() + + list(APPEND ${dict} "${arg_key}=${arg_value}") + set(${dict} "${${dict}}" PARENT_SCOPE) + + elseif(command STREQUAL GET) + set(arg_key ${ARGV2}) + set(arg_outvar ${ARGV3}) + + dict(_IDX ${dict} "${arg_key}" idx) + if(idx STREQUAL -1) + message(FATAL_ERROR "No key \"${arg_key}\" in dictionary") + endif() + + list(GET ${dict} ${idx} kv) + string(REGEX REPLACE "^[^=]+=(.*)" "\\1" value "${kv}") + set(${arg_outvar} "${value}" PARENT_SCOPE) + + elseif(command STREQUAL _IDX) + set(arg_key ${ARGV2}) + set(arg_outvar ${ARGV3}) + set(idx 0) + foreach(kv IN LISTS ${dict}) + string(REGEX REPLACE "^([^=]+)=.*" "\\1" key "${kv}") + if(arg_key STREQUAL key) + set(${arg_outvar} "${idx}" PARENT_SCOPE) + return() + endif() + math(EXPR idx ${idx}+1) + endforeach() + set(${arg_outvar} "-1" PARENT_SCOPE) + + else() + message(FATAL_ERROR "dict does not recognize sub-command ${command}") + endif() +endfunction() diff --git a/cmake/version.cmake b/cmake/version.cmake new file mode 100644 index 0000000..94e9470 --- /dev/null +++ b/cmake/version.cmake @@ -0,0 +1,49 @@ + +macro(HEXCHAR2DEC VAR VAL) + if(${VAL} MATCHES "[0-9]") + SET(${VAR} ${VAL}) + elseif(${VAL} MATCHES "[aA]") + SET(${VAR} 10) + elseif(${VAL} MATCHES "[bB]") + SET(${VAR} 11) + elseif(${VAL} MATCHES "[cC]") + SET(${VAR} 12) + elseif(${VAL} MATCHES "[dD]") + SET(${VAR} 13) + elseif(${VAL} MATCHES "[eE]") + SET(${VAR} 14) + elseif(${VAL} MATCHES "[fF]") + SET(${VAR} 15) + else() + MESSAGE(FATAL_ERROR "Invalid format for hexidecimal character") + endif() +endmacro(HEXCHAR2DEC) + +macro(HEX2DEC VAR VAL) + SET(CURINDEX 0) + STRING(LENGTH "${VAL}" CURLENGTH) + SET(${VAR} 0) + while(CURINDEX LESS CURLENGTH) + STRING(SUBSTRING "${VAL}" ${CURINDEX} 1 CHAR) + HEXCHAR2DEC(CHAR ${CHAR}) + MATH(EXPR POWAH "(1<<((${CURLENGTH}-${CURINDEX}-1)*4))") + MATH(EXPR CHAR "(${CHAR}*${POWAH})") + MATH(EXPR ${VAR} "${${VAR}}+${CHAR}") + MATH(EXPR CURINDEX "${CURINDEX}+1") + endwhile() +endmacro(HEX2DEC) + +macro(SET_VERSION MAJOR MINOR FILE) + file(READ ${FILE} ver) + string(REGEX MATCHALL "0x([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])" _ ${ver}) + string(CONCAT ver_major ${CMAKE_MATCH_1}${CMAKE_MATCH_2}) + string(CONCAT ver_minor ${CMAKE_MATCH_3}${CMAKE_MATCH_4}) + HEX2DEC(ver_major ${ver_major}) + HEX2DEC(ver_minor ${ver_minor}) + message(STATUS "Found version: ${ver_major}.${ver_minor}") + if(NOT ENABLE_EMULATION AND NOT ESP_PLATFORM) + pico_set_binary_version(${CMAKE_PROJECT_NAME} MAJOR ${ver_major} MINOR ${ver_minor}) + endif() + SET(${MAJOR} ${ver_major}) + SET(${MINOR} ${ver_minor}) +endmacro(SET_VERSION)