78 lines
3.0 KiB
CMake
78 lines
3.0 KiB
CMake
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
|
|
message(STATUS "Reading config from ${KEYBOARD_FOLDER_ABS}/info.json")
|
|
file(READ ${KEYBOARD_FOLDER_ABS}/info.json 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) |