From bbe070e771dcc6d02f07c3da3a98f6b44dde5022 Mon Sep 17 00:00:00 2001
From: Serge Bazanski <q3k@q3k.org>
Date: Sun, 18 Jun 2023 19:49:10 +0200
Subject: [PATCH] sdkconfig: unify

Removes sdkconfig.p* files, use a single sdkconfig.defaults.

This is now 'overlaid' with flow3r-specific options by idf_ext.py.
---
 .gitignore                         |  2 ++
 README.md                          | 15 ++++++-----
 idf_ext.py                         | 30 +++++++++++++--------
 sdkconfig.p1 => sdkconfig.defaults |  1 -
 sdkconfig.p3                       | 42 -----------------------------
 sdkconfig.p4                       | 42 -----------------------------
 sdkconfig.p6                       | 43 ------------------------------
 sdkconfig.p6spiral                 | 43 ------------------------------
 8 files changed, 30 insertions(+), 188 deletions(-)
 rename sdkconfig.p1 => sdkconfig.defaults (98%)
 delete mode 100644 sdkconfig.p3
 delete mode 100644 sdkconfig.p4
 delete mode 100644 sdkconfig.p6
 delete mode 100644 sdkconfig.p6spiral

diff --git a/.gitignore b/.gitignore
index 8e15e6b5f3..559b58626e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,8 @@ sdkconfig
 dependencies.lock
 build
 
+.sdkconfig.defaults.generated
+
 # micropython
 __pycache__
 
diff --git a/README.md b/README.md
index bbe5cecb50..a79656fd01 100644
--- a/README.md
+++ b/README.md
@@ -67,6 +67,7 @@ By default, code for the fourth generation prototype will be built. To select a
 | `p1` or `proto1`                | Prototype 1                        |
 | `p3` or `proto3`                | Prototype 3 (B3xx)                 |
 | `p4` or `proto4`                | Prototype 4 (B4xx)                 |
+| `p6` or `proto6`                | Prototype 6 (B6xx)                 |
 
 **Important**: when switching generations, do a full clean by running `rm -rf sdkconfig build`. Otherwise you will get _weird_ errors and likely will end up building for the wrong architecture.
 
@@ -195,12 +196,13 @@ Good luck. The idf.py gdb/openocd scripts seem somewhat buggy.
 
 #### sdkconfig / menuconfig
 
-We have an sdkconfig.default file per badge generation. See the build
+We have an sdkconfig.defaults file. It is used to generate a '.generated' file
+with flow3r-specific options based on the given -g option. See the build
 instructions above to see how to select the generation to build against.
 
-The build system will generate an sdkconfig, but it should not be committed into
-version control. Instead, treat it like an ephemeral artifact that you can also
-modify for your own needs during development.
+The build system will generate an sdkconfig, but it should not be committed
+into version control. Instead, treat it like an ephemeral artifact that you can
+also modify for your own needs during development.
 
 To run menuconfig, do the usual::
 
