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()