mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-02 22:12:05 +00:00
42 lines
2.1 KiB
CMake
42 lines
2.1 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() |