Browse Source

cmake: Use/include Buddy formatting rules for consistency

Yuri D'Elia 1 year ago
parent
commit
75377f3081
2 changed files with 106 additions and 69 deletions
  1. 21 0
      .cmake-format.py
  2. 85 69
      CMakeLists.txt

+ 21 - 0
.cmake-format.py

@@ -0,0 +1,21 @@
+# If a statement is wrapped to more than one line, than dangle the closing
+# parenthesis on it's own line.
+dangle_parens = True
+dangle_align = 'child'
+
+# If true, the parsers may infer whether or not an argument list is sortable
+# (without annotation).
+autosort = True
+
+# How wide to allow formatted cmake files
+line_width = 100
+
+additional_commands = {
+    "target_sources": {
+        "kwargs": {
+            "PUBLIC": "*",
+            "PRIVATE": "*",
+            "INTERFACE": "*",
+        }
+    },
+}

+ 85 - 69
CMakeLists.txt

@@ -7,28 +7,29 @@ set(PROJECT_VERSION_SUFFIX
     CACHE
       STRING
       "Full version suffix to be shown on the info screen in settings (e.g. full_version=4.0.3-BETA+1035.PR111.B4, suffix=-BETA+1035.PR111.B4). Defaults to '+<commit sha>.<dirty?>.<debug?>' if set to '<auto>'."
-)
+    )
 set(PROJECT_VERSION_SUFFIX_SHORT
     "<auto>"
     CACHE
       STRING
       "Short version suffix to be shown on splash screen. Defaults to '+<BUILD_NUMBER>' if set to '<auto>'."
-)
+    )
 set(BUILD_NUMBER
     ""
-    CACHE
-      STRING
-      "Build number of the firmware. Resolved automatically if not specified.")
+    CACHE STRING "Build number of the firmware. Resolved automatically if not specified."
+    )
 
 include(cmake/ProjectVersion.cmake)
 resolve_version_variables()
 
 set(PROJECT_VERSION_FLAVOUR
     ""
-    CACHE STRING "Firmware flavour to build - DEBUG, DEVEL, APLHA, BETA or RC")
+    CACHE STRING "Firmware flavour to build - DEBUG, DEVEL, APLHA, BETA or RC"
+    )
 set(PROJECT_VERSION_FLAVOUR_REVISION
     ""
-    CACHE STRING "Firmware flavour version, e.g. 1 for RC1, etc")
+    CACHE STRING "Firmware flavour version, e.g. 1 for RC1, etc"
+    )
 
 if(NOT PROJECT_VERSION_FLAVOUR STREQUAL "")
   set(PROJECT_VERSION "${PROJECT_VERSION}-${PROJECT_VERSION_FLAVOUR}")
@@ -42,9 +43,8 @@ endif()
 # Inform user about the resolved settings
 message(STATUS "Project version: ${PROJECT_VERSION}")
 message(
-  STATUS
-    "Project version with short suffix: ${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX_SHORT}"
-)
+  STATUS "Project version with short suffix: ${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX_SHORT}"
+  )
 
 set(FN_PREFIX "FW${PROJECT_VERSION}${PROJECT_VERSION_SUFFIX_SHORT}")
 
@@ -54,14 +54,15 @@ message(
 ***************** YOUR ATTENTION PLEASE *****************
 CMake support is experimental. There is no guarantee at this time. If you have problems you are encouraged to fall back to the tried-and-true methods.
 *********************** THANK YOU **********************
-We now return to your regularly scheduled Firmware Build.")
+We now return to your regularly scheduled Firmware Build."
+  )
 
 option(SECONDARY_LANGUAGES "Secondary language support in the firmware" ON)
 
 set(MAIN_LANGUAGES
     cs de es fr it pl
-    CACHE STRING
-          "The list of 'main' languages to be included, in the correct order")
+    CACHE STRING "The list of 'main' languages to be included, in the correct order"
+    )
 set(COMMUNITY_LANGUAGES
     nl
     ro
@@ -70,9 +71,8 @@ set(COMMUNITY_LANGUAGES
     sk
     sv
     no
-    CACHE STRING
-          "The list of community languages to be included, in the correct order"
-)
+    CACHE STRING "The list of community languages to be included, in the correct order"
+    )
 set(SELECTED_LANGUAGES ${MAIN_LANGUAGES} ${COMMUNITY_LANGUAGES})
 
 get_dependency_directory(prusa3dboards PRUSA_BOARDS_DIR)
