diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 4f26e1fb8f..98cde07a26 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -26,6 +26,8 @@ jobs: goarch: arm64 runs-on: ${{ matrix.os }} steps: + - name: exit early + run: command-does-not-exist - name: Install Dependencies run: | HOMEBREW_NO_AUTO_UPDATE=1 brew install qemu binaryen @@ -128,6 +130,8 @@ jobs: matrix: version: [16, 17, 18] steps: + - name: exit early + run: command-does-not-exist - name: Set up Homebrew uses: Homebrew/actions/setup-homebrew@master - name: Fix Python symlinks diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 206e6b7670..93b48f4df8 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -22,6 +22,8 @@ jobs: outputs: version: ${{ steps.version.outputs.version }} steps: + - name: exit early + run: command-does-not-exist - name: Install apk dependencies # tar: needed for actions/cache@v4 # git+openssh: needed for checkout (I think?) @@ -171,6 +173,8 @@ jobs: # potential bugs. runs-on: ubuntu-latest steps: + - name: exit early + run: command-does-not-exist - name: Checkout uses: actions/checkout@v4 with: diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 7ad4911d6c..70e03d9f39 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -15,6 +15,8 @@ jobs: nix-test: runs-on: ubuntu-latest steps: + - name: exit early + run: command-does-not-exist - name: Uninstall system LLVM # Hack to work around issue where we still include system headers for # some reason. diff --git a/.github/workflows/sizediff.yml b/.github/workflows/sizediff.yml index b9c40b1ea0..ab13085b8a 100644 --- a/.github/workflows/sizediff.yml +++ b/.github/workflows/sizediff.yml @@ -15,6 +15,8 @@ jobs: permissions: pull-requests: write steps: + - name: exit early + run: command-does-not-exist # Prepare, install tools - name: Add GOBIN to $PATH run: | diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 0994d47a70..2507dc3586 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -23,26 +23,27 @@ jobs: minimum-size: 8GB maximum-size: 24GB disk-root: "C:" - - uses: brechtm/setup-scoop@v2 - with: - scoop_update: 'false' - - name: Install Dependencies - shell: bash - run: | - scoop install ninja binaryen + #- uses: brechtm/setup-scoop@v2 + # with: + # scoop_update: 'false' + #- name: Install Dependencies + # shell: bash + # run: | + # scoop install ninja binaryen - name: Checkout uses: actions/checkout@v4 - with: - submodules: true + - name: submodules + shell: bash + run: git submodule update --init lib/mingw-w64 - name: Extract TinyGo version id: version shell: bash run: ./.github/workflows/tinygo-extract-version.sh | tee -a "$GITHUB_OUTPUT" - - name: Install Go - uses: actions/setup-go@v5 - with: - go-version: '1.23' - cache: true + #- name: Install Go + # uses: actions/setup-go@v5 + # with: + # go-version: '1.23' + # cache: true - name: Restore cached LLVM source uses: actions/cache/restore@v4 id: cache-llvm-source @@ -91,6 +92,11 @@ jobs: with: key: ${{ steps.cache-llvm-build.outputs.cache-primary-key }} path: llvm-build + - name: Test TinyGo + shell: bash + run: make test GOTESTFLAGS="-short -run=TestBuild -v" + - name: exit + run: command-does-not-exist - name: Cache wasi-libc sysroot uses: actions/cache@v4 id: cache-wasi-libc @@ -105,9 +111,6 @@ jobs: scoop install wasmtime@14.0.4 - name: make gen-device run: make -j3 gen-device - - name: Test TinyGo - shell: bash - run: make test GOTESTFLAGS="-short" - name: Build TinyGo release tarball shell: bash run: make build/release -j4 diff --git a/GNUmakefile b/GNUmakefile index e66b6af29f..0e662733e5 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -191,7 +191,7 @@ gen-device: gen-device-stm32 endif gen-device-avr: - @if [ ! -e lib/avr/README.md ]; then echo "Submodules have not been downloaded. Please download them using:\n git submodule update --init"; exit 1; fi + #@if [ ! -e lib/avr/README.md ]; then echo "Submodules have not been downloaded. Please download them using:\n git submodule update --init"; exit 1; fi $(GO) build -o ./build/gen-device-avr ./tools/gen-device-avr/ ./build/gen-device-avr lib/avr/packs/atmega src/device/avr/ ./build/gen-device-avr lib/avr/packs/tiny src/device/avr/ @@ -263,7 +263,7 @@ endif .PHONY: wasi-libc wasi-libc: lib/wasi-libc/sysroot/lib/wasm32-wasi/libc.a lib/wasi-libc/sysroot/lib/wasm32-wasi/libc.a: - @if [ ! -e lib/wasi-libc/Makefile ]; then echo "Submodules have not been downloaded. Please download them using:\n git submodule update --init"; exit 1; fi + #@if [ ! -e lib/wasi-libc/Makefile ]; then echo "Submodules have not been downloaded. Please download them using:\n git submodule update --init"; exit 1; fi cd lib/wasi-libc && $(MAKE) -j4 EXTRA_CFLAGS="-O2 -g -DNDEBUG -mnontrapping-fptoint -msign-ext" MALLOC_IMPL=none CC="$(CLANG)" AR=$(LLVM_AR) NM=$(LLVM_NM) # Generate WASI syscall bindings @@ -292,8 +292,8 @@ endif tinygo: ## Build the TinyGo compiler @if [ ! -f "$(LLVM_BUILDDIR)/bin/llvm-config" ]; then echo "Fetch and build LLVM first by running:"; echo " $(MAKE) llvm-source"; echo " $(MAKE) $(LLVM_BUILDDIR)"; exit 1; fi CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GOENVFLAGS) $(GO) build -buildmode exe -o build/tinygo$(EXE) -tags "byollvm osusergo" . -test: wasi-libc check-nodejs-version - CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) test $(GOTESTFLAGS) -timeout=1h -buildmode exe -tags "byollvm osusergo" $(GOTESTPKGS) +test: #wasi-libc check-nodejs-version + CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) test $(GOTESTFLAGS) -timeout=1h -buildmode exe -tags "byollvm osusergo" . # Standard library packages that pass tests on darwin, linux, wasi, and windows, but take over a minute in wasi TEST_PACKAGES_SLOW = \ diff --git a/main_test.go b/main_test.go index ecff134275..32612701ea 100644 --- a/main_test.go +++ b/main_test.go @@ -7,6 +7,7 @@ import ( "bufio" "bytes" "context" + "crypto/sha256" "errors" "flag" "io" @@ -16,6 +17,7 @@ import ( "regexp" "runtime" "slices" + "strconv" "strings" "sync" "testing" @@ -115,10 +117,17 @@ func TestBuild(t *testing.T) { return } - t.Run("Host", func(t *testing.T) { + t.Run("Debugging", func(t *testing.T) { t.Parallel() - runPlatTests(optionsFromTarget("", sema), tests, t) + for i := 0; i < 100; i++ { + options := optionsFromTarget("", sema) + t.Run(strconv.Itoa(i), func(t *testing.T) { + t.Parallel() + runTest("alias.go", options, t, nil, nil) + }) + } }) + return // Test a few build options. t.Run("build-options", func(t *testing.T) { @@ -422,7 +431,21 @@ func runTestWithConfig(name string, t *testing.T, options compileopts.Options, c // Build the test binary. stdout := &bytes.Buffer{} _, err = buildAndRun(pkgName, config, stdout, cmdArgs, environmentVars, time.Minute, func(cmd *exec.Cmd, result builder.BuildResult) error { - return cmd.Run() + data, err := os.ReadFile(result.Executable) + if err != nil { + t.Fatal("failed to read executable:", err) + } + hash := sha256.Sum256(data) + t.Logf("executable hash and size: %d %x", len(data), hash) + + t.Log("command:", cmd) + err = cmd.Run() + if err == nil { + t.Log(" error is nil!") + } else { + t.Log(" error:", err) + } + return err }) if err != nil { w := &bytes.Buffer{} diff --git a/src/runtime/runtime_windows.go b/src/runtime/runtime_windows.go index 4b0b8f65b8..765c87272c 100644 --- a/src/runtime/runtime_windows.go +++ b/src/runtime/runtime_windows.go @@ -53,7 +53,7 @@ func mainCRTStartup() int { runMain() // For libc compatibility. - return 0 + return 33 } // Must be a separate function to get the correct stack pointer. @@ -92,7 +92,9 @@ func os_runtime_args() []string { } func putchar(c byte) { - libc_putchar(int(c)) + if libc_putchar(int(c)) < 0 { + libc_exit(42) + } } var heapSize uintptr = 128 * 1024 // small amount to start