From d5760d02a699f7cdc81b69f3db57ffe7157b407c Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 2 Apr 2023 23:46:40 -0400 Subject: [PATCH] some relative/abs keymap folder stuff --- CMakeLists.txt | 33 +++++++++++++++++++++++++++------ cmake/AddKeyboard.cmake | 23 ++++++++++++++++++----- keyboards/CMakeLists.txt | 7 +++++-- 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ebe05847287..7d16ccffff6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,20 +34,38 @@ endwhile() file(READ keyboards/${QMK_KEYBOARD_FOLDER}/info.json QMK_KEYBOARD_INFO_JSON_STRING) string(JSON KEYBOARD_NAME GET ${QMK_KEYBOARD_INFO_JSON_STRING} keyboard_name) string(JSON MANUFACTURER GET ${QMK_KEYBOARD_INFO_JSON_STRING} manufacturer) +string(JSON URL GET ${QMK_KEYBOARD_INFO_JSON_STRING} url) string(JSON QMK_MCU GET ${QMK_KEYBOARD_INFO_JSON_STRING} processor) string(JSON VENDOR_ID GET ${QMK_KEYBOARD_INFO_JSON_STRING} usb vid) string(JSON PRODUCT_ID GET ${QMK_KEYBOARD_INFO_JSON_STRING} usb pid) string(JSON DEVICE_VER GET ${QMK_KEYBOARD_INFO_JSON_STRING} usb device_version) +if(NOT DEFINED QMK_KEYMAP_FOLDER) + set(QMK_KEYMAP_FOLDER "default") +endif() + +set(TEMP_PATH ${QMK_KEYMAP_FOLDER}) +cmake_path(IS_RELATIVE TEMP_PATH IS_KEYMAP_FOLDER_RELATIVE) + +if(NOT ${IS_KEYMAP_FOLDER_RELATIVE}) + if(EXISTS "${QMK_KEYMAP_FOLDER}/keymap.c") + set(QMK_KEYBOARD_KEYMAP "${QMK_KEYMAP_FOLEDR}/keymap.c") + else() + message(FATAL_ERROR "Could not find keymap.c in keymap folder") + endif() +endif() + foreach(FOLDER ${QMK_KEYBOARD_FOLDERS}) include_directories(${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}) # assuming every keyboard has a config at some level if(EXISTS ${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/config.h) list(APPEND QMK_KEYBOARD_CONFIG_HS "${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/config.h") endif() - # assuming every keyboard has a default/keymap.c at some level - if(EXISTS ${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/keymaps/default/keymap.c) - list(APPEND QMK_KEYBOARD_KEYMAPS "${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/keymaps/default/keymap.c") + if(${IS_KEYMAP_FOLDER_RELATIVE}) + # assuming every keyboard has a default/keymap.c at some level + if(EXISTS ${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/keymaps/${QMK_KEYMAP_FOLDER}/keymap.c) + list(APPEND QMK_KEYBOARD_KEYMAPS "${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/keymaps/${QMK_KEYMAP_FOLDER}/keymap.c") + endif() endif() get_filename_component(LAST_PART ${FOLDER} NAME) # assuming every keyboard has a header.h at some level @@ -67,8 +85,11 @@ foreach(FOLDER ${QMK_KEYBOARD_FOLDERS}) # endif() endforeach() -if(NOT DEFINED QMK_KEYBOARD_KEYMAPS) - message(FATAL_ERROR "Keymap not found") +if(${IS_KEYMAP_FOLDER_RELATIVE}) + if(NOT DEFINED QMK_KEYBOARD_KEYMAPS) + message(FATAL_ERROR "Keymap not found") + endif() + list(GET QMK_KEYBOARD_KEYMAPS 0 QMK_KEYBOARD_KEYMAP) endif() if(NOT DEFINED QMK_KEYBOARD_HEADERS) @@ -76,11 +97,11 @@ if(NOT DEFINED QMK_KEYBOARD_HEADERS) endif() # list(GET QMK_KEYBOARD_FOLDERS 0 QMK_KEYBOARD_BASE_FOLDER) -list(GET QMK_KEYBOARD_KEYMAPS 0 QMK_KEYBOARD_KEYMAP) list(GET QMK_KEYBOARD_HEADERS -1 QMK_KEYBOARD_HEADER) project(${QMK_KEYBOARD} LANGUAGES C CXX ASM + HOMEPAGE_URL ${URL} VERSION ${DEVICE_VER}) string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" VERSION_MATCH ${DEVICE_VER}) diff --git a/cmake/AddKeyboard.cmake b/cmake/AddKeyboard.cmake index d7267bf0113..2ac4d13cb07 100644 --- a/cmake/AddKeyboard.cmake +++ b/cmake/AddKeyboard.cmake @@ -1,8 +1,8 @@ -macro(add_keyboard KEYBOARD_FOLDER) +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_FOLDER_RELATIVE) - if(${IS_FOLDER_RELATIVE}) + 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") @@ -13,6 +13,18 @@ macro(add_keyboard KEYBOARD_FOLDER) 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") @@ -36,14 +48,14 @@ macro(add_keyboard KEYBOARD_FOLDER) message(FATAL_ERROR "Could not find platform for ${KEYBOARD_FOLDER}") endif() - if(${IS_FOLDER_RELATIVE}) + 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} + 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 @@ -61,5 +73,6 @@ macro(add_keyboard KEYBOARD_FOLDER) -DMAKE_ROOT=${MAKE_ROOT} -DQMK_KEYBOARD=${KEYBOARD_NAME} -DQMK_KEYBOARD_FOLDER=${KEYBOARD_FOLDER} + -DQMK_KEYMAP_FOLDER=${KEYMAP_FOLDER} ) endmacro(add_keyboard) \ No newline at end of file diff --git a/keyboards/CMakeLists.txt b/keyboards/CMakeLists.txt index 8b79151c29f..b1c78db466f 100644 --- a/keyboards/CMakeLists.txt +++ b/keyboards/CMakeLists.txt @@ -2,7 +2,10 @@ include(ExternalProject) include(AddKeyboard) if(DEFINED QMK_KEYBOARD_FOLDER) - add_keyboard(${QMK_KEYBOARD_FOLDER}) + if(NOT DEFINED QMK_KEYMAP_FOLDER) + set(QMK_KEYMAP_FOLDER "default") + endif() + add_keyboard(${QMK_KEYBOARD_FOLDER} ${QMK_KEYMAP_FOLDER}) endif() file(GLOB_RECURSE KEYBOARDS **/CMakeLists.txt) @@ -10,5 +13,5 @@ file(GLOB_RECURSE KEYBOARDS **/CMakeLists.txt) foreach(KEYBOARD_CMAKE ${KEYBOARDS}) get_filename_component(KEYBOARD_FOLDER_ABS "${KEYBOARD_CMAKE}" DIRECTORY) file(RELATIVE_PATH KEYBOARD_FOLDER "${CMAKE_SOURCE_DIR}/keyboards" "${KEYBOARD_FOLDER_ABS}") - add_keyboard(${KEYBOARD_FOLDER}) + add_keyboard(${KEYBOARD_FOLDER} "default") endforeach() \ No newline at end of file