@@ -80,26 +80,28 @@ project(Prusa-Firmware)
 add_subdirectory(lib)
 
 file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/config.h MAX_SIZE_LINE
-     REGEX "^#define \+LANG_SIZE_RESERVED \+")
+     REGEX "^#define \+LANG_SIZE_RESERVED \+"
+     )
 string(REGEX MATCH "0x[0-9]+" MAX_SIZE_HEX "${MAX_SIZE_LINE}")
 math(EXPR LANG_MAX_SIZE "${MAX_SIZE_HEX}" OUTPUT_FORMAT DECIMAL)
 message("Language maximum size (from config.h): ${LANG_MAX_SIZE} bytes")
 
-set(LANG_BIN_MAX 249856) # Ditto, this in xflash_layout.h but needs invocation
-                         # of the preprocessor... :-/
+set(LANG_BIN_MAX 249856) # Ditto, this in xflash_layout.h but needs invocation of the
+                         # preprocessor... :-/
 
 get_recommended_gcc_version(RECOMMENDED_TOOLCHAIN_VERSION)
 if(CMAKE_CROSSCOMPILING AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL
-                            ${RECOMMENDED_TOOLCHAIN_VERSION})
-  message(
-    WARNING "Recommended AVR toolchain is ${RECOMMENDED_TOOLCHAIN_VERSION}"
-            ", but you have ${CMAKE_CXX_COMPILER_VERSION}")
+                            ${RECOMMENDED_TOOLCHAIN_VERSION}
+   )
+  message(WARNING "Recommended AVR toolchain is ${RECOMMENDED_TOOLCHAIN_VERSION}"
+                  ", but you have ${CMAKE_CXX_COMPILER_VERSION}"
+          )
 
 elseif(NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
   message(
     WARNING
       "Recommended compiler for host tools and unittests is GCC, you have ${CMAKE_CXX_COMPILER_ID}."
-  )
+    )
 endif()
 
 # append custom C/C++ flags
@@ -197,7 +199,8 @@ set(FW_SOURCES
     vector_3.cpp
     xflash.c
     xflash_dump.cpp
-    xyzcal.cpp)
+    xyzcal.cpp
+    )
 list(TRANSFORM FW_SOURCES PREPEND ${CMAKE_CURRENT_SOURCE_DIR}/Firmware/)
 
 set(AVR_SOURCES
@@ -225,7 +228,7 @@ set(AVR_SOURCES
     abi.cpp
     main.cpp
     # new.cpp # What happened to this? it was removed in 1.0.5-1 to 1.0.5.2?
-)
+    )
 list(TRANSFORM AVR_SOURCES PREPEND ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/)
 
 #
@@ -240,7 +243,8 @@ if(CMAKE_CROSSCOMPILING)
       set_property(
         SOURCE ${file}
         APPEND
-        PROPERTY COMPILE_OPTIONS "-frandom-seed=${target}.o")
+        PROPERTY COMPILE_OPTIONS "-frandom-seed=${target}.o"
+        )
     endforeach()
   endfunction()
 
@@ -272,8 +276,10 @@ if(CMAKE_CROSSCOMPILING)
   set(CMAKE_C_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
 
   # mcu and target-related settings
-  add_compile_options(-mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10819
-                      -DARDUINO_AVR_PRUSA_EINSY_RAMBO -DARDUINO_ARCH_AVR)
+  add_compile_options(
+    -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_PRUSA_EINSY_RAMBO
+    -DARDUINO_ARCH_AVR
+    )
   add_link_options(-mmcu=atmega2560 -Wl,-u,vfprintf -lprintf_flt -lm)
 
   # disable some C++ language features
@@ -297,7 +303,8 @@ if(CMAKE_CROSSCOMPILING)
   set_reproducible_target(avr_core)
   target_include_directories(
     avr_core PRIVATE ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/
-                     ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/)
+                     ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/
+    )
 endif()
 
 # Meta targets to build absolutely everything
