mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-05 07:22:06 +00:00
116 lines
5.8 KiB
CMake
116 lines
5.8 KiB
CMake
function(resolve_keyboard KEYBOARD KEYBOAD_FOLDER_ABS_STR)
|
|
message(STATUS "Resolving ${KEYBOARD}")
|
|
if(EXISTS "${CMAKE_SOURCE_DIR}/keyboards/${KEYBOARD}")
|
|
message(STATUS "Found in repo: ${KEYBOARD}")
|
|
set(${KEYBOAD_FOLDER_ABS_STR} "${CMAKE_SOURCE_DIR}/keyboards/${KEYBOARD}" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
if(EXISTS "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}")
|
|
message(STATUS "Already checked out: ${KEYBOARD}")
|
|
set(${KEYBOAD_FOLDER_ABS_STR} "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
file(READ ${CMAKE_SOURCE_DIR}/data/keyboards.json KEYBOARDS_JSON)
|
|
string(JSON KEYBOARD_SLUG ERROR_VARIABLE JSON_ERROR GET ${KEYBOARDS_JSON} ${KEYBOARD})
|
|
if(${JSON_ERROR} STREQUAL "NOTFOUND")
|
|
message(STATUS "Found ${KEYBOARD_SLUG}")
|
|
if(${KEYBOARD_SLUG} MATCHES "^@([0-9a-zA-Z_]+/[0-9a-zA-Z_]+)")
|
|
# keyboard slug is mapped to a github repo
|
|
set(GIT_SLUG ${CMAKE_MATCH_1})
|
|
# string(MAKE_C_IDENTIFIER ${KEYBOARD} KEYBOARD_NAME)
|
|
message(STATUS "Cloning ${GIT_SLUG}")
|
|
find_package(Git QUIET)
|
|
if(GIT_FOUND)
|
|
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}")
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} clone "https://github.com/${GIT_SLUG}.git" .
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}"
|
|
RESULT_VARIABLE GIT_SUBMOD_RESULT)
|
|
if(NOT GIT_SUBMOD_RESULT EQUAL "0")
|
|
message(FATAL_ERROR "git clone failed with ${GIT_SUBMOD_RESULT}")
|
|
endif()
|
|
else()
|
|
message("Git not found - skipping submodule update")
|
|
endif()
|
|
set(${KEYBOAD_FOLDER_ABS_STR} "${CMAKE_SOURCE_DIR}/build/keyboard_repository/${KEYBOARD}" PARENT_SCOPE)
|
|
else()
|
|
message(FATAL_ERROR "Didn't match")
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "Couldn't find")
|
|
# set(${RESULT_STR} "NOTFOUND" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
function(resolve_config_h KEYBOARD_FOLDER_ABS CONFIG_H_STR)
|
|
if(${IS_KEYBOARDS_FOLDER})
|
|
file(RELATIVE_PATH RELATIVE_KEYBOARD_FOLDER ${QMK_KEYBOARDS_FOLDER} ${KEYBOARD_FOLDER_ABS})
|
|
# get the deepest config.h
|
|
while(NOT ${RELATIVE_KEYBOARD_FOLDER} STREQUAL "")
|
|
if(EXISTS "${QMK_KEYBOARDS_FOLDER}/${RELATIVE_KEYBOARD_FOLDER}/config.h")
|
|
set(${CONFIG_H_STR} "${QMK_KEYBOARDS_FOLDER}/${RELATIVE_KEYBOARD_FOLDER}/config.h" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
get_filename_component(RELATIVE_KEYBOARD_FOLDER ${RELATIVE_KEYBOARD_FOLDER} DIRECTORY)
|
|
endwhile()
|
|
message(FATAL_ERROR "Could not find config.h in ${KEYBOARD_FOLDER_ABS}")
|
|
else()
|
|
if(EXISTS "${KEYBOARD_FOLDER_ABS}/config.h")
|
|
set(${CONFIG_H_STR} "${KEYBOARD_FOLDER_ABS}/config.h" PARENT_SCOPE)
|
|
else()
|
|
message(FATAL_ERROR "Could not find config.h in ${KEYBOARD_FOLDER_ABS}")
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
function(resolve_keyboard_h KEYBOARD_FOLDER_ABS KEYBOARD_H_STR)
|
|
if(${IS_KEYBOARDS_FOLDER})
|
|
file(RELATIVE_PATH RELATIVE_KEYBOARD_FOLDER ${QMK_KEYBOARDS_FOLDER} ${KEYBOARD_FOLDER_ABS})
|
|
# get the deepest header
|
|
while(NOT ${RELATIVE_KEYBOARD_FOLDER} STREQUAL "")
|
|
get_filename_component(LAST_PART ${RELATIVE_KEYBOARD_FOLDER} NAME)
|
|
if(EXISTS "${QMK_KEYBOARDS_FOLDER}/${RELATIVE_KEYBOARD_FOLDER}/${LAST_PART}.h")
|
|
set(${KEYBOARD_H_STR} "${QMK_KEYBOARDS_FOLDER}/${RELATIVE_KEYBOARD_FOLDER}/${LAST_PART}.h" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
get_filename_component(RELATIVE_KEYBOARD_FOLDER ${RELATIVE_KEYBOARD_FOLDER} DIRECTORY)
|
|
endwhile()
|
|
message(FATAL_ERROR "Could not find *.h in ${KEYBOARD_FOLDER_ABS}")
|
|
else()
|
|
if(EXISTS "${KEYBOARD_FOLDER_ABS}/keyboard.h")
|
|
set(${KEYBOARD_H_STR} "${KEYBOARD_FOLDER_ABS}/keyboard.h" PARENT_SCOPE)
|
|
else()
|
|
message(FATAL_ERROR "Could not find keyboard.h in ${KEYBOARD_FOLDER_ABS}")
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
function(resolve_keymap_c KEYBOARD_FOLDER_ABS KEYMAP_FOLDER KEYMAP_C_STR)
|
|
if(IS_ABSOLUTE ${KEYMAP_FOLDER})
|
|
if(EXISTS "${KEYMAP_FOLDER}/keymap.c")
|
|
set(${KEYMAP_C_STR} "${KEYMAP_FOLDER}/keymap.c" PARENT_SCOPE)
|
|
else()
|
|
message(FATAL_ERROR "Could not find keymap.c in ${KEYMAP_FOLDER}")
|
|
endif()
|
|
else()
|
|
if(${IS_KEYBOARDS_FOLDER})
|
|
file(RELATIVE_PATH RELATIVE_KEYBOARD_FOLDER ${QMK_KEYBOARDS_FOLDER} ${KEYBOARD_FOLDER_ABS})
|
|
# get the deepest keymap.c
|
|
while(NOT ${RELATIVE_KEYBOARD_FOLDER} STREQUAL "")
|
|
if(EXISTS "${QMK_KEYBOARDS_FOLDER}/${RELATIVE_KEYBOARD_FOLDER}/keymaps/${KEYMAP_FOLDER}/keymap.c")
|
|
set(${KEYMAP_C_STR} "${QMK_KEYBOARDS_FOLDER}/${RELATIVE_KEYBOARD_FOLDER}/keymaps/${KEYMAP_FOLDER}/keymap.c" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
get_filename_component(RELATIVE_KEYBOARD_FOLDER ${RELATIVE_KEYBOARD_FOLDER} DIRECTORY)
|
|
endwhile()
|
|
message(FATAL_ERROR "Could not find keymap.c in ${KEYBOARD_FOLDER_ABS}")
|
|
else()
|
|
if(EXISTS "${KEYBOARD_FOLDER_ABS}/keymap.c")
|
|
set(${KEYMAP_C_STR} "${KEYBOARD_FOLDER_ABS}/keymap.c" PARENT_SCOPE)
|
|
elseif(EXISTS "${KEYBOARD_FOLDER_ABS}/keymaps/${KEYMAP_FOLDER}/keymap.c")
|
|
set(${KEYMAP_C_STR} "${KEYBOARD_FOLDER_ABS}/keymaps/${KEYMAP_FOLDER}/keymap.c" PARENT_SCOPE)
|
|
else()
|
|
message(FATAL_ERROR "Could not find keymap.c in ${KEYBOARD_FOLDER_ABS}")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endfunction() |