Browse Source

some relative/abs keymap folder stuff

Jack Humbert 3 years ago
parent
commit
d5760d02a6
3 changed files with 50 additions and 13 deletions
  1. 27 6
      CMakeLists.txt
  2. 18 5
      cmake/AddKeyboard.cmake
  3. 5 2
      keyboards/CMakeLists.txt

+ 27 - 6
CMakeLists.txt

@@ -34,20 +34,38 @@ endwhile()
 file(READ keyboards/${QMK_KEYBOARD_FOLDER}/info.json QMK_KEYBOARD_INFO_JSON_STRING)
 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)
 string(JSON VENDOR_ID GET ${QMK_KEYBOARD_INFO_JSON_STRING} usb vid)
 string(JSON PRODUCT_ID GET ${QMK_KEYBOARD_INFO_JSON_STRING} usb pid)
 string(JSON DEVICE_VER GET ${QMK_KEYBOARD_INFO_JSON_STRING} usb device_version)
 
+if(NOT DEFINED QMK_KEYMAP_FOLDER)
+  set(QMK_KEYMAP_FOLDER "default")
+endif()
+
+set(TEMP_PATH ${QMK_KEYMAP_FOLDER})
+cmake_path(IS_RELATIVE TEMP_PATH IS_KEYMAP_FOLDER_RELATIVE)
+
+if(NOT ${IS_KEYMAP_FOLDER_RELATIVE})
+  if(EXISTS "${QMK_KEYMAP_FOLDER}/keymap.c")
+    set(QMK_KEYBOARD_KEYMAP "${QMK_KEYMAP_FOLEDR}/keymap.c")
+  else()
+    message(FATAL_ERROR "Could not find keymap.c in keymap folder")
+  endif()
+endif()
+
 foreach(FOLDER ${QMK_KEYBOARD_FOLDERS})
   include_directories(${CMAKE_SOURCE_DIR}/keyboards/${FOLDER})
   # assuming every keyboard has a config at some level
   if(EXISTS ${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/config.h)
     list(APPEND QMK_KEYBOARD_CONFIG_HS "${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/config.h")
   endif()
-  # assuming every keyboard has a default/keymap.c at some level
-  if(EXISTS ${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/keymaps/default/keymap.c)
-    list(APPEND QMK_KEYBOARD_KEYMAPS "${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/keymaps/default/keymap.c")
+  if(${IS_KEYMAP_FOLDER_RELATIVE})
+    # assuming every keyboard has a default/keymap.c at some level
+    if(EXISTS ${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/keymaps/${QMK_KEYMAP_FOLDER}/keymap.c)
+      list(APPEND QMK_KEYBOARD_KEYMAPS "${CMAKE_SOURCE_DIR}/keyboards/${FOLDER}/keymaps/${QMK_KEYMAP_FOLDER}/keymap.c")
+    endif()
   endif()
   get_filename_component(LAST_PART ${FOLDER} NAME)
   # assuming every keyboard has a header.h at some level
@@ -67,8 +85,11 @@ foreach(FOLDER ${QMK_KEYBOARD_FOLDERS})
   # endif()
 endforeach()
 
-if(NOT DEFINED QMK_KEYBOARD_KEYMAPS)
-  message(FATAL_ERROR "Keymap not found")
+if(${IS_KEYMAP_FOLDER_RELATIVE})
+  if(NOT DEFINED QMK_KEYBOARD_KEYMAPS)
+    message(FATAL_ERROR "Keymap not found")
+  endif()
+  list(GET QMK_KEYBOARD_KEYMAPS 0 QMK_KEYBOARD_KEYMAP)
 endif()
 
 if(NOT DEFINED QMK_KEYBOARD_HEADERS)
@@ -76,11 +97,11 @@ if(NOT DEFINED QMK_KEYBOARD_HEADERS)
 endif()
 
 # list(GET QMK_KEYBOARD_FOLDERS 0 QMK_KEYBOARD_BASE_FOLDER)
-list(GET QMK_KEYBOARD_KEYMAPS 0 QMK_KEYBOARD_KEYMAP)
 list(GET QMK_KEYBOARD_HEADERS -1 QMK_KEYBOARD_HEADER)
 
 project(${QMK_KEYBOARD} 
   LANGUAGES C CXX ASM 
+  HOMEPAGE_URL ${URL}
   VERSION ${DEVICE_VER})
 
 string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" VERSION_MATCH ${DEVICE_VER})

+ 18 - 5
cmake/AddKeyboard.cmake

@@ -1,8 +1,8 @@
-macro(add_keyboard KEYBOARD_FOLDER)  
+macro(add_keyboard KEYBOARD_FOLDER KEYMAP_FOLDER)  
   # not entirely sure why this is necessary
   set(TEMP_PATH ${KEYBOARD_FOLDER})
-  cmake_path(IS_RELATIVE TEMP_PATH IS_FOLDER_RELATIVE)
-  if(${IS_FOLDER_RELATIVE})
+  cmake_path(IS_RELATIVE TEMP_PATH IS_KEYBOARD_FOLDER_RELATIVE)
+  if(${IS_KEYBOARD_FOLDER_RELATIVE})
     set(KEYBOARD_FOLDER_ABS ${CMAKE_SOURCE_DIR}/keyboards/${KEYBOARD_FOLDER})
     if(NOT EXISTS ${KEYBOARD_FOLDER_ABS})
       message(FATAL_ERROR "Keyboard does not exist in QMK - try using an absolute path to the keyboard folder")
@@ -13,6 +13,18 @@ macro(add_keyboard KEYBOARD_FOLDER)
       message(FATAL_ERROR "Absolute path to keyboard does not exist")
     endif()
   endif()
+  
+  set(TEMP_PATH ${KEYMAP_FOLDER})
+  cmake_path(IS_RELATIVE TEMP_PATH IS_KEYMAP_FOLDER_RELATIVE)
+  if(${IS_KEYMAP_FOLDER_RELATIVE})
+    set(KEYMAP_NAME ${KEYMAP_FOLDER})
+  else()
+    if(WIN32)
+      set(KEYMAP_NAME $ENV{USERNAME})
+    else()
+      set(KEYMAP_NAME $ENV{USE})
+    endif()
+  endif()
 
   # find the right toolchain
   message(STATUS "Reading config from ${KEYBOARD_FOLDER_ABS}/info.json")
@@ -36,14 +48,14 @@ macro(add_keyboard KEYBOARD_FOLDER)
     message(FATAL_ERROR "Could not find platform for ${KEYBOARD_FOLDER}")
   endif()
 
-  if(${IS_FOLDER_RELATIVE})
+  if(${IS_KEYBOARD_FOLDER_RELATIVE})
     string(REPLACE "/" "_" KEYBOARD_NAME ${KEYBOARD_FOLDER})
   else()
     string(JSON KEYBOARD_NAME GET ${JSON_STRING} keyboard_name)
     string(REPLACE " " "_" KEYBOARD_NAME ${KEYBOARD_NAME})
   endif()
 
-  ExternalProject_Add(${KEYBOARD_NAME}
+  ExternalProject_Add(${KEYBOARD_NAME}_${KEYMAP_NAME}
     SOURCE_DIR ${CMAKE_SOURCE_DIR}
     PREFIX ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}
     TMP_DIR ${CMAKE_SOURCE_DIR}/build/keyboards/${KEYBOARD_FOLDER}/tmp
@@ -61,5 +73,6 @@ macro(add_keyboard KEYBOARD_FOLDER)
       -DMAKE_ROOT=${MAKE_ROOT}
       -DQMK_KEYBOARD=${KEYBOARD_NAME}
       -DQMK_KEYBOARD_FOLDER=${KEYBOARD_FOLDER}
+      -DQMK_KEYMAP_FOLDER=${KEYMAP_FOLDER}
   )
 endmacro(add_keyboard)

+ 5 - 2
keyboards/CMakeLists.txt

@@ -2,7 +2,10 @@ include(ExternalProject)
 include(AddKeyboard)
 
 if(DEFINED QMK_KEYBOARD_FOLDER)
-  add_keyboard(${QMK_KEYBOARD_FOLDER})
+  if(NOT DEFINED QMK_KEYMAP_FOLDER)
+    set(QMK_KEYMAP_FOLDER "default")
+  endif()
+  add_keyboard(${QMK_KEYBOARD_FOLDER} ${QMK_KEYMAP_FOLDER})
 endif()
 
 file(GLOB_RECURSE KEYBOARDS **/CMakeLists.txt)
@@ -10,5 +13,5 @@ file(GLOB_RECURSE KEYBOARDS **/CMakeLists.txt)
 foreach(KEYBOARD_CMAKE ${KEYBOARDS})
   get_filename_component(KEYBOARD_FOLDER_ABS "${KEYBOARD_CMAKE}" DIRECTORY)
   file(RELATIVE_PATH KEYBOARD_FOLDER "${CMAKE_SOURCE_DIR}/keyboards" "${KEYBOARD_FOLDER_ABS}")
-  add_keyboard(${KEYBOARD_FOLDER})
+  add_keyboard(${KEYBOARD_FOLDER} "default")
 endforeach()