CMakeLists.txt 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. cmake_minimum_required(VERSION 3.20)
  2. set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
  3. list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
  4. include(UpdateSubmodule)
  5. include(ResolveKeyboard)
  6. include(ValidateJson)
  7. include(ProcessKeyboard)
  8. set(QMK_KEYBOARDS_FOLDER "${CMAKE_SOURCE_DIR}/keyboards")
  9. function(_get_all_cmake_targets out_var current_dir)
  10. get_property(targets DIRECTORY ${current_dir} PROPERTY BUILDSYSTEM_TARGETS)
  11. get_property(subdirs DIRECTORY ${current_dir} PROPERTY SUBDIRECTORIES)
  12. foreach(subdir ${subdirs})
  13. _get_all_cmake_targets(subdir_targets ${subdir})
  14. list(APPEND targets ${subdir_targets})
  15. endforeach()
  16. set(${out_var} ${targets} PARENT_SCOPE)
  17. endfunction()
  18. if(NOT DEFINED QMK_KEYBOARD)
  19. # configure step - populate targets
  20. project(qmk_firmware)
  21. add_subdirectory(keyboards)
  22. else()
  23. # build step
  24. if(NOT DEFINED QMK_KEYMAP_FOLDER)
  25. set(QMK_KEYMAP_FOLDER "default")
  26. endif()
  27. resolve_keyboard(${QMK_KEYBOARD_FOLDER} QMK_KEYBOARD_FOLDER_ABS)
  28. cmake_path(IS_PREFIX QMK_KEYBOARDS_FOLDER "${QMK_KEYBOARD_FOLDER_ABS}" IS_KEYBOARDS_FOLDER)
  29. resolve_config_h(${QMK_KEYBOARD_FOLDER_ABS} QMK_KEYBOARD_CONFIG_H)
  30. process_keyboard()
  31. resolve_keyboard_h(${QMK_KEYBOARD_FOLDER_ABS} QMK_KEYBOARD_H)
  32. resolve_keymap_c(${QMK_KEYBOARD_FOLDER_ABS} ${QMK_KEYMAP_FOLDER} QMK_KEYMAP_C)
  33. message(STATUS "config.h: ${QMK_KEYBOARD_CONFIG_H}")
  34. message(STATUS "keyboard.h: ${QMK_KEYBOARD_H}")
  35. message(STATUS "keymap.c: ${QMK_KEYMAP_C}")
  36. project(${QMK_KEYBOARD}
  37. LANGUAGES C CXX ASM
  38. HOMEPAGE_URL ${URL}
  39. VERSION ${DEVICE_VER})
  40. # add_compile_options(
  41. # -include ${QMK_KEYBOARD_CONFIG_H}
  42. # )
  43. add_compile_definitions(
  44. QMK_KEYBOARD_H="${QMK_KEYBOARD_H}"
  45. KEYBOARD_${QMK_KEYBOARD}
  46. KEYMAP_C="${QMK_KEYMAP_C}"
  47. MATRIX_ROWS=8
  48. MATRIX_COLS=6
  49. )
  50. if(DEFINED DIODE_DIRECTION)
  51. add_compile_definitions(DIODE_DIRECTION=${DIODE_DIRECTION})
  52. endif()
  53. include_directories(${CMAKE_SOURCE_DIR})
  54. # if(EXISTS ${QMK_KEYBOARD_FOLDER_ABS}/CMakeLists.txt)
  55. # add_subdirectory(${QMK_KEYBOARD_FOLDER_ABS})
  56. # else()
  57. file(GLOB KEYBOARD_SRC "${QMK_KEYBOARD_FOLDER_ABS}/*.c")
  58. list(REMOVE_ITEM KEYBOARD_SRC "${QMK_KEYMAP_C}")
  59. add_qmk_executable(${TARGET_NAME} ${KEYBOARD_SRC})
  60. # endif()
  61. # add_library(qmk)
  62. target_precompile_headers(qmk PUBLIC
  63. ${QMK_KEYBOARD_CONFIG_H}
  64. )
  65. resolve_keyboard_includes(${QMK_KEYBOARD_FOLDER_ABS})
  66. add_subdirectory(quantum)
  67. add_subdirectory(platforms)
  68. add_subdirectory(tmk_core/protocol)
  69. include(features/oled)
  70. include(features/backlight)
  71. include(features/eeprom)
  72. include(features/matrix)
  73. include(features/fnv)
  74. endif()