@@ -308,8 +315,7 @@ add_dependencies(ALL_FIRMWARE ALL_ENGLISH ALL_MULTILANG)
 set_target_properties(ALL_MULTILANG PROPERTIES EXCLUDE_FROM_ALL FALSE)
 
 function(add_base_binary variant_name)
-  add_executable(${variant_name} ${FW_SOURCES} ${FW_HEADERS}
-                                 ${VARIANT_CFG_DST})
+  add_executable(${variant_name} ${FW_SOURCES} ${FW_HEADERS} ${VARIANT_CFG_DST})
   set_target_properties(${variant_name} PROPERTIES EXCLUDE_FROM_ALL TRUE)
 
   target_include_directories(
@@ -317,7 +323,8 @@ function(add_base_binary variant_name)
     PRIVATE ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/
             ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/
             ${VARIANT_CFG_DIR} # Include the header for this variant.
-            ${CMAKE_SOURCE_DIR}/Firmware)
+            ${CMAKE_SOURCE_DIR}/Firmware
+    )
 
   target_link_libraries(${variant_name} avr_core)
 
@@ -326,35 +333,35 @@ function(add_base_binary variant_name)
   target_link_options(${variant_name} PUBLIC -Wl,-T,${LINKER_SCRIPT})
 
   # limit the text section to 248K (256K - 8k reserved for the bootloader)
-  target_link_options(${variant_name} PUBLIC
-                      -Wl,--defsym=__TEXT_REGION_LENGTH__=248K)
+  target_link_options(${variant_name} PUBLIC -Wl,--defsym=__TEXT_REGION_LENGTH__=248K)
 
-  # produce ASM listing. Note we also specify the .map as a byproduct so it gets
-  # cleaned because link_options doesn't have a "generated outputs" feature.
+  # produce ASM listing. Note we also specify the .map as a byproduct so it gets cleaned because
+  # link_options doesn't have a "generated outputs" feature.
   add_custom_command(
     TARGET ${variant_name}
     POST_BUILD
-    COMMAND ${CMAKE_OBJDUMP} --prefix ${CMAKE_SOURCE_DIR} -CSd ${variant_name} >
-            ${variant_name}.asm
-    BYPRODUCTS ${variant_name}.asm ${variant_name}.map)
+    COMMAND ${CMAKE_OBJDUMP} --prefix ${CMAKE_SOURCE_DIR} -CSd ${variant_name} > ${variant_name}.asm
+    BYPRODUCTS ${variant_name}.asm ${variant_name}.map
+    )
 
   # inform about the firmware's size in terminal
   add_custom_command(
     TARGET ${variant_name}
     POST_BUILD
-    COMMAND ${CMAKE_SIZE_UTIL} -C --mcu=atmega2560 ${variant_name})
+    COMMAND ${CMAKE_SIZE_UTIL} -C --mcu=atmega2560 ${variant_name}
+    )
   report_size(${variant_name})
 
   # generate linker map file
-  target_link_options(${variant_name} PUBLIC
-                      -Wl,-Map=${CMAKE_CURRENT_BINARY_DIR}/${variant_name}.map)
+  target_link_options(
+    ${variant_name} PUBLIC -Wl,-Map=${CMAKE_CURRENT_BINARY_DIR}/${variant_name}.map
+    )
 
   target_compile_definitions(${variant_name} PRIVATE CMAKE_LANG_CONTROL)
 endfunction()
 
 function(fw_add_variant variant_name)
-  # Set FW_SOURCES to be reproducible in this variant as it's set in a separate
-  # project
+  # Set FW_SOURCES to be reproducible in this variant as it's set in a separate project
   set_reproducible_sources(FW_SOURCES "Firmware/")
 
   # Create the Configuration_Prusa.h for this variant so it can be #included.
@@ -363,11 +370,11 @@ function(fw_add_variant variant_name)
   set(VARIANT_CFG_SRC ${CMAKE_SOURCE_DIR}/Firmware/variants/${variant_name}.h)
   add_custom_command(
     OUTPUT ${VARIANT_CFG_DST}
-    COMMAND
-      ${CMAKE_COMMAND} -E copy ${VARIANT_CFG_SRC} ${VARIANT_CFG_DST}
+    COMMAND ${CMAKE_COMMAND} -E copy ${VARIANT_CFG_SRC} ${VARIANT_CFG_DST}
     COMMENT "Generating Configuration_prusa.h for ${variant_name}"
     BYPRODUCTS ${VARIANT_CFG_DIR}
-    DEPENDS ${VARIANT_CFG_SRC})
+    DEPENDS ${VARIANT_CFG_SRC}
+    )
   string(REPLACE "1_75mm_" "" variant_name "${variant_name}")
   string(REPLACE "-E3Dv6full" "" variant_name "${variant_name}")
 
