mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-03-04 10:48:52 +00:00
more absolute keyboard/keymap support
This commit is contained in:
parent
2ebad0d33f
commit
4d999378d0
149
CMakeLists.txt
149
CMakeLists.txt
@ -20,27 +20,8 @@ else()
|
||||
|
||||
# build step
|
||||
|
||||
set(QMK_KEYBOARD_CURRENT_FOLDER ${QMK_KEYBOARD_FOLDER})
|
||||
set(QMK_KEYBOARD_FOLDERS)
|
||||
set(QMK_KEYBOARD_FOLDER_PARTS)
|
||||
while(NOT ${QMK_KEYBOARD_CURRENT_FOLDER} STREQUAL "")
|
||||
get_filename_component(QMK_KEYBOARD_CURRENT_PART ${QMK_KEYBOARD_CURRENT_FOLDER} NAME)
|
||||
list(PREPEND QMK_KEYBOARD_FOLDER_PARTS ${QMK_KEYBOARD_CURRENT_PART})
|
||||
list(PREPEND QMK_KEYBOARD_FOLDERS ${QMK_KEYBOARD_CURRENT_FOLDER})
|
||||
get_filename_component(QMK_KEYBOARD_CURRENT_FOLDER ${QMK_KEYBOARD_CURRENT_FOLDER} DIRECTORY)
|
||||
endwhile()
|
||||
|
||||
# would be nice to also do validation here
|
||||
include(ValidateJSON)
|
||||
validate_json(keyboards/${QMK_KEYBOARD_FOLDER}/info.json keyboard 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)
|
||||
set(TEMP_PATH ${QMK_KEYBOARD_FOLDER})
|
||||
cmake_path(IS_RELATIVE TEMP_PATH IS_KEYBOARD_FOLDER_RELATIVE)
|
||||
|
||||
if(NOT DEFINED QMK_KEYMAP_FOLDER)
|
||||
set(QMK_KEYMAP_FOLDER "default")
|
||||
@ -49,57 +30,99 @@ 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()
|
||||
if(${IS_KEYBOARD_FOLDER_RELATIVE})
|
||||
set(QMK_KEYBOARD_FOLDER_ABS ${CMAKE_SOURCE_DIR}/keyboards/${QMK_KEYBOARD_FOLDER})
|
||||
set(QMK_KEYBOARD_CURRENT_FOLDER ${QMK_KEYBOARD_FOLDER})
|
||||
set(QMK_KEYBOARD_FOLDERS)
|
||||
set(QMK_KEYBOARD_FOLDER_PARTS)
|
||||
while(NOT ${QMK_KEYBOARD_CURRENT_FOLDER} STREQUAL "")
|
||||
get_filename_component(QMK_KEYBOARD_CURRENT_PART ${QMK_KEYBOARD_CURRENT_FOLDER} NAME)
|
||||
list(PREPEND QMK_KEYBOARD_FOLDER_PARTS ${QMK_KEYBOARD_CURRENT_PART})
|
||||
list(PREPEND QMK_KEYBOARD_FOLDERS ${QMK_KEYBOARD_CURRENT_FOLDER})
|
||||
get_filename_component(QMK_KEYBOARD_CURRENT_FOLDER ${QMK_KEYBOARD_CURRENT_FOLDER} DIRECTORY)
|
||||
endwhile()
|
||||
|
||||
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()
|
||||
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
|
||||
if(EXISTS ${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/${LAST_PART}.h)
|
||||
# use just the filename, since the folder is already in our include path (maybe it should only be the base keyboard folder?)
|
||||
list(APPEND QMK_KEYBOARD_HEADERS "${LAST_PART}.h")
|
||||
endif()
|
||||
# not sure if merging is needed, since info.json is required per level? iirc
|
||||
# if(EXISTS keyboards/${FOLDER}/info.json)
|
||||
# file(READ keyboards/${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 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)
|
||||
# endif()
|
||||
endforeach()
|
||||
|
||||
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()
|
||||
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")
|
||||
if(NOT DEFINED QMK_KEYBOARD_KEYMAPS)
|
||||
message(FATAL_ERROR "Keymap not found")
|
||||
endif()
|
||||
list(GET QMK_KEYBOARD_KEYMAPS 0 QMK_KEYBOARD_KEYMAP)
|
||||
else()
|
||||
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()
|
||||
get_filename_component(LAST_PART ${FOLDER} NAME)
|
||||
# assuming every keyboard has a header.h at some level
|
||||
if(EXISTS ${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/${LAST_PART}.h)
|
||||
# use just the filename, since the folder is already in our include path (maybe it should only be the base keyboard folder?)
|
||||
list(APPEND QMK_KEYBOARD_HEADERS "${LAST_PART}.h")
|
||||
endif()
|
||||
# not sure if merging is needed, since info.json is required per level? iirc
|
||||
# if(EXISTS keyboards/${FOLDER}/info.json)
|
||||
# file(READ keyboards/${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 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)
|
||||
# endif()
|
||||
endforeach()
|
||||
|
||||
if(${IS_KEYMAP_FOLDER_RELATIVE})
|
||||
if(NOT DEFINED QMK_KEYBOARD_KEYMAPS)
|
||||
message(FATAL_ERROR "Keymap not found")
|
||||
if(NOT DEFINED QMK_KEYBOARD_HEADERS)
|
||||
message(FATAL_ERROR "Header not found")
|
||||
endif()
|
||||
|
||||
list(GET QMK_KEYBOARD_HEADERS -1 QMK_KEYBOARD_HEADER)
|
||||
else(${IS_KEYBOARD_FOLDER_RELATIVE})
|
||||
set(QMK_KEYBOARD_FOLDER_ABS ${QMK_KEYBOARD_FOLDER})
|
||||
|
||||
if(${IS_KEYMAP_FOLDER_RELATIVE})
|
||||
if(EXISTS "${QMK_KEYBOARD_FOLDER}/keymaps/${QMK_KEYMAP_FOLDER}/keymap.c")
|
||||
set(QMK_KEYBOARD_KEYMAP "${QMK_KEYBOARD_FOLDER}/keymaps/{QMK_KEYMAP_FOLDER}/keymap.c")
|
||||
else()
|
||||
message(FATAL_ERROR "Could not find keymap in keymap folder '${QMK_KEYMAP_FOLDER}'")
|
||||
endif()
|
||||
else()
|
||||
if(EXISTS "${QMK_KEYMAP_FOLDER}/keymap.c")
|
||||
set(QMK_KEYBOARD_KEYMAP "{QMK_KEYMAP_FOLDER}/keymap.c")
|
||||
else()
|
||||
message(FATAL_ERROR "Could not find keymap in keymap folder '${QMK_KEYMAP_FOLDER}'")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED QMK_KEYBOARD_HEADER)
|
||||
get_filename_component((LAST_PART ${QMK_KEYBOARD_FOLDER}) NAME)
|
||||
set(QMK_KEYBOARD_HEADER "${LAST_PART}.h")
|
||||
endif()
|
||||
list(GET QMK_KEYBOARD_KEYMAPS 0 QMK_KEYBOARD_KEYMAP)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED QMK_KEYBOARD_HEADERS)
|
||||
message(FATAL_ERROR "Header not found")
|
||||
endif()
|
||||
include(ValidateJSON)
|
||||
validate_json(${QMK_KEYBOARD_FOLDER_ABS}/info.json keyboard QMK_KEYBOARD_INFO_JSON_STRING)
|
||||
|
||||
# list(GET QMK_KEYBOARD_FOLDERS 0 QMK_KEYBOARD_BASE_FOLDER)
|
||||
list(GET QMK_KEYBOARD_HEADERS -1 QMK_KEYBOARD_HEADER)
|
||||
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)
|
||||
|
||||
project(${QMK_KEYBOARD}
|
||||
LANGUAGES C CXX ASM
|
||||
|
@ -27,7 +27,7 @@ macro(add_keyboard KEYBOARD_FOLDER KEYMAP_FOLDER)
|
||||
endif()
|
||||
|
||||
# find the right toolchain
|
||||
|
||||
|
||||
# not sure we need to validate here
|
||||
include(ValidateJSON)
|
||||
validate_json(${KEYBOARD_FOLDER_ABS}/info.json keyboard JSON_STRING)
|
||||
@ -52,10 +52,10 @@ macro(add_keyboard KEYBOARD_FOLDER KEYMAP_FOLDER)
|
||||
endif()
|
||||
|
||||
if(${IS_KEYBOARD_FOLDER_RELATIVE})
|
||||
string(REPLACE "/" "_" KEYBOARD_NAME ${KEYBOARD_FOLDER})
|
||||
string(MAKE_C_IDENTIFIER ${KEYBOARD_FOLDER} KEYBOARD_NAME)
|
||||
else()
|
||||
string(JSON KEYBOARD_NAME GET ${JSON_STRING} keyboard_name)
|
||||
string(REPLACE " " "_" KEYBOARD_NAME ${KEYBOARD_NAME})
|
||||
string(MAKE_C_IDENTIFIER ${KEYBOARD_NAME} KEYBOARD_NAME)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(${KEYBOARD_NAME}_${KEYMAP_NAME}
|
||||
|
Loading…
Reference in New Issue
Block a user