Skip to content

Commit 81a9833

Browse files
authored
Makefile: Easier target switching (#21)
Allows you to seamlessly move between running `make` and `make IDF_TARGET=esp32c6` for example
1 parent 14e6193 commit 81a9833

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

Makefile

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ SHELL := bash
88

99
# Change to your configuration. See toit/toolchains for the available targets.
1010
# Then run 'make init'.
11-
IDF_TARGET := esp32
11+
IDF_TARGET ?= esp32
1212

1313
# Set to false to avoid initializing submodules at every build.
1414
INITIALIZE_SUBMODULES := true
@@ -52,12 +52,43 @@ build-host: host
5252

5353
.PHONY: esp32
5454
esp32: initialize-submodules
55+
@$(MAKE) idf-prepare
56+
57+
@if [ -f $(BUILD_ROOT)/sdkconfig ]; then \
58+
current_target=$$(grep -E "^CONFIG_IDF_TARGET_" $(BUILD_ROOT)/sdkconfig | sed -n 's/CONFIG_IDF_TARGET_\([^=]*\)=y/\1/p' | tr '[:upper:]' '[:lower:]' || true); \
59+
if [ -n "$$current_target" ] && [ "$$current_target" != "$(IDF_TARGET)" ]; then \
60+
echo "Existing sdkconfig is for target '$$current_target' but IDF_TARGET is '$(IDF_TARGET)'. Removing stale sdkconfig so a fresh one will be created."; \
61+
rm -f $(BUILD_ROOT)/sdkconfig; \
62+
fi; \
63+
fi
5564
@if [[ ! -f $(BUILD_ROOT)/sdkconfig.defaults ]]; then \
5665
echo "Run 'make init' first"; \
5766
exit 1; \
5867
fi
5968
@$(call toit-make,esp32)
6069

70+
.PHONY: idf-prepare
71+
idf-prepare:
72+
@echo "Preparing ESP-IDF for target '$(IDF_TARGET)'"
73+
@echo "Checking ESP-IDF installation for target '$(IDF_TARGET)' (python env + toolchain)"
74+
@python_env_installed=false; \
75+
if ls "$$HOME/.espressif/python_env"/idf* >/dev/null 2>&1; then python_env_installed=true; fi; \
76+
toolchain_installed=false; \
77+
if [ -d "$$HOME/.espressif/tools" ] && [ -n "$$(ls -A "$$HOME/.espressif/tools" 2>/dev/null)" ]; then \
78+
if [ -d "$$HOME/.espressif/tools/xtensa-esp-elf" ] || [ -d "$$HOME/.espressif/tools/riscv32-esp-elf" ]; then \
79+
toolchain_installed=true; \
80+
fi; \
81+
fi; \
82+
if [ "$$python_env_installed" = true ] && [ "$$toolchain_installed" = true ]; then \
83+
echo "ESP-IDF appears installed (python env + toolchain present); skipping install.sh"; \
84+
else \
85+
echo "Installing ESP-IDF tools for target '$(IDF_TARGET)' (this may take a while)"; \
86+
( cd "$(IDF_PATH)" && ./install.sh $(IDF_TARGET) ) || true; \
87+
fi
88+
89+
@echo "Setting ESP-IDF target to '$(IDF_TARGET)'"
90+
@bash -lc 'if [ -f "$(IDF_PATH)/export.sh" ]; then . "$(IDF_PATH)/export.sh"; fi; cd "$(BUILD_ROOT)" && "$(IDF_PY)" set-target $(IDF_TARGET)' || true
91+
6192
.PHONY: menuconfig
6293
menuconfig: initialize-submodules
6394
@$(call toit-make,menuconfig)

0 commit comments

Comments
 (0)