From 9cea3226db9f5a1a1192c19b73ff0e8125a7d008 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Mon, 8 Sep 2025 19:07:12 +0800 Subject: [PATCH 01/14] ci:fail when docker start error --- .github/workflows/populate_linux_sysroot.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/populate_linux_sysroot.sh b/.github/workflows/populate_linux_sysroot.sh index 7c976c33..b41d3252 100755 --- a/.github/workflows/populate_linux_sysroot.sh +++ b/.github/workflows/populate_linux_sysroot.sh @@ -139,7 +139,10 @@ populate_linux_sysroot() { /populate_linux_sysroot.sh } populate_linux_sysroot amd64 "${LINUX_AMD64_PREFIX}" & +PID1=$! populate_linux_sysroot arm64 "${LINUX_ARM64_PREFIX}" & +PID2=$! # Wait for both background processes to complete -wait +wait $PID1 || exit $? +wait $PID2 || exit $? From a19011897c61eac0e9614c2819981efb33827bbc Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Mon, 8 Sep 2025 22:43:24 +0800 Subject: [PATCH 02/14] install with esp-clang & new cache key --- .github/actions/setup-goreleaser/action.yml | 3 + .github/workflows/download_esp_clang.sh | 67 +++++++++++++++++++++ .github/workflows/release-build.yml | 7 +-- .goreleaser.yaml | 41 +++++++++---- internal/crosscompile/crosscompile.go | 4 +- internal/crosscompile/fetch_test.go | 2 +- 6 files changed, 105 insertions(+), 19 deletions(-) create mode 100755 .github/workflows/download_esp_clang.sh diff --git a/.github/actions/setup-goreleaser/action.yml b/.github/actions/setup-goreleaser/action.yml index d4ef8665..644388db 100644 --- a/.github/actions/setup-goreleaser/action.yml +++ b/.github/actions/setup-goreleaser/action.yml @@ -35,3 +35,6 @@ runs: - name: Check file run: tree .sysroot shell: bash + - name: Get Esp clang + run: bash .github/workflows/download_esp_clang.sh + shell: bash diff --git a/.github/workflows/download_esp_clang.sh b/.github/workflows/download_esp_clang.sh new file mode 100755 index 00000000..5ea6a764 --- /dev/null +++ b/.github/workflows/download_esp_clang.sh @@ -0,0 +1,67 @@ +#!/bin/bash +set -e + +ESP_CLANG_VERSION="19.1.2_20250905-3" +BASE_URL="https://github.com/goplus/espressif-llvm-project-prebuilt/releases/download/${ESP_CLANG_VERSION}" + +get_esp_clang_platform() { + local platform="$1" + local os="${platform%-*}" + local arch="${platform##*-}" + + case "${os}" in + "darwin") + case "${arch}" in + "amd64") echo "x86_64-apple-darwin" ;; + "arm64") echo "aarch64-apple-darwin" ;; + *) echo "Error: Unsupported darwin architecture: ${arch}" >&2; exit 1 ;; + esac + ;; + "linux") + case "${arch}" in + "amd64") echo "x86_64-linux-gnu" ;; + "arm64") echo "aarch64-linux-gnu" ;; + *) echo "Error: Unsupported linux architecture: ${arch}" >&2; exit 1 ;; + esac + ;; + *) + echo "Error: Unsupported OS: ${os}" >&2 + exit 1 + ;; + esac +} + +get_filename() { + local platform="$1" + local platform_suffix=$(get_esp_clang_platform "${platform}") + echo "clang-esp-${ESP_CLANG_VERSION}-${platform_suffix}.tar.xz" +} + +download_and_extract() { + local platform="$1" + local os="${platform%-*}" + local arch="${platform##*-}" + local filename=$(get_filename "${platform}") + local download_url="${BASE_URL}/${filename}" + + echo "Downloading ESP Clang for ${platform}..." + echo " URL: ${download_url}" + + mkdir -p ".sysroot/${os}/${arch}/crosscompile/clang" + curl -fsSL "${download_url}" | tar -xJ -C ".sysroot/${os}/${arch}/crosscompile/clang" --strip-components=1 + + if [[ ! -f ".sysroot/${os}/${arch}/crosscompile/clang/bin/clang++" ]]; then + echo "Error: clang++ not found in ${platform} toolchain" + exit 1 + fi + + echo "${platform} ESP Clang ready in .sysroot/${os}/${arch}/crosscompile/clang" +} + +echo "Downloading ESP Clang toolchain version ${ESP_CLANG_VERSION}..." + +for platform in "darwin-amd64" "darwin-arm64" "linux-amd64" "linux-arm64"; do + download_and_extract "${platform}" +done + +echo "ESP Clang toolchain completed successfully!" diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 4c14fc00..56c6e0e7 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -27,7 +27,6 @@ jobs: LINUX_KEY="linux-sysroot-${{ hashFiles('.github/workflows/populate_linux_sysroot.sh', '.github/workflows/release-build.yml') }}-v1.0.0" echo "darwin-key=$DARWIN_KEY" >> $GITHUB_OUTPUT echo "linux-key=$LINUX_KEY" >> $GITHUB_OUTPUT - populate-darwin-sysroot: runs-on: macos-latest timeout-minutes: 30 @@ -107,7 +106,7 @@ jobs: -v $(pwd):/go/src/llgo \ -w /go/src/llgo \ ghcr.io/goreleaser/goreleaser-cross:v1.22 \ - release --skip=publish,nfpm,snapcraft --snapshot --clean + release --verbose --parallelism=1 --skip=publish,nfpm,snapcraft --snapshot --clean - name: Upload Darwin AMD64 Artifacts uses: actions/upload-artifact@v4 @@ -205,7 +204,7 @@ jobs: mod-version: ${{ matrix.go-mod-version }} release: - needs: [setup, build, test-artifacts] + needs: [setup, test-artifacts] runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: @@ -231,4 +230,4 @@ jobs: -v $(pwd):/go/src/llgo \ -w /go/src/llgo \ ghcr.io/goreleaser/goreleaser-cross:v1.22 \ - release --clean --skip nfpm,snapcraft + release --parallelism=1 --clean --verbose --skip nfpm,snapcraft diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 4a42dbe3..7bf527e1 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -18,68 +18,84 @@ builds: - id: llgo-darwin-amd64 main: ./cmd/llgo binary: bin/llgo + hooks: + pre: + - rm -rf crosscompile + - cp -r .sysroot/darwin/amd64/crosscompile . flags: - -tags=darwin,amd64,byollvm ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} - - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=/usr/local/opt/llvm@19/bin/llvm-config + - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=../crosscompile/clang/bin/llvm-config env: - CC=o64-clang - CXX=o64-clang++ - - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_AMD64}}/usr/local/opt/llvm@19/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_AMD64}}/usr/local/opt/llvm@19/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_CPPFLAGS=-I{{.Env.PWD}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=-L{{.Env.PWD}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm targets: - darwin_amd64 mod_timestamp: "{{.CommitTimestamp}}" - id: llgo-darwin-arm64 main: ./cmd/llgo binary: bin/llgo + hooks: + pre: + - rm -rf crosscompile + - cp -r .sysroot/darwin/arm64/crosscompile . flags: - -tags=darwin,arm64,byollvm ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} - - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=/opt/homebrew/opt/llvm@19/bin/llvm-config + - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=../crosscompile/clang/bin/llvm-config env: - CC=oa64-clang - CXX=oa64-clang++ - - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_ARM64}}/opt/homebrew/opt/llvm@19/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/opt/homebrew/opt/llvm@19/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_CPPFLAGS=-I{{.Env.PWD}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=-L{{.Env.PWD}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm targets: - darwin_arm64 mod_timestamp: "{{.CommitTimestamp}}" - id: llgo-linux-amd64 main: ./cmd/llgo binary: bin/llgo + hooks: + pre: + - rm -rf crosscompile + - cp -r .sysroot/linux/amd64/crosscompile . flags: - -tags=linux,amd64,byollvm ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} - - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=/usr/lib/llvm-19/bin/llvm-config + - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=../crosscompile/clang/bin/llvm-config env: - CC=x86_64-linux-gnu-gcc - CXX=x86_64-linux-gnu-g++ - - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.SYSROOT_LINUX_AMD64}}/usr/include/llvm-19 -I{{.Env.SYSROOT_LINUX_AMD64}}/usr/include/llvm-c-19 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/usr/lib/llvm-19/lib -lLLVM-19 + - CGO_CPPFLAGS=-I{{.Env.PWD}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=-L{{.Env.PWD}}/crosscompile/clang/lib -lLLVM-19 targets: - linux_amd64 mod_timestamp: "{{.CommitTimestamp}}" - id: llgo-linux-arm64 main: ./cmd/llgo binary: bin/llgo + hooks: + pre: + - rm -rf crosscompile + - cp -r .sysroot/linux/arm64/crosscompile . flags: - -tags=linux,arm64,byollvm ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} - - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=/usr/lib/llvm-19/bin/llvm-config + - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=../crosscompile/clang/bin/llvm-config env: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/usr/include/llvm-19 -I{{.Env.SYSROOT_LINUX_ARM64}}/usr/include/llvm-c-19 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/usr/lib/llvm-19/lib -lLLVM-19 + - CGO_CPPFLAGS=-I{{.Env.PWD}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=-L{{.Env.PWD}}/crosscompile/clang/lib -lLLVM-19 targets: - linux_arm64 mod_timestamp: "{{.CommitTimestamp}}" @@ -93,6 +109,7 @@ archives: - LICENSE - README.md - runtime + - crosscompile checksum: name_template: "{{.ProjectName}}{{.Version}}.checksums.txt" diff --git a/internal/crosscompile/crosscompile.go b/internal/crosscompile/crosscompile.go index fbd8962a..8c0bf788 100644 --- a/internal/crosscompile/crosscompile.go +++ b/internal/crosscompile/crosscompile.go @@ -48,8 +48,8 @@ var ( ) var ( - espClangBaseUrl = "https://github.com/goplus/espressif-llvm-project-prebuilt/releases/download/19.1.2_20250820" - espClangVersion = "19.1.2_20250820" + espClangBaseUrl = "https://github.com/goplus/espressif-llvm-project-prebuilt/releases/download/19.1.2_20250905-3" + espClangVersion = "19.1.2_20250905-3" ) // cacheRoot can be overridden for testing diff --git a/internal/crosscompile/fetch_test.go b/internal/crosscompile/fetch_test.go index d5e4bc57..9be771dd 100644 --- a/internal/crosscompile/fetch_test.go +++ b/internal/crosscompile/fetch_test.go @@ -605,7 +605,7 @@ func TestESPClangDownloadWhenNotExists(t *testing.T) { } server := createTestServer(t, map[string]string{ - "clang-esp-19.1.2_20250820-linux.tar.xz": string(archiveContent), + fmt.Sprintf("clang-esp-%s-linux.tar.xz", espClangVersion): string(archiveContent), }) defer server.Close() From 848432ea6865748cda7904c3fa5b440c9c0c1ce9 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Mon, 8 Sep 2025 22:53:39 +0800 Subject: [PATCH 03/14] ci:sysroot for linux --- .goreleaser.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 7bf527e1..365d68ba 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -73,8 +73,8 @@ builds: env: - CC=x86_64-linux-gnu-gcc - CXX=x86_64-linux-gnu-g++ - - CGO_CPPFLAGS=-I{{.Env.PWD}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.PWD}}/crosscompile/clang/lib -lLLVM-19 + - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.PWD}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.PWD}}/crosscompile/clang/lib -lLLVM-19 targets: - linux_amd64 mod_timestamp: "{{.CommitTimestamp}}" @@ -94,8 +94,8 @@ builds: env: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - - CGO_CPPFLAGS=-I{{.Env.PWD}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.PWD}}/crosscompile/clang/lib -lLLVM-19 + - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.PWD}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.PWD}}/crosscompile/clang/lib -lLLVM-19 targets: - linux_arm64 mod_timestamp: "{{.CommitTimestamp}}" From 68623f0b2746e53ffae58a10fa2f9f42eba7c198 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 10:16:39 +0800 Subject: [PATCH 04/14] env:find crosscompile llvm --- .goreleaser.yaml | 4 ---- internal/crosscompile/crosscompile.go | 3 ++- xtool/env/llvm/llvm.go | 18 +++++++++++++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 365d68ba..10fbc007 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -27,7 +27,6 @@ builds: ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} - - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=../crosscompile/clang/bin/llvm-config env: - CC=o64-clang - CXX=o64-clang++ @@ -48,7 +47,6 @@ builds: ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} - - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=../crosscompile/clang/bin/llvm-config env: - CC=oa64-clang - CXX=oa64-clang++ @@ -69,7 +67,6 @@ builds: ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} - - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=../crosscompile/clang/bin/llvm-config env: - CC=x86_64-linux-gnu-gcc - CXX=x86_64-linux-gnu-g++ @@ -90,7 +87,6 @@ builds: ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} - - -X github.com/goplus/llgo/xtool/env/llvm.ldLLVMConfigBin=../crosscompile/clang/bin/llvm-config env: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ diff --git a/internal/crosscompile/crosscompile.go b/internal/crosscompile/crosscompile.go index 8c0bf788..5b31aea8 100644 --- a/internal/crosscompile/crosscompile.go +++ b/internal/crosscompile/crosscompile.go @@ -15,6 +15,7 @@ import ( "github.com/goplus/llgo/internal/flash" "github.com/goplus/llgo/internal/targets" "github.com/goplus/llgo/internal/xtool/llvm" + envllvm "github.com/goplus/llgo/xtool/env/llvm" ) type Export struct { @@ -108,7 +109,7 @@ func getESPClangRoot(forceEspClang bool) (clangRoot string, err error) { llgoRoot := env.LLGoROOT() // First check if clang exists in LLGoROOT - espClangRoot := filepath.Join(llgoRoot, "crosscompile", "clang") + espClangRoot := filepath.Join(llgoRoot, envllvm.CrosscompileClangPath) if _, err = os.Stat(espClangRoot); err == nil { clangRoot = espClangRoot return diff --git a/xtool/env/llvm/llvm.go b/xtool/env/llvm/llvm.go index a34757c9..6bea3099 100644 --- a/xtool/env/llvm/llvm.go +++ b/xtool/env/llvm/llvm.go @@ -22,6 +22,7 @@ import ( "path/filepath" "strings" + "github.com/goplus/llgo/internal/env" "github.com/goplus/llgo/xtool/clang" "github.com/goplus/llgo/xtool/llvm/install_name_tool" "github.com/goplus/llgo/xtool/llvm/llvmlink" @@ -30,9 +31,13 @@ import ( // ----------------------------------------------------------------------------- -// defaultLLVMConfigBin returns the default path to the llvm-config binary. It -// checks the LLVM_CONFIG environment variable first, then searches in PATH. If -// not found, it returns [ldLLVMConfigBin] as a last resort. +const ( + // CrosscompileClangPath is the relative path from LLGO_ROOT to the clang installation + CrosscompileClangPath = "crosscompile/clang" +) + +// ----------------------------------------------------------------------------- + func defaultLLVMConfigBin() string { bin := os.Getenv("LLVM_CONFIG") if bin != "" { @@ -42,6 +47,13 @@ func defaultLLVMConfigBin() string { if bin != "" { return bin } + + llgoRoot := env.LLGoROOT() + // Check LLGO_ROOT/crosscompile/clang for llvm-config + crossLLVMConfigBin := filepath.Join(llgoRoot, CrosscompileClangPath, "bin", "llvm-config") + if _, err := os.Stat(crossLLVMConfigBin); err == nil { + return crossLLVMConfigBin + } return ldLLVMConfigBin } From 0340ef2a75b20ead4352c57a3a45c6b68c29946e Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 11:06:17 +0800 Subject: [PATCH 05/14] goreleaser:move clang to result --- .github/workflows/release-build.yml | 4 +-- .goreleaser.yaml | 39 ++++++++++------------------- 2 files changed, 15 insertions(+), 28 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 56c6e0e7..99f990d0 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -106,7 +106,7 @@ jobs: -v $(pwd):/go/src/llgo \ -w /go/src/llgo \ ghcr.io/goreleaser/goreleaser-cross:v1.22 \ - release --verbose --parallelism=1 --skip=publish,nfpm,snapcraft --snapshot --clean + release --verbose --skip=publish,nfpm,snapcraft --snapshot --clean - name: Upload Darwin AMD64 Artifacts uses: actions/upload-artifact@v4 @@ -230,4 +230,4 @@ jobs: -v $(pwd):/go/src/llgo \ -w /go/src/llgo \ ghcr.io/goreleaser/goreleaser-cross:v1.22 \ - release --parallelism=1 --clean --verbose --skip nfpm,snapcraft + release --clean --verbose --skip nfpm,snapcraft diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 10fbc007..97840e52 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -18,10 +18,6 @@ builds: - id: llgo-darwin-amd64 main: ./cmd/llgo binary: bin/llgo - hooks: - pre: - - rm -rf crosscompile - - cp -r .sysroot/darwin/amd64/crosscompile . flags: - -tags=darwin,amd64,byollvm ldflags: @@ -30,18 +26,14 @@ builds: env: - CC=o64-clang - CXX=o64-clang++ - - CGO_CPPFLAGS=-I{{.Env.PWD}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.PWD}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_AMD64}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_AMD64}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm targets: - darwin_amd64 mod_timestamp: "{{.CommitTimestamp}}" - id: llgo-darwin-arm64 main: ./cmd/llgo binary: bin/llgo - hooks: - pre: - - rm -rf crosscompile - - cp -r .sysroot/darwin/arm64/crosscompile . flags: - -tags=darwin,arm64,byollvm ldflags: @@ -50,18 +42,14 @@ builds: env: - CC=oa64-clang - CXX=oa64-clang++ - - CGO_CPPFLAGS=-I{{.Env.PWD}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.PWD}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm targets: - darwin_arm64 mod_timestamp: "{{.CommitTimestamp}}" - id: llgo-linux-amd64 main: ./cmd/llgo binary: bin/llgo - hooks: - pre: - - rm -rf crosscompile - - cp -r .sysroot/linux/amd64/crosscompile . flags: - -tags=linux,amd64,byollvm ldflags: @@ -70,18 +58,14 @@ builds: env: - CC=x86_64-linux-gnu-gcc - CXX=x86_64-linux-gnu-g++ - - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.PWD}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.PWD}}/crosscompile/clang/lib -lLLVM-19 + - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -lLLVM-19 targets: - linux_amd64 mod_timestamp: "{{.CommitTimestamp}}" - id: llgo-linux-arm64 main: ./cmd/llgo binary: bin/llgo - hooks: - pre: - - rm -rf crosscompile - - cp -r .sysroot/linux/arm64/crosscompile . flags: - -tags=linux,arm64,byollvm ldflags: @@ -90,8 +74,8 @@ builds: env: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.PWD}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.PWD}}/crosscompile/clang/lib -lLLVM-19 + - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 targets: - linux_arm64 mod_timestamp: "{{.CommitTimestamp}}" @@ -105,8 +89,11 @@ archives: - LICENSE - README.md - runtime - - crosscompile - + - src: ".sysroot/{{.Os}}/{{.Arch}}/crosscompile/clang/**/*" + dst: crosscompile/clang + strip_parent: true + info: + mode: 0755 checksum: name_template: "{{.ProjectName}}{{.Version}}.checksums.txt" From 6ce28e4d4e9d60e1d936abc7e891f46d2e3dd9c9 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 11:27:39 +0800 Subject: [PATCH 06/14] goreleaser:keep file level --- .goreleaser.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 97840e52..52e30391 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -89,9 +89,8 @@ archives: - LICENSE - README.md - runtime - - src: ".sysroot/{{.Os}}/{{.Arch}}/crosscompile/clang/**/*" + - src: ".sysroot/{{.Os}}/{{.Arch}}/crosscompile/clang" dst: crosscompile/clang - strip_parent: true info: mode: 0755 checksum: From 92beb562bf3dc8e3ae774cad5aeb5840eefc29a2 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 11:57:38 +0800 Subject: [PATCH 07/14] goreleaser:relative rpath --- .goreleaser.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 52e30391..6a2a3d14 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -27,7 +27,7 @@ builds: - CC=o64-clang - CXX=o64-clang++ - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_AMD64}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_AMD64}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_AMD64}}/crosscompile/clang/lib -Wl,-rpath,@executable_path/../crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm targets: - darwin_amd64 mod_timestamp: "{{.CommitTimestamp}}" @@ -43,7 +43,7 @@ builds: - CC=oa64-clang - CXX=oa64-clang++ - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/lib -Wl,-rpath,@executable_path/../crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm targets: - darwin_arm64 mod_timestamp: "{{.CommitTimestamp}}" @@ -59,7 +59,7 @@ builds: - CC=x86_64-linux-gnu-gcc - CXX=x86_64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -lLLVM-19 + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib -lLLVM-19 targets: - linux_amd64 mod_timestamp: "{{.CommitTimestamp}}" @@ -75,7 +75,7 @@ builds: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib -lLLVM-19 targets: - linux_arm64 mod_timestamp: "{{.CommitTimestamp}}" From d0cf57fa95fae0a61f40558394d21f05628e532e Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 12:03:35 +0800 Subject: [PATCH 08/14] ci:test release without llvm dependency --- .github/actions/setup-deps/action.yml | 36 +++++++++++++++++----- .github/actions/test-helloworld/action.yml | 2 +- .github/workflows/release-build.yml | 2 ++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/.github/actions/setup-deps/action.yml b/.github/actions/setup-deps/action.yml index 7a0669c8..b0bdb4bc 100644 --- a/.github/actions/setup-deps/action.yml +++ b/.github/actions/setup-deps/action.yml @@ -5,6 +5,10 @@ inputs: description: "LLVM version to install" required: true default: "19" + install-llvm: + description: "Whether to install LLVM" + required: false + default: "true" runs: using: "composite" @@ -14,9 +18,17 @@ runs: shell: bash run: | brew update - brew install llvm@${{inputs.llvm-version}} lld@${{inputs.llvm-version}} bdw-gc openssl libffi libuv - brew link --overwrite llvm@${{inputs.llvm-version}} lld@${{inputs.llvm-version}} libffi - echo "$(brew --prefix llvm@${{inputs.llvm-version}})/bin" >> $GITHUB_PATH + + # Install LLVM if requested + if [[ "${{ inputs.install-llvm }}" == "true" ]]; then + brew install llvm@${{inputs.llvm-version}} lld@${{inputs.llvm-version}} + brew link --overwrite llvm@${{inputs.llvm-version}} lld@${{inputs.llvm-version}} + echo "$(brew --prefix llvm@${{inputs.llvm-version}})/bin" >> $GITHUB_PATH + fi + + # Install common dependencies + brew install bdw-gc openssl libffi libuv + brew link --overwrite libffi # Install optional deps for demos. # @@ -31,11 +43,19 @@ runs: if: runner.os == 'Linux' shell: bash run: | - echo "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-${{inputs.llvm-version}} main" | sudo tee /etc/apt/sources.list.d/llvm.list - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - sudo apt-get update - sudo apt-get install -y llvm-${{inputs.llvm-version}}-dev clang-${{inputs.llvm-version}} libclang-${{inputs.llvm-version}}-dev lld-${{inputs.llvm-version}} libunwind-${{inputs.llvm-version}}-dev libc++-${{inputs.llvm-version}}-dev pkg-config libgc-dev libssl-dev zlib1g-dev libffi-dev libcjson-dev libuv1-dev - echo "PATH=/usr/lib/llvm-${{inputs.llvm-version}}/bin:$PATH" >> $GITHUB_ENV + # Install LLVM if requested + if [[ "${{ inputs.install-llvm }}" == "true" ]]; then + echo "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-${{inputs.llvm-version}} main" | sudo tee /etc/apt/sources.list.d/llvm.list + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + sudo apt-get update + sudo apt-get install -y llvm-${{inputs.llvm-version}}-dev clang-${{inputs.llvm-version}} libclang-${{inputs.llvm-version}}-dev lld-${{inputs.llvm-version}} libunwind-${{inputs.llvm-version}}-dev libc++-${{inputs.llvm-version}}-dev + echo "PATH=/usr/lib/llvm-${{inputs.llvm-version}}/bin:$PATH" >> $GITHUB_ENV + else + sudo apt-get update + fi + + # Install common dependencies + sudo apt-get install -y pkg-config libgc-dev libssl-dev zlib1g-dev libffi-dev libcjson-dev libuv1-dev # Install optional deps for demos. # diff --git a/.github/actions/test-helloworld/action.yml b/.github/actions/test-helloworld/action.yml index 9ce49ef9..f13bb257 100644 --- a/.github/actions/test-helloworld/action.yml +++ b/.github/actions/test-helloworld/action.yml @@ -38,7 +38,7 @@ runs: Hello, LLGo! Hello, LLGo! Hello LLGo by cpp/std.Str" - OUTPUT=$(llgo run . 2>&1) + OUTPUT=$(llgo run . 2>&1 | tee /dev/stderr) if echo "$OUTPUT" | grep -qF "$EXPECTED"; then echo "Basic test passed" else diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 99f990d0..811310d2 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -178,6 +178,8 @@ jobs: - uses: actions/checkout@v5 - name: Install dependencies uses: ./.github/actions/setup-deps + with: + install-llvm: false - name: Set up Go uses: actions/setup-go@v5 with: From e05f890b94cb8a45abab0064f3acf45a21110b3e Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 12:25:39 +0800 Subject: [PATCH 09/14] temp remove origin rpath set --- .goreleaser.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 6a2a3d14..2b821608 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -43,7 +43,7 @@ builds: - CC=oa64-clang - CXX=oa64-clang++ - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/lib -Wl,-rpath,@executable_path/../crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm targets: - darwin_arm64 mod_timestamp: "{{.CommitTimestamp}}" @@ -75,7 +75,7 @@ builds: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib -lLLVM-19 + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 targets: - linux_arm64 mod_timestamp: "{{.CommitTimestamp}}" From 9f4875320359cf5ac2968adafbdfdbaffd3c7b93 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 12:34:36 +0800 Subject: [PATCH 10/14] allow sysroot --- .goreleaser.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 2b821608..36808e08 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -60,6 +60,7 @@ builds: - CXX=x86_64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib -lLLVM-19 + - CGO_LDFLAGS_ALLOW=--sysroot.* targets: - linux_amd64 mod_timestamp: "{{.CommitTimestamp}}" @@ -76,6 +77,7 @@ builds: - CXX=aarch64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 + - CGO_LDFLAGS_ALLOW=--sysroot.* targets: - linux_arm64 mod_timestamp: "{{.CommitTimestamp}}" From f66bbb7fc348c4ca372e0399b44ae2e4478dbc1a Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 12:51:34 +0800 Subject: [PATCH 11/14] execute rpath search --- .github/actions/test-helloworld/action.yml | 2 +- .goreleaser.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/actions/test-helloworld/action.yml b/.github/actions/test-helloworld/action.yml index f13bb257..6ef57444 100644 --- a/.github/actions/test-helloworld/action.yml +++ b/.github/actions/test-helloworld/action.yml @@ -38,7 +38,7 @@ runs: Hello, LLGo! Hello, LLGo! Hello LLGo by cpp/std.Str" - OUTPUT=$(llgo run . 2>&1 | tee /dev/stderr) + OUTPUT=$(llgo run -v . 2>&1 | tee /dev/stderr) if echo "$OUTPUT" | grep -qF "$EXPECTED"; then echo "Basic test passed" else diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 36808e08..681e422b 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -27,7 +27,7 @@ builds: - CC=o64-clang - CXX=o64-clang++ - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_AMD64}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_AMD64}}/crosscompile/clang/lib -Wl,-rpath,@executable_path/../crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_AMD64}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm -Wl,-rpath,@executable_path/../crosscompile/clang/lib targets: - darwin_amd64 mod_timestamp: "{{.CommitTimestamp}}" @@ -43,7 +43,7 @@ builds: - CC=oa64-clang - CXX=oa64-clang++ - CGO_CPPFLAGS=-I{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/include -mmacosx-version-min=10.13 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm + - CGO_LDFLAGS=-L{{.Env.SYSROOT_DARWIN_ARM64}}/crosscompile/clang/lib -mmacosx-version-min=10.13 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM-19 -lz -lm -Wl,-rpath,@executable_path/../crosscompile/clang/lib targets: - darwin_arm64 mod_timestamp: "{{.CommitTimestamp}}" @@ -59,7 +59,7 @@ builds: - CC=x86_64-linux-gnu-gcc - CXX=x86_64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib -lLLVM-19 + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -lLLVM-19 -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib - CGO_LDFLAGS_ALLOW=--sysroot.* targets: - linux_amd64 @@ -76,7 +76,7 @@ builds: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib - CGO_LDFLAGS_ALLOW=--sysroot.* targets: - linux_arm64 From 3be12dce44a9ff79962200d935607e68db080e30 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 13:44:11 +0800 Subject: [PATCH 12/14] ci:test helloword with embed target --- .github/actions/test-helloworld/action.yml | 14 ++++++++++++-- .goreleaser.yaml | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/actions/test-helloworld/action.yml b/.github/actions/test-helloworld/action.yml index 6ef57444..9020e788 100644 --- a/.github/actions/test-helloworld/action.yml +++ b/.github/actions/test-helloworld/action.yml @@ -38,7 +38,7 @@ runs: Hello, LLGo! Hello, LLGo! Hello LLGo by cpp/std.Str" - OUTPUT=$(llgo run -v . 2>&1 | tee /dev/stderr) + OUTPUT=$(llgo run . 2>&1 | tee /dev/stderr) if echo "$OUTPUT" | grep -qF "$EXPECTED"; then echo "Basic test passed" else @@ -50,4 +50,14 @@ runs: exit 1 fi - #TODO(zzy): Test embed targets, need dispatch target dir + cd ../.. + mkdir -p _test/emb && cd _test/emb + cat > main.go << 'EOL' + package main + + func main() { + } + EOL + llgo build -v -target esp32-coreboard-v2 -o demo.out . + test -f demo.out.elf && echo "ESP32 cross-compilation test passed: demo.out.elf generated" + exit $? diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 681e422b..2169ef1d 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -91,6 +91,7 @@ archives: - LICENSE - README.md - runtime + - targets - src: ".sysroot/{{.Os}}/{{.Arch}}/crosscompile/clang" dst: crosscompile/clang info: From e63ebb8151de00ce9306b4c4dd31109f37f31b26 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 15:05:52 +0800 Subject: [PATCH 13/14] goreleaser:avoid fail --- .goreleaser.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 2169ef1d..fc8a949f 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -59,7 +59,7 @@ builds: - CC=x86_64-linux-gnu-gcc - CXX=x86_64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -lLLVM-19 -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -lLLVM-19 -Wl,-rpath,$ORIGIN/../crosscompile/clang/lib - CGO_LDFLAGS_ALLOW=--sysroot.* targets: - linux_amd64 @@ -76,7 +76,7 @@ builds: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 -Wl,-rpath,\$ORIGIN/../crosscompile/clang/lib + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 -Wl,-rpath,$ORIGIN/../crosscompile/clang/lib - CGO_LDFLAGS_ALLOW=--sysroot.* targets: - linux_arm64 From a17f1f0bb0db1d159b4dfd9226ba01adebf96ef8 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Tue, 9 Sep 2025 16:08:40 +0800 Subject: [PATCH 14/14] set origin test avoid transform --- .github/workflows/release-build.yml | 3 ++- .goreleaser.yaml | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 811310d2..bb8a4423 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -206,7 +206,8 @@ jobs: mod-version: ${{ matrix.go-mod-version }} release: - needs: [setup, test-artifacts] + needs: + [setup, test-artifacts, populate-darwin-sysroot, populate-linux-sysroot] runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: diff --git a/.goreleaser.yaml b/.goreleaser.yaml index fc8a949f..bbd0104c 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -55,11 +55,12 @@ builds: ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} + - '-extldflags=-Wl,-rpath,$ORIGIN/../crosscompile/clang/lib' env: - CC=x86_64-linux-gnu-gcc - CXX=x86_64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -I{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -lLLVM-19 -Wl,-rpath,$ORIGIN/../crosscompile/clang/lib + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_AMD64}} -L{{.Env.SYSROOT_LINUX_AMD64}}/crosscompile/clang/lib -lLLVM-19 - CGO_LDFLAGS_ALLOW=--sysroot.* targets: - linux_amd64 @@ -72,11 +73,12 @@ builds: ldflags: - -X github.com/goplus/llgo/internal/env.buildVersion=v{{.Version}} - -X github.com/goplus/llgo/internal/env.buildTime={{.Date}} + - '-extldflags=-Wl,-rpath,$ORIGIN/../crosscompile/clang/lib' env: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ - CGO_CPPFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -I{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 -Wl,-rpath,$ORIGIN/../crosscompile/clang/lib + - CGO_LDFLAGS=--sysroot={{.Env.SYSROOT_LINUX_ARM64}} -L{{.Env.SYSROOT_LINUX_ARM64}}/crosscompile/clang/lib -lLLVM-19 - CGO_LDFLAGS_ALLOW=--sysroot.* targets: - linux_arm64