@@ -383,7 +390,8 @@ function(fw_add_variant variant_name)
     COMMAND ${CMAKE_OBJCOPY} -O ihex ${FW_EN} ${FW_EN}.hex
     COMMAND ${CMAKE_OBJCOPY} -O ihex ${FW_EN} ${FW_HEX}
     BYPRODUCTS ${FW_EN}.hex ${FW_HEX}
-    COMMENT "Generating ${FW_EN}.hex")
+    COMMENT "Generating ${FW_EN}.hex"
+    )
   add_dependencies(ALL_ENGLISH ${FW_EN})
 
   # Multi-language build/s
@@ -403,7 +411,8 @@ function(fw_add_variant variant_name)
     COMMAND ${CMAKE_OBJCOPY} -I binary -O ihex ${FW_LANG_PATCH}.bin ${FW_LANG_PATCH}.hex
     DEPENDS ${FW_LANG_BASE}
     BYPRODUCTS ${FW_LANG_PATCH}.bin ${FW_LANG_PATCH}.hex
-    COMMENT "Generating ${variant_name} language map")
+    COMMENT "Generating ${variant_name} language map"
+    )
 
   # Build language catalogs
   set(LANG_BINS "")
@@ -419,11 +428,11 @@ function(fw_add_variant variant_name)
       #]]
       COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-build.py ${LANG_MAP} ${PO_FILE} ${LANG_BIN}
       # Check bin size:
-      COMMAND
-        ${CMAKE_COMMAND} -DLANG_MAX_SIZE=${LANG_MAX_SIZE}
-        -DLANG_FILE=${LANG_BIN} -P ${PROJECT_CMAKE_DIR}/Check_lang_size.cmake
+      COMMAND ${CMAKE_COMMAND} -DLANG_MAX_SIZE=${LANG_MAX_SIZE} -DLANG_FILE=${LANG_BIN} -P
+              ${PROJECT_CMAKE_DIR}/Check_lang_size.cmake
       DEPENDS ${LANG_MAP} ${PO_FILE}
-      COMMENT "Generating ${variant_name}_${LANG}.bin")
+      COMMENT "Generating ${variant_name}_${LANG}.bin"
+      )
     list(APPEND LANG_BINS ${LANG_BIN})
   endforeach()
 
@@ -439,7 +448,8 @@ function(fw_add_variant variant_name)
       OUTPUT ${LANG_CATBIN}
       COMMAND ${CMAKE_COMMAND} -E cat ${LANG_BINS} > ${LANG_CATBIN}
       DEPENDS ${LANG_BINS}
-      COMMENT "Merging language catalogs")
+      COMMENT "Merging language catalogs"
+      )
     #[[
     #add_custom_command(OUTPUT ${LANG_FINAL_BIN}
     #  COMMAND ${CMAKE_COMMAND} -DLANG_MAX_SIZE=${LANG_BIN_MAX} -DLANG_FILE=${LANG_FINAL_BIN}
@@ -450,7 +460,8 @@ function(fw_add_variant variant_name)
       OUTPUT ${LANG_CATHEX}
       COMMAND ${CMAKE_OBJCOPY} -I binary -O ihex ${LANG_CATBIN} ${LANG_CATHEX}
       DEPENDS ${LANG_CATBIN}
-      COMMENT "Generating Hex for language data")
+      COMMENT "Generating Hex for language data"
+      )
 
     add_custom_command(
       OUTPUT ${FW_LANG_FINAL}.hex
@@ -458,7 +469,8 @@ function(fw_add_variant variant_name)
       COMMAND ${CMAKE_COMMAND} -E copy ${FW_LANG_FINAL}.hex ${LANG_HEX}
       BYPRODUCTS ${LANG_HEX}
       DEPENDS ${FW_LANG_PATCH}.hex ${LANG_CATHEX}
-      COMMENT "Generating final ${FW_LANG_FINAL}.hex")
+      COMMENT "Generating final ${FW_LANG_FINAL}.hex"
+      )
 
     add_custom_target(${FW_LANG_FINAL} DEPENDS ${FW_LANG_FINAL}.hex)
     add_dependencies(ALL_MULTILANG ${FW_LANG_FINAL})
