| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- include(Utils)
- function(resolve_keyboard KEYBOARD KEYBOAD_FOLDER_ABS_STR)
- message(VERBOSE "Resolving ${KEYBOARD}")
- if(EXISTS "${CMAKE_SOURCE_DIR}/keyboards/${KEYBOARD}")
- message(VERBOSE "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(VERBOSE "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(VERBOSE "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(VERBOSE "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)
- set(${CONFIG_H_STR} PARENT_SCOPE)
- 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")
- parent_list(PREPEND ${CONFIG_H_STR} "${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)
- return()
- 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()
- else()
- if(EXISTS "${KEYBOARD_FOLDER_ABS}/keymap.c")
- set(${KEYMAP_C_STR} "${KEYBOARD_FOLDER_ABS}/keymap.c" PARENT_SCOPE)
- return()
- elseif(EXISTS "${KEYBOARD_FOLDER_ABS}/keymaps/${KEYMAP_FOLDER}/keymap.c")
- set(${KEYMAP_C_STR} "${KEYBOARD_FOLDER_ABS}/keymaps/${KEYMAP_FOLDER}/keymap.c" PARENT_SCOPE)
- return()
- endif()
- endif()
- endif()
- # string(JSON COMMUNITY_LAYOUTS ERROR_VARIABLE NO_COMMUNITY_LAYOUTS GET ${QMK_KEYBOARD_INFO_JSON_STRING} community_layouts)
- # if(${NO_COMMUNITY_LAYOUTS} STREQUAL "NOTFOUND")
- # string(JSON NUM_LAYOUTS LENGTH ${COMMUNITY_LAYOUTS})
- # math(EXPR MAX "${NUM_LAYOUTS} - 1")
- foreach(LAYOUT ${LAYOUTS})
- # foreach(IDX RANGE ${MAX})
- # string(JSON LAYOUT GET ${COMMUNITY_LAYOUTS} ${IDX})
- if(EXISTS "${CMAKE_SOURCE_DIR}/layouts/community/${LAYOUT}/${KEYMAP_FOLDER}/keymap.c")
- set(${KEYMAP_C_STR} "${CMAKE_SOURCE_DIR}/layouts/community/${LAYOUT}/${KEYMAP_FOLDER}/keymap.c" PARENT_SCOPE)
- return()
- endif()
- endforeach()
- # endif()
- message(FATAL_ERROR "Could not resolve keymap '${KEYMAP_FOLDER}'")
- endfunction()
- function(resolve_keyboard_includes KEYBOARD_FOLDER_ABS)
- if(${IS_KEYBOARDS_FOLDER})
- file(RELATIVE_PATH RELATIVE_KEYBOARD_FOLDER ${QMK_KEYBOARDS_FOLDER} ${KEYBOARD_FOLDER_ABS})
- while(NOT ${RELATIVE_KEYBOARD_FOLDER} STREQUAL "")
- target_include_directories(qmk PUBLIC "${CMAKE_SOURCE_DIR}/keyboards/${RELATIVE_KEYBOARD_FOLDER}")
- get_filename_component(RELATIVE_KEYBOARD_FOLDER ${RELATIVE_KEYBOARD_FOLDER} DIRECTORY)
- endwhile()
- else()
- target_include_directories(qmk PUBLIC "${KEYBOARD_FOLDER_ABS}")
- endif()
- endfunction()
|