Skip to content

Commit

Permalink
Better.
Browse files Browse the repository at this point in the history
  • Loading branch information
floitsch committed Jul 19, 2023
1 parent e036262 commit 2a5c918
Show file tree
Hide file tree
Showing 2 changed files with 272 additions and 7 deletions.
19 changes: 12 additions & 7 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,22 +76,27 @@ jobs:
run: |
make TOIT_VERSION=${{ github.event.inputs.toit-version }} download-toit
- name: Build the host SDK
run: |
make build-host
- name: Install ESP32 tools
- name: Patch Toit
run: |
toit/third_party/esp-idf/install.sh
# Temporary patch until upstream is fixed.
(cd toit && patch -p1 < ../patches/toit.patch)
- name: Build tool
- name: Build the host SDK
env:
IDF_CCACHE_ENABLE: 1
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_BASEDIR: ${{ github.workspace }}
CCACHE_COMPRESS: true
CCACHE_COMPRESSLEVEL: '6'
CCACHE_MAXSIZE: 800M
run: |
make build-host
- name: Install ESP32 tools
run: |
toit/third_party/esp-idf/install.sh
- name: Build tool
run: |
build/host/sdk/bin/toit.compile -o build/env-tool tools/main.toit
Expand Down
260 changes: 260 additions & 0 deletions patches/toit.patch
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)

0 comments on commit 2a5c918

Please sign in to comment.