| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- macro(add_keyboard KEYBOARD_FOLDER KEYMAP_FOLDER)
- # not entirely sure why this is necessary
- set(TEMP_PATH ${KEYBOARD_FOLDER})
- cmake_path(IS_RELATIVE TEMP_PATH IS_KEYBOARD_FOLDER_RELATIVE)
- if(${IS_KEYBOARD_FOLDER_RELATIVE})
- set(KEYBOARD_FOLDER_ABS ${CMAKE_SOURCE_DIR}/keyboards/${KEYBOARD_FOLDER})
- if(NOT EXISTS ${KEYBOARD_FOLDER_ABS})
- message(FATAL_ERROR "Keyboard does not exist in QMK - try using an absolute path to the keyboard folder")
- endif()
- else()
- set(KEYBOARD_FOLDER_ABS ${KEYBOARD_FOLDER})
- if(NOT EXISTS ${KEYBOARD_FOLDER_ABS})
- message(FATAL_ERROR "Absolute path to keyboard does not exist")
- endif()
- endif()
-
- set(TEMP_PATH ${KEYMAP_FOLDER})
- cmake_path(IS_RELATIVE TEMP_PATH IS_KEYMAP_FOLDER_RELATIVE)
- if(${IS_KEYMAP_FOLDER_RELATIVE})
- set(KEYMAP_NAME ${KEYMAP_FOLDER})
- else()
- if(WIN32)
- set(KEYMAP_NAME $ENV{USERNAME})
- else()
- set(KEYMAP_NAME $ENV{USE})
- endif()
- endif()
- # find the right toolchain
-
- # not sure we need to validate here
- include(ValidateJSON)
- validate_json(${KEYBOARD_FOLDER_ABS}/info.json keyboard JSON_STRING)
- string(JSON PROCESSOR GET ${JSON_STRING} processor)
- if(${PROCESSOR} MATCHES "^at.*")
- set(PLATFORM "avr")
- include(FindAVRToolchain)
- find_avr_toolchain()
- elseif(
- ${PROCESSOR} MATCHES "^STM.*" OR
- ${PROCESSOR} MATCHES "^WB32.*" OR
- ${PROCESSOR} MATCHES "^MK.*" OR
- ${PROCESSOR} MATCHES "RP2040" OR
- ${PROCESSOR} MATCHES "^GD32.*")
- set(PLATFORM "chibios")
- include(FindARMToolchain)
- find_arm_toolchain()
- endif()
- if(NOT DEFINED PLATFORM)
- message(FATAL_ERROR "Could not find platform for ${KEYBOARD_FOLDER}")
- endif()
- if(${IS_KEYBOARD_FOLDER_RELATIVE})
- string(REPLACE "/" "_" KEYBOARD_NAME ${KEYBOARD_FOLDER})
- else()
- string(JSON KEYBOARD_NAME GET ${JSON_STRING} keyboard_name)
- string(REPLACE " " "_" KEYBOARD_NAME ${KEYBOARD_NAME})
- endif()
- ExternalProject_Add(${KEYBOARD_NAME}_${KEYMAP_NAME}
- SOURCE_DIR ${CMAKE_SOURCE_DIR}
- PREFIX ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}
- TMP_DIR ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}/tmp
- DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}/Download
- BINARY_DIR ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}/Build
- STAMP_DIR ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}/Stamp
- LOG_DIR ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}/Log
- INSTALL_DIR ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}/Install
- INSTALL_COMMAND cmake -E echo "No install needed"
- # this seems to work well for all systems so far - not sure if it'd be useful to customize
- CMAKE_GENERATOR "Unix Makefiles"
- CMAKE_ARGS
- -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/platforms/${PLATFORM}/toolchain.cmake
- -DTOOLCHAIN_ROOT=${TOOLCHAIN_ROOT}
- -DMAKE_ROOT=${MAKE_ROOT}
- -DQMK_KEYBOARD=${KEYBOARD_NAME}
- -DQMK_KEYBOARD_FOLDER=${KEYBOARD_FOLDER}
- -DQMK_KEYMAP_FOLDER=${KEYMAP_FOLDER}
- )
- endmacro(add_keyboard)
|