| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- include(ParseMakefile)
- include(Utils)
- macro(process_keyboard)
- message(CHECK_START "Processing keyboard")
- list(APPEND CMAKE_MESSAGE_INDENT " ")
- validate_json(${QMK_KEYBOARD_FOLDER_ABS}/info.json keyboard QMK_KEYBOARD_INFO_JSON_STRING)
- # process rules from info.json
- file(READ ${CMAKE_SOURCE_DIR}/data/mappings/info_rules.hjson JSON_STRING)
- string(JSON MAPPING_LENGTH LENGTH ${JSON_STRING})
- math(EXPR MAX "${MAPPING_LENGTH} - 1")
- foreach(IDX RANGE ${MAX})
- string(JSON RULE_KEY MEMBER ${JSON_STRING} ${IDX})
- # string(JSON INFO_KEY GET ${JSON_STRING} ${RULE_KEY} info_key)
- json_get_with_default(INFO_KEY ${JSON_STRING} _ ${RULE_KEY} info_key)
- string(REPLACE "." " " INFO_KEYS ${INFO_KEY})
- string(JSON RULE_VALUE ERROR_VARIABLE RULE_KEY_NOT_FOUND GET ${QMK_KEYBOARD_INFO_JSON_STRING} ${INFO_KEYS})
- if(${RULE_KEY_NOT_FOUND} STREQUAL "NOTFOUND")
- json_get_with_default(VALUE_TYPE ${JSON_STRING} raw ${RULE_KEY} value_type)
- if(${VALUE_TYPE} STREQUAL "list")
- string(JSON NUM_VALUES LENGTH ${RULE_VALUE})
- math(EXPR MAX "${NUM_VALUES} - 1")
- foreach(IDX RANGE ${MAX})
- string(JSON VALUE GET ${RULE_VALUE} ${IDX})
- list(APPEND ${RULE_KEY} ${VALUE})
- endforeach()
- message(STATUS "Found rule '${INFO_KEY}': '${${RULE_KEY}}' assigned to '${RULE_KEY}'")
- else()
- set(${RULE_KEY} ${RULE_VALUE})
- message(STATUS "Found rule '${INFO_KEY}': '${RULE_VALUE}' assigned to '${RULE_KEY}'")
- endif()
- endif()
- endforeach()
- # process definitions from info.json
- file(READ ${CMAKE_SOURCE_DIR}/data/mappings/info_config.hjson JSON_STRING)
- string(JSON MAPPING_LENGTH LENGTH ${JSON_STRING})
- math(EXPR MAX "${MAPPING_LENGTH} - 1")
- foreach(IDX RANGE ${MAX})
- string(JSON CONFIG_KEY MEMBER ${JSON_STRING} ${IDX})
- json_get_with_default(INFO_KEY ${JSON_STRING} _ ${CONFIG_KEY} info_key)
- string(REPLACE "." ";" INFO_KEYS ${INFO_KEY})
- # string(JSON CONFIG_VALUE ERROR_VARIABLE CONFIG_KEY_NOT_FOUND GET ${QMK_KEYBOARD_INFO_JSON_STRING} ${INFO_KEYS})
- json_get_with_default(CONFIG_VALUE ${QMK_KEYBOARD_INFO_JSON_STRING} NOTFOUND ${INFO_KEYS})
- if(NOT CONFIG_VALUE STREQUAL "NOTFOUND")
- set(${CONFIG_KEY} ${CONFIG_VALUE})
- json_get_with_default(VALUE_TYPE ${JSON_STRING} raw ${CONFIG_KEY} value_type)
- if(${VALUE_TYPE} STREQUAL "str")
- add_compile_definitions(${CONFIG_KEY}="${CONFIG_VALUE}")
- message(STATUS "Found definition '${INFO_KEY}': '\"${CONFIG_VALUE}\"' assigned to '${CONFIG_KEY}'")
- elseif(${VALUE_TYPE} STREQUAL "bcd_version")
- string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" VERSION_MATCH ${CONFIG_VALUE})
- set(VERSION_MAJOR ${CMAKE_MATCH_1})
- set(VERSION_MINOR ${CMAKE_MATCH_2})
- set(VERSION_PATCH ${CMAKE_MATCH_3})
- math(EXPR BCD_VERSION "${VERSION_MAJOR} * 10000 + ${VERSION_MINOR} * 100 + ${VERSION_PATCH}" OUTPUT_FORMAT HEXADECIMAL)
- add_compile_definitions(${CONFIG_KEY}=${BCD_VERSION})
- message(STATUS "Found definition '${INFO_KEY}': '${BCD_VERSION}' assigned to '${CONFIG_KEY}'")
- else()
- add_compile_definitions(${CONFIG_KEY}=${CONFIG_VALUE})
- message(STATUS "Found definition '${INFO_KEY}': '${CONFIG_VALUE}' assigned to '${CONFIG_KEY}'")
- endif()
- endif()
- endforeach()
- string(JSON KEYBOARD_NAME GET ${QMK_KEYBOARD_INFO_JSON_STRING} keyboard_name)
- string(JSON MANUFACTURER GET ${QMK_KEYBOARD_INFO_JSON_STRING} manufacturer)
- string(JSON URL GET ${QMK_KEYBOARD_INFO_JSON_STRING} url)
- string(JSON QMK_MCU GET ${QMK_KEYBOARD_INFO_JSON_STRING} processor)
- list(POP_BACK CMAKE_MESSAGE_INDENT)
- message(CHECK_PASS "info.json validated and loaded")
- ParseMakefile(${QMK_KEYBOARD_FOLDER_ABS}/rules.mk)
- endmacro()
|