GetKeymaps.cmake 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. cmake_minimum_required(VERSION 3.20)
  2. list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
  3. include(ResolveKeyboard)
  4. include(ValidateJson)
  5. set(QMK_KEYBOARDS_FOLDER "${CMAKE_SOURCE_DIR}/keyboards")
  6. set(CMAKE_MESSAGE_INDENT "")
  7. resolve_keyboard(${QMK_KEYBOARD_FOLDER} KEYBOARD_FOLDER_ABS)
  8. validate_json(${KEYBOARD_FOLDER_ABS}/info.json keyboard JSON_STR)
  9. cmake_path(IS_PREFIX QMK_KEYBOARDS_FOLDER "${KEYBOARD_FOLDER_ABS}" IS_KEYBOARDS_FOLDER)
  10. file(WRITE "${CMAKE_SOURCE_DIR}/build/keyboard_keymaps" "")
  11. if(${IS_KEYBOARDS_FOLDER})
  12. file(RELATIVE_PATH RELATIVE_KEYBOARD_FOLDER ${QMK_KEYBOARDS_FOLDER} ${KEYBOARD_FOLDER_ABS})
  13. while(NOT ${RELATIVE_KEYBOARD_FOLDER} STREQUAL "")
  14. file(GLOB KEYMAPS "${QMK_KEYBOARDS_FOLDER}/${RELATIVE_KEYBOARD_FOLDER}/keymaps/*/keymap.c")
  15. foreach(KEYMAP ${KEYMAPS})
  16. file(RELATIVE_PATH KEYMAP_C "${QMK_KEYBOARDS_FOLDER}/${RELATIVE_KEYBOARD_FOLDER}/keymaps" "${KEYMAP}")
  17. get_filename_component(KEYMAP_FOLDER ${KEYMAP_C} DIRECTORY)
  18. # message(STATUS "${KEYMAP_FOLDER}")
  19. file(APPEND "${CMAKE_SOURCE_DIR}/build/keyboard_keymaps" "${KEYMAP_FOLDER}\n")
  20. endforeach()
  21. get_filename_component(RELATIVE_KEYBOARD_FOLDER ${RELATIVE_KEYBOARD_FOLDER} DIRECTORY)
  22. endwhile()
  23. else()
  24. if(EXISTS "${KEYBOARD_FOLDER_ABS}/keymap.c")
  25. set(${KEYMAP_C_STR} "${KEYBOARD_FOLDER_ABS}/keymap.c" PARENT_SCOPE)
  26. elseif(EXISTS "${KEYBOARD_FOLDER_ABS}/keymaps/${KEYMAP_FOLDER}/keymap.c")
  27. set(${KEYMAP_C_STR} "${KEYBOARD_FOLDER_ABS}/keymaps/${KEYMAP_FOLDER}/keymap.c" PARENT_SCOPE)
  28. endif()
  29. endif()
  30. string(JSON COMMUNITY_LAYOUTS ERROR_VARIABLE NO_COMMUNITY_LAYOUTS GET ${JSON_STR} community_layouts)
  31. if(${NO_COMMUNITY_LAYOUTS} STREQUAL "NOTFOUND")
  32. string(JSON NUM_LAYOUTS LENGTH ${COMMUNITY_LAYOUTS})
  33. math(EXPR MAX "${NUM_LAYOUTS} - 1")
  34. foreach(IDX RANGE ${MAX})
  35. string(JSON LAYOUT GET ${COMMUNITY_LAYOUTS} ${IDX})
  36. file(GLOB KEYMAPS "${CMAKE_SOURCE_DIR}/layouts/community/${LAYOUT}/*/keymap.c")
  37. foreach(KEYMAP ${KEYMAPS})
  38. file(RELATIVE_PATH KEYMAP_C "${CMAKE_SOURCE_DIR}/layouts/community/${LAYOUT}" "${KEYMAP}")
  39. get_filename_component(KEYMAP_FOLDER ${KEYMAP_C} DIRECTORY)
  40. # message(STATUS "${KEYMAP_FOLDER}")
  41. file(APPEND "${CMAKE_SOURCE_DIR}/build/keyboard_keymaps" "${KEYMAP_FOLDER}\n")
  42. endforeach()
  43. endforeach()
  44. endif()