@@ -208,11 +210,12 @@ To run menuconfig, do the usual::
 $ idf.py  menuconfig
 ```
 
-(Specify -g or BADGE_GENERATION if you haven't built the firmware yet)
+(Specify -g or `BADGE_GENERATION` if you haven't built the firmware yet)
 
 Then, either save into the temporary sdkconfig by using 'S', or save into a
 defconfig by using 'D'. The resulting `build/defconfig` file can then be copied
-into `sdkconfig.$generation` to change the defaults for a given generation.
+into `sdkconfig` to change the defaults for a given generation (be sure to
+remove BADGE23_* options that are usually generated by `idf_ext.py`).
 
 ### Badge link
 
diff --git a/idf_ext.py b/idf_ext.py
index df7432b87c..b6bf13cbd7 100644
--- a/idf_ext.py
+++ b/idf_ext.py
@@ -9,7 +9,7 @@ import shutil
 def action_extensions(base_actions, project_path=os.getcwd()):
     """
     Implementes -g/--generation and BADGE_GENERATION in idf.py, allowing
-    switching between badge generations and sdkconfig default files.
+    switching between badge generations.
     """
 
     # Map from canonical name to user-supported names.
@@ -46,16 +46,24 @@ def action_extensions(base_actions, project_path=os.getcwd()):
             supported = sorted(supported)
             raise Exception(f'Invalid generation: want one of {", ".join(supported)}')
 
-        sdkconfig_name = 'sdkconfig.' + name
-        sdkconfig_path = os.path.join(project_path, sdkconfig_name)
-        if not os.path.exists(sdkconfig_path):
-            raise Exception(f'Missing sdkconfig file {sdkconfig_name}')
-        cache_entries = {
-            'SDKCONFIG_DEFAULTS': sdkconfig_path,
-        }
-        print(cache_entries)
-        global_args.define_cache_entry = list(global_args.define_cache_entry)
-        global_args.define_cache_entry.extend(['%s=%s' % (k, v) for k, v in cache_entries.items()])
+
+        # Generate .sdkconfig.defaults.generated that contains BADGE23_*
+        # options.
+        sdkconfig_defaults_path = os.path.join(project_path, 'sdkconfig.defaults')
+        sdkconfig_generated_path = os.path.join(project_path, '.sdkconfig.defaults.generated')
+        with open(sdkconfig_generated_path, 'w') as f:
+            if name == 'p6spiral':
+                f.write('CONFIG_BADGE23_HW_GEN_P6=y\n')
+                f.write('CONFIG_BADGE23_TOP_BOARD_SPIRALS=y\n')
+            else:
+                f.write(f'CONFIG_BADGE23_HW_GEN_{name.upper()}=y\n')
+            with open(sdkconfig_defaults_path) as f2:
+                f.write(f2.read())
+
+        global_args.define_cache_entry += [
+            'SDKCONFIG_DEFAULTS=' + sdkconfig_generated_path,
+        ]
+        print(global_args.define_cache_entry)
 
     # Add global options
     extensions = {
diff --git a/sdkconfig.p1 b/sdkconfig.defaults
similarity index 98%
rename from sdkconfig.p1
rename to sdkconfig.defaults
index 434090f6be..395b69df45 100644
--- a/sdkconfig.p1
+++ b/sdkconfig.defaults
@@ -39,4 +39,3 @@ CONFIG_LOG_DEFAULT_LEVEL_ERROR=y
 CONFIG_LWIP_PPP_SUPPORT=y
 CONFIG_LWIP_PPP_PAP_SUPPORT=y
 CONFIG_LWIP_PPP_CHAP_SUPPORT=y
-CONFIG_BADGE23_HW_GEN_P1=y
diff --git a/sdkconfig.p3 b/sdkconfig.p3
deleted file mode 100644
index e7b51954bf..0000000000
--- a/sdkconfig.p3
+++ /dev/null
@@ -1,42 +0,0 @@
-CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
-CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y
-CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y
-CONFIG_ESPTOOLPY_NO_STUB=y
-CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
-CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
-CONFIG_ESPTOOLPY_AFTER_NORESET=y
-CONFIG_PARTITION_TABLE_CUSTOM=y
-CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="components/micropython/vendor/ports/esp32/partitions-8MiB.csv"
-CONFIG_COMPILER_OPTIMIZATION_PERF=y
-CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y
-CONFIG_BT_ENABLED=y
-CONFIG_BT_NIMBLE_ENABLED=y
-CONFIG_BT_NIMBLE_MAX_CONNECTIONS=4
-CONFIG_BT_NIMBLE_PINNED_TO_CORE_1=y
-CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y
-CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y
-CONFIG_ESP32S3_DATA_CACHE_64KB=y
-CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
-CONFIG_ESP32S3_SPIRAM_SUPPORT=y
-CONFIG_SPIRAM_MODE_OCT=y
-CONFIG_SPIRAM_TYPE_ESPPSRAM64=y
-CONFIG_SPIRAM_SPEED_80M=y
-CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
-CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536
-CONFIG_PM_ENABLE=y
-CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y
-# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 is not set
-# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 is not set
-# CONFIG_ESP32_WIFI_IRAM_OPT is not set
-# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
-CONFIG_FATFS_LFN_HEAP=y
-CONFIG_FATFS_API_ENCODING_UTF_8=y
-CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2
-CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP=y
-CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
-CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
-CONFIG_LOG_DEFAULT_LEVEL_ERROR=y
-CONFIG_LWIP_PPP_SUPPORT=y
-CONFIG_LWIP_PPP_PAP_SUPPORT=y
-CONFIG_LWIP_PPP_CHAP_SUPPORT=y
-CONFIG_BADGE23_HW_GEN_P3=y
diff --git a/sdkconfig.p4 b/sdkconfig.p4
deleted file mode 100644
index 653d34beba..0000000000
--- a/sdkconfig.p4
+++ /dev/null
@@ -1,42 +0,0 @@
-CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
-CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y
-CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y
-CONFIG_ESPTOOLPY_NO_STUB=y
-CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
-CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
-CONFIG_ESPTOOLPY_AFTER_NORESET=y
-CONFIG_PARTITION_TABLE_CUSTOM=y
-CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="components/micropython/vendor/ports/esp32/partitions-8MiB.csv"
-CONFIG_COMPILER_OPTIMIZATION_PERF=y
-CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y
-CONFIG_BT_ENABLED=y
-CONFIG_BT_NIMBLE_ENABLED=y
-CONFIG_BT_NIMBLE_MAX_CONNECTIONS=4
-CONFIG_BT_NIMBLE_PINNED_TO_CORE_1=y
-CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y
-CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y
-CONFIG_ESP32S3_DATA_CACHE_64KB=y
-CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
-CONFIG_ESP32S3_SPIRAM_SUPPORT=y
-CONFIG_SPIRAM_MODE_OCT=y
-CONFIG_SPIRAM_TYPE_ESPPSRAM64=y
-CONFIG_SPIRAM_SPEED_80M=y
-CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
-CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536
-CONFIG_PM_ENABLE=y
-CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y
-# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 is not set
-# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 is not set
-# CONFIG_ESP32_WIFI_IRAM_OPT is not set
-# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
-CONFIG_FATFS_LFN_HEAP=y
-CONFIG_FATFS_API_ENCODING_UTF_8=y
-CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2
-CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP=y
-CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
-CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
-CONFIG_LOG_DEFAULT_LEVEL_ERROR=y
-CONFIG_LWIP_PPP_SUPPORT=y
-CONFIG_LWIP_PPP_PAP_SUPPORT=y
-CONFIG_LWIP_PPP_CHAP_SUPPORT=y
-CONFIG_BADGE23_HW_GEN_P4=y
diff --git a/sdkconfig.p6 b/sdkconfig.p6
deleted file mode 100644
index c8e1a160d5..0000000000
--- a/sdkconfig.p6
+++ /dev/null
@@ -1,43 +0,0 @@
-CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
-CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y
-CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y
-CONFIG_ESPTOOLPY_NO_STUB=y
-CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
-CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
-CONFIG_ESPTOOLPY_AFTER_NORESET=y
-CONFIG_PARTITION_TABLE_CUSTOM=y
-CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="components/micropython/vendor/ports/esp32/partitions-8MiB.csv"
-CONFIG_COMPILER_OPTIMIZATION_PERF=y
-CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y
-CONFIG_BT_ENABLED=y
-CONFIG_BT_NIMBLE_ENABLED=y
-CONFIG_BT_NIMBLE_MAX_CONNECTIONS=4
-CONFIG_BT_NIMBLE_PINNED_TO_CORE_1=y
-CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y
-CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y
-CONFIG_ESP32S3_DATA_CACHE_64KB=y
-CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
-CONFIG_ESP32S3_SPIRAM_SUPPORT=y
-CONFIG_SPIRAM_MODE_OCT=y
-CONFIG_SPIRAM_TYPE_ESPPSRAM64=y
-CONFIG_SPIRAM_SPEED_80M=y
-CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
-CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536
-CONFIG_PM_ENABLE=y
-CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y
-# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 is not set
-# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 is not set
-# CONFIG_ESP32_WIFI_IRAM_OPT is not set
-# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
-CONFIG_FATFS_LFN_HEAP=y
-CONFIG_FATFS_API_ENCODING_UTF_8=y
-CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2
-CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP=y
-CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
-CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
-CONFIG_LOG_DEFAULT_LEVEL_ERROR=y
-CONFIG_LWIP_PPP_SUPPORT=y
-CONFIG_LWIP_PPP_PAP_SUPPORT=y
-CONFIG_LWIP_PPP_CHAP_SUPPORT=y
-CONFIG_BADGE23_HW_GEN_P6=y
-CONFIG_BADGE23_TOP_BOARD_SPIKES=y
diff --git a/sdkconfig.p6spiral b/sdkconfig.p6spiral
deleted file mode 100644
index 4d8098e0a2..0000000000
--- a/sdkconfig.p6spiral
+++ /dev/null
@@ -1,43 +0,0 @@
-CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
-CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y
-CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y
-CONFIG_ESPTOOLPY_NO_STUB=y
-CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
-CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
-CONFIG_ESPTOOLPY_AFTER_NORESET=y
-CONFIG_PARTITION_TABLE_CUSTOM=y
-CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="micropython/ports/esp32/partitions-8MiB.csv"
-CONFIG_COMPILER_OPTIMIZATION_PERF=y
-CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y
-CONFIG_BT_ENABLED=y
-CONFIG_BT_NIMBLE_ENABLED=y
-CONFIG_BT_NIMBLE_MAX_CONNECTIONS=4
-CONFIG_BT_NIMBLE_PINNED_TO_CORE_1=y
-CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y
-CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y
-CONFIG_ESP32S3_DATA_CACHE_64KB=y
-CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
-CONFIG_ESP32S3_SPIRAM_SUPPORT=y
-CONFIG_SPIRAM_MODE_OCT=y
-CONFIG_SPIRAM_TYPE_ESPPSRAM64=y
-CONFIG_SPIRAM_SPEED_80M=y
-CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
-CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536
-CONFIG_PM_ENABLE=y
-CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y
-# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 is not set
-# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 is not set
-# CONFIG_ESP32_WIFI_IRAM_OPT is not set
-# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
-CONFIG_FATFS_LFN_HEAP=y
-CONFIG_FATFS_API_ENCODING_UTF_8=y
-CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2
-CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP=y
-CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
-CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
-CONFIG_LOG_DEFAULT_LEVEL_ERROR=y
-CONFIG_LWIP_PPP_SUPPORT=y
-CONFIG_LWIP_PPP_PAP_SUPPORT=y
-CONFIG_LWIP_PPP_CHAP_SUPPORT=y
-CONFIG_BADGE23_HW_GEN_P6=y
-CONFIG_BADGE23_TOP_BOARD_SPIRALS=y
-- 
GitLab