@@ -474,23 +486,25 @@ function(fw_add_variant variant_name)
       add_custom_command(
         OUTPUT ${FW_LANG_FINAL}.bin
         COMMAND ${CMAKE_OBJCOPY} -O binary ${FW_LANG_BASE} ${FW_LANG_FINAL}.bin
-        COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-patchsec.py ${FW_LANG_BASE}
-                ${LANG_BIN} ${FW_LANG_FINAL}.bin
+        COMMAND ${CMAKE_SOURCE_DIR}/lang/lang-patchsec.py ${FW_LANG_BASE} ${LANG_BIN}
+                ${FW_LANG_FINAL}.bin
         DEPENDS ${FW_LANG_BASE} ${LANG_BIN}
-        COMMENT "Generating ${FW_LANG_FINAL}.bin")
+        COMMENT "Generating ${FW_LANG_FINAL}.bin"
+        )
 
       # Final hex
-      add_custom_command(OUTPUT ${FW_LANG_FINAL}.hex
+      add_custom_command(
+        OUTPUT ${FW_LANG_FINAL}.hex
         COMMAND ${CMAKE_OBJCOPY} -I binary -O ihex ${FW_LANG_FINAL}.bin ${FW_LANG_FINAL}.hex
         COMMAND ${CMAKE_COMMAND} -E copy ${FW_LANG_FINAL}.hex ${LANG_HEX}
         DEPENDS ${FW_LANG_FINAL}.bin
-        COMMENT "Creating ${FW_LANG_FINAL}.hex")
+        COMMENT "Creating ${FW_LANG_FINAL}.hex"
+        )
 
       add_custom_target(${FW_LANG_FINAL} DEPENDS ${FW_LANG_FINAL}.hex)
       list(APPEND ALL_VARIANT_HEXES ${FW_LANG_FINAL})
     endforeach()
-    add_custom_target("${variant_name}-All-Languages"
-                      DEPENDS ${ALL_VARIANT_HEXES})
+    add_custom_target("${variant_name}-All-Languages" DEPENDS ${ALL_VARIANT_HEXES})
     add_dependencies(ALL_MULTILANG "${variant_name}-All-Languages")
   endif()
 endfunction()
@@ -501,11 +515,13 @@ if(CMAKE_CROSSCOMPILING)
   file(
     GLOB ALL_VARIANTS
     RELATIVE ${PROJECT_SOURCE_DIR}/Firmware/variants
-    ${PROJECT_SOURCE_DIR}/Firmware/variants/*.h)
+    ${PROJECT_SOURCE_DIR}/Firmware/variants/*.h
+    )
   list(TRANSFORM ALL_VARIANTS REPLACE "\.h$" "")
   set(FW_VARIANTS
       ${ALL_VARIANTS}
-      CACHE STRING "Firmware variants to be built")
+      CACHE STRING "Firmware variants to be built"
+      )
 
   foreach(THIS_VAR IN LISTS FW_VARIANTS)
     if(NOT ${THIS_VAR} IN_LIST ALL_VARIANTS)
@@ -515,11 +531,11 @@ if(CMAKE_CROSSCOMPILING)
     message("Variant added: ${THIS_VAR}")
     string(REPLACE "-E3Dv6full" "" DIR_NAME "${THIS_VAR}")
     string(REPLACE "1_75mm_" "" DIR_NAME "${DIR_NAME}")
-    # Generate a file in a subfolder so that we can organize things a little
-    # more neatly in VS code
+    # Generate a file in a subfolder so that we can organize things a little more neatly in VS code
     file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME})
     file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME}/CMakeLists.txt
-         "project(${DIR_NAME})\nfw_add_variant(${THIS_VAR})")
+         "project(${DIR_NAME})\nfw_add_variant(${THIS_VAR})"
+         )
     add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/build_gen/${DIR_NAME})
     # fw_add_variant(${TRIMMED_NAME})
   endforeach(THIS_VAR IN LISTS FW_VARIANTS)