-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
272 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,260 @@ | ||
diff --git a/Makefile b/Makefile | ||
index 1d704aa4..20e3791a 100644 | ||
--- a/Makefile | ||
+++ b/Makefile | ||
@@ -18,8 +18,9 @@ | ||
SHELL=bash | ||
|
||
# General options. | ||
-HOST=host | ||
-BUILD_TYPE=Release | ||
+BUILD ?= build | ||
+HOST ?= host | ||
+BUILD_TYPE ?= Release | ||
TARGET ?= $(HOST) | ||
TOOLCHAIN ?= $(TARGET) | ||
|
||
@@ -94,58 +95,58 @@ endif | ||
# cmake needs to be rerun, but we don't detect that, so it might not | ||
# get run enough. It takes <1s on Linux to run cmake, so it's | ||
# usually best to run it eagerly. | ||
-.PHONY: build/$(TARGET)/CMakeCache.txt | ||
-build/$(TARGET)/CMakeCache.txt: | ||
+.PHONY: $(BUILD)/$(TARGET)/CMakeCache.txt | ||
+$(BUILD)/$(TARGET)/CMakeCache.txt: | ||
$(MAKE) rebuild-cmake | ||
|
||
ifneq ($(TARGET),$(HOST)) | ||
# Support for cross-compilation. | ||
|
||
-.PHONY: build/$(HOST)/CMakeCache.txt | ||
-build/$(HOST)/CMakeCache.txt: | ||
+.PHONY: $(BUILD)/$(HOST)/CMakeCache.txt | ||
+$(BUILD)/$(HOST)/CMakeCache.txt: | ||
$(MAKE) TARGET=$(HOST) rebuild-cmake | ||
|
||
.PHONY: sysroot | ||
sysroot: check-env | ||
- $(MAKE) build/$(TARGET)/sysroot/usr | ||
+ $(MAKE) $(BUILD)/$(TARGET)/sysroot/usr | ||
endif | ||
|
||
-BIN_DIR = $(CURDIR)/build/$(HOST)/sdk/bin | ||
+BIN_DIR = $(abspath $(BUILD)/$(HOST)/sdk/bin) | ||
TOITPKG_BIN = $(BIN_DIR)/toit.pkg$(EXE_SUFFIX) | ||
TOITC_BIN = $(BIN_DIR)/toit.compile$(EXE_SUFFIX) | ||
FIRMWARE_BIN = $(TOIT_TOOLS_DIR)/firmware$(EXE_SUFFIX) | ||
|
||
.PHONY: download-packages | ||
-download-packages: check-env build/$(HOST)/CMakeCache.txt tools | ||
- (cd build/$(HOST) && ninja download_packages) | ||
+download-packages: check-env $(BUILD)/$(HOST)/CMakeCache.txt tools | ||
+ (cd $(BUILD)/$(HOST) && ninja download_packages) | ||
|
||
.PHONY: rebuild-cmake | ||
rebuild-cmake: | ||
- mkdir -p build/$(TARGET) | ||
- (cd build/$(TARGET) && cmake ../../ -G Ninja -DTOITC=$(TOITC_BIN) -DTOITPKG=$(TOITPKG_BIN) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_TOOLCHAIN_FILE=../../toolchains/$(TOOLCHAIN).cmake --no-warn-unused-cli) | ||
+ mkdir -p $(BUILD)/$(TARGET) | ||
+ (cd $(BUILD)/$(TARGET) && cmake $(CURDIR) -G Ninja -DTOITC=$(TOITC_BIN) -DTOITPKG=$(TOITPKG_BIN) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_TOOLCHAIN_FILE=$(CURDIR)/toolchains/$(TOOLCHAIN).cmake --no-warn-unused-cli) | ||
|
||
.PHONY: host-tools | ||
-host-tools: check-env build/$(HOST)/CMakeCache.txt | ||
- (cd build/$(HOST) && ninja build_tools) | ||
+host-tools: check-env $(BUILD)/$(HOST)/CMakeCache.txt | ||
+ (cd $(BUILD)/$(HOST) && ninja build_tools) | ||
|
||
.PHONY: tools | ||
# This rule contains a reference to host-tools. | ||
# This means that on host we will try to build host twice, but | ||
# the second attempt will be a no-op. | ||
-tools: host-tools check-env build/$(TARGET)/CMakeCache.txt | ||
- (cd build/$(TARGET) && ninja build_tools) | ||
+tools: host-tools check-env $(BUILD)/$(TARGET)/CMakeCache.txt | ||
+ (cd $(BUILD)/$(TARGET) && ninja build_tools) | ||
|
||
.PHONY: toit-tools | ||
toit-tools: tools download-packages | ||
- (cd build/$(TARGET) && ninja build_toit_tools) | ||
+ (cd $(BUILD)/$(TARGET) && ninja build_toit_tools) | ||
|
||
.PHONY: vessels | ||
-vessels: check-env build/$(TARGET)/CMakeCache.txt | ||
- (cd build/$(TARGET) && ninja build_vessels) | ||
+vessels: check-env $(BUILD)/$(TARGET)/CMakeCache.txt | ||
+ (cd $(BUILD)/$(TARGET) && ninja build_vessels) | ||
|
||
.PHONY: version-file | ||
-version-file: build/$(TARGET)/CMakeCache.txt | ||
- (cd build/$(TARGET) && ninja build_version_file) | ||
+version-file: $(BUILD)/$(TARGET)/CMakeCache.txt | ||
+ (cd $(BUILD)/$(TARGET) && ninja build_version_file) | ||
|
||
|
||
.PHONY: pi | ||
@@ -157,17 +158,17 @@ SYSROOT_URL=https://github.com/toitlang/sysroots/releases/download/v1.3.0/sysroo | ||
|
||
rebuild-cmake: sysroot | ||
|
||
-build/$(TARGET)/sysroot/sysroot.tar.xz: | ||
+$(BUILD)/$(TARGET)/sysroot/sysroot.tar.xz: | ||
if [[ "$(SYSROOT_URL)" == "" ]]; then \ | ||
echo "No sysroot URL for $(TARGET)"; \ | ||
exit 1; \ | ||
fi | ||
|
||
- mkdir -p build/$(TARGET)/sysroot | ||
- curl --location --output build/$(TARGET)/sysroot/sysroot.tar.xz $(SYSROOT_URL) | ||
+ mkdir -p $(BUILD)/$(TARGET)/sysroot | ||
+ curl --location --output $(BUILD)/$(TARGET)/sysroot/sysroot.tar.xz $(SYSROOT_URL) | ||
|
||
-build/$(TARGET)/sysroot/usr: build/$(TARGET)/sysroot/sysroot.tar.xz | ||
- tar x -f build/$(TARGET)/sysroot/sysroot.tar.xz -C build/$(TARGET)/sysroot | ||
+$(BUILD)/$(TARGET)/sysroot/usr: $(BUILD)/$(TARGET)/sysroot/sysroot.tar.xz | ||
+ tar x -f $(BUILD)/$(TARGET)/sysroot/sysroot.tar.xz -C $(BUILD)/$(TARGET)/sysroot | ||
touch $@ | ||
endif | ||
|
||
@@ -196,7 +197,7 @@ esp32: | ||
|
||
.PHONY: esp32-no-env | ||
esp32-no-env: check-env check-esp32-env sdk | ||
- cmake -E env IDF_TARGET=$(IDF_TARGET) IDF_CCACHE_ENABLE=1 python$(EXE_SUFFIX) $(IDF_PY) -C toolchains/$(ESP32_CHIP) -B build/$(ESP32_CHIP) -p "$(ESP32_PORT)" build | ||
+ cmake -E env IDF_TARGET=$(IDF_TARGET) IDF_CCACHE_ENABLE=1 python$(EXE_SUFFIX) $(IDF_PY) -C toolchains/$(ESP32_CHIP) -B $(BUILD)/$(ESP32_CHIP) -p "$(ESP32_PORT)" build | ||
|
||
# ESP32 MENU CONFIG | ||
.PHONY: menuconfig | ||
@@ -206,7 +207,7 @@ menuconfig: | ||
|
||
.PHONY: menuconfig-no-env | ||
menuconfig-no-env: check-env check-esp32-env | ||
- cmake -E env IDF_TARGET=$(IDF_TARGET) python$(EXE_SUFFIX) $(IDF_PY) -C toolchains/$(ESP32_CHIP) -B build/$(ESP32_CHIP) -p "$(ESP32_PORT)" menuconfig | ||
+ cmake -E env IDF_TARGET=$(IDF_TARGET) python$(EXE_SUFFIX) $(IDF_PY) -C toolchains/$(ESP32_CHIP) -B $(BUILD)/$(ESP32_CHIP) -p "$(ESP32_PORT)" menuconfig | ||
|
||
.PHONY: flash | ||
flash: | ||
@@ -215,21 +216,21 @@ flash: | ||
|
||
.PHONY: flash-no-env | ||
flash-no-env: esp32-no-env | ||
- cmake -E env IDF_TARGET=$(IDF_TARGET) python$(EXE_SUFFIX) $(IDF_PY) -C toolchains/$(ESP32_CHIP) -B build/$(ESP32_CHIP) -p "$(ESP32_PORT)" flash monitor | ||
+ cmake -E env IDF_TARGET=$(IDF_TARGET) python$(EXE_SUFFIX) $(IDF_PY) -C toolchains/$(ESP32_CHIP) -B $(BUILD)/$(ESP32_CHIP) -p "$(ESP32_PORT)" flash monitor | ||
|
||
# UTILITY | ||
.PHONY: clean | ||
clean: | ||
- rm -rf build/ | ||
+ rm -rf $(BUILD)/ | ||
find toolchains -name sdkconfig -exec rm '{}' ';' | ||
|
||
INSTALL_SRC_ARCH := $(TARGET) | ||
|
||
.PHONY: install-sdk install | ||
install-sdk: | ||
- install -D --target-directory="$(DESTDIR)$(prefix)"/bin "$(CURDIR)"/build/$(INSTALL_SRC_ARCH)/sdk/bin/* | ||
- install -D --target-directory="$(DESTDIR)$(prefix)"/tools "$(CURDIR)"/build/$(INSTALL_SRC_ARCH)/sdk/tools/* | ||
- install -D --target-directory="$(DESTDIR)$(prefix)"/vessels "$(CURDIR)"/build/$(INSTALL_SRC_ARCH)/sdk/vessels/* | ||
+ install -D --target-directory="$(DESTDIR)$(prefix)"/bin "$(BUILD)"/$(INSTALL_SRC_ARCH)/sdk/bin/* | ||
+ install -D --target-directory="$(DESTDIR)$(prefix)"/tools "$(BUILD)"/$(INSTALL_SRC_ARCH)/sdk/tools/* | ||
+ install -D --target-directory="$(DESTDIR)$(prefix)"/vessels "$(BUILD)"/$(INSTALL_SRC_ARCH)/sdk/vessels/* | ||
mkdir -p "$(DESTDIR)$(prefix)"/lib | ||
cp -R "$(CURDIR)"/lib/* "$(DESTDIR)$(prefix)"/lib | ||
find "$(DESTDIR)$(prefix)"/lib -type f -exec chmod 644 {} \; | ||
@@ -240,41 +241,41 @@ install: install-sdk | ||
# TESTS (host) | ||
.PHONY: test | ||
test: | ||
- (cd build/$(HOST) && ninja check_slow check_fuzzer_lib) | ||
+ (cd $(BUILD)/$(HOST) && ninja check_slow check_fuzzer_lib) | ||
|
||
.PHONY: test-fast | ||
test-fast: | ||
- (cd build/$(HOST) && ninja check) | ||
+ (cd $(BUILD)/$(HOST) && ninja check) | ||
|
||
.PHONY: update-gold | ||
update-gold: | ||
$(MAKE) rebuild-cmake | ||
- (cd build/$(HOST) && ninja update_gold) | ||
- (cd build/$(HOST) && ninja update_minus_s_gold) | ||
- (cd build/$(HOST) && ninja update_type_gold) | ||
+ (cd $(BUILD)/$(HOST) && ninja update_gold) | ||
+ (cd $(BUILD)/$(HOST) && ninja update_minus_s_gold) | ||
+ (cd $(BUILD)/$(HOST) && ninja update_type_gold) | ||
|
||
.PHONY: test-health | ||
test-health: download-packages | ||
$(MAKE) rebuild-cmake | ||
- (cd build/$(HOST) && ninja check_health) | ||
+ (cd $(BUILD)/$(HOST) && ninja check_health) | ||
|
||
.PHONY: update-health-gold | ||
update-health-gold: download-packages | ||
$(MAKE) rebuild-cmake | ||
- (cd build/$(HOST) && ninja clear_health_gold) | ||
- (cd build/$(HOST) && ninja update_health_gold) | ||
+ (cd $(BUILD)/$(HOST) && ninja clear_health_gold) | ||
+ (cd $(BUILD)/$(HOST) && ninja update_health_gold) | ||
|
||
.PHONY: enable-external | ||
enable-external: | ||
$(MAKE) rebuild-cmake # Ensure the cmake-directory was created. | ||
- cmake -DTOIT_TEST_EXTERNAL=ON build/$(HOST) | ||
+ cmake -DTOIT_TEST_EXTERNAL=ON $(BUILD)/$(HOST) | ||
$(MAKE) download-external | ||
$(MAKE) rebuild-cmake | ||
$(MAKE) download-packages | ||
|
||
.PHONY: check-external-enabled | ||
check-external-enabled: | ||
- @ if ! cmake -LA -N build/$(HOST) | grep 'TOIT_TEST_EXTERNAL:BOOL=ON'; then \ | ||
+ @ if ! cmake -LA -N $(BUILD)/$(HOST) | grep 'TOIT_TEST_EXTERNAL:BOOL=ON'; then \ | ||
echo "external projects are not enabled. Run 'make enable-external' first."; \ | ||
exit 1; \ | ||
fi | ||
@@ -282,23 +283,23 @@ check-external-enabled: | ||
.PHONY: disable-external | ||
disable-external: check-external-enabled | ||
$(MAKE) rebuild-cmake # Ensure the cmake-directory was created. | ||
- cmake -DTOIT_TEST_EXTERNAL=OFF build/$(HOST) | ||
+ cmake -DTOIT_TEST_EXTERNAL=OFF $(BUILD)/$(HOST) | ||
|
||
.PHONY: download-external | ||
download-external: check-external-enabled | ||
# Download with higher parallelism. | ||
- (cd build/$(HOST) && ninja -j 16 download_external) | ||
+ (cd $(BUILD)/$(HOST) && ninja -j 16 download_external) | ||
|
||
.PHONY: test-external | ||
test-external: check-external-enabled | ||
- (cd build/$(HOST) && ninja check_external) | ||
+ (cd $(BUILD)/$(HOST) && ninja check_external) | ||
|
||
.PHONY: test-external-health | ||
test-external-health: check-external-enabled | ||
- (cd build/$(HOST) && ninja check_external_health) | ||
+ (cd $(BUILD)/$(HOST) && ninja check_external_health) | ||
|
||
.PHONY: update-external-health-gold | ||
update-external-health-gold: download-packages check-external-enabled | ||
$(MAKE) rebuild-cmake | ||
- (cd build/$(HOST) && ninja clear_external_health_gold) | ||
- (cd build/$(HOST) && ninja update_external_health_gold) | ||
+ (cd $(BUILD)/$(HOST) && ninja clear_external_health_gold) | ||
+ (cd $(BUILD)/$(HOST) && ninja update_external_health_gold) | ||
diff --git a/toolchains/idf/components/toit/CMakeLists.txt b/toolchains/idf/components/toit/CMakeLists.txt | ||
index 894d9069..a1cba859 100644 | ||
--- a/toolchains/idf/components/toit/CMakeLists.txt | ||
+++ b/toolchains/idf/components/toit/CMakeLists.txt | ||
@@ -12,7 +12,10 @@ set(TOIT_SYSTEM_NAME "esp32") | ||
|
||
set(TOIT_INTERPRETER_FLAGS "-fno-crossjumping;-fno-tree-tail-merge" CACHE STRING "toit interpreter flags") | ||
|
||
-set(TOIT_SDK_DIR ${TOIT_BASE_DIR}/build/host/sdk) | ||
+# If TOIT_SDK_DIR is not set, do it now. | ||
+if (NOT TOIT_SDK_DIR) | ||
+ set(TOIT_SDK_DIR ${TOIT_BASE_DIR}/build/host/sdk) | ||
+endif() | ||
set(TOIT_SDK_DIR ${TOIT_SDK_DIR} PARENT_SCOPE) | ||
set(TOITC ${TOIT_SDK_DIR}/bin/toit.compile) | ||
set(TOITPKG ${TOIT_SDK_DIR}/bin/toit.pkg) |