-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Also provide binaries for Android ARM #1578
Conversation
@@ -150,6 +151,9 @@ platform-unixlike: | |||
platform-android-arm64: | |||
make GOOS=android GOARCH=arm64 NPMDIR=npm/esbuild-android-arm64 platform-unixlike | |||
|
|||
platform-android-arm: | |||
make GOOS=android GOARCH=arm NPMDIR=npm/esbuild-android-arm platform-unixlike |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am unable to run this on my computer. I get this:
$ make GOOS=android GOARCH=arm NPMDIR=npm/esbuild-android-arm platform-unixlike
test -n "android" && test -n "arm" && test -n "npm/esbuild-android-arm"
mkdir -p "npm/esbuild-android-arm/bin"
cd "npm/esbuild-android-arm" && npm version "0.12.25" --allow-same-version
v0.12.25
CGO_ENABLED=0 GOOS="android" GOARCH="arm" go build "-ldflags=-s -w" -trimpath -o "npm/esbuild-android-arm/bin/esbuild" ./cmd/esbuild
# github.com/evanw/esbuild/cmd/esbuild
loadinternal: cannot find runtime/cgo
/usr/local/go/pkg/tool/darwin_amd64/link: running clang failed: exit status 1
ld: warning: option -s is obsolete and being ignored
ld: unknown option: -z
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [platform-unixlike] Error 2
This is on macOS 11.5.1. I don't understand why cgo is apparently enabled despite CGO_ENABLED=0. Here is a reduced reproduction:
$ cat main.go
package main
import "runtime/debug"
func main() {
debug.SetGCPercent(-1)
}
$ CGO_ENABLED=0 GOOS="android" GOARCH="arm" go build main.go
# command-line-arguments
loadinternal: cannot find runtime/cgo
/usr/local/go/pkg/tool/darwin_amd64/link: running clang failed: exit status 1
ld: unknown option: -z
clang: error: linker command failed with exit code 1 (use -v to see invocation)
This appears to be a bug in Go.
Edit: I have filed this bug as golang/go#48246.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did you try compiling with older Golang versions?
Don't know why but I feel it's somehow related to wrong dynamic linker path when cross compiling issue (not mentioning the issue here since it may be unrelated)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The Go team said that "internal linking" is unsupported with Android ARM and building this requires a C toolchain to build. Maybe this means I need to build this on a 32-bit Android ARM device?
Are you able to build esbuild using this command? If so, what OS version, CPU architecture, and Go version are you on?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was able to build on Android ARM 7.0 using on Termux using
go build ./cmd/esbuild
The Golang version I had was the latest in official Termux repository as of writing this comment.
go version
output
go version go1.16.7 android/arm
and I have a esbuild
binary.
And about cross compiling, you need to get the C compiler from Android SDK.
If you need some example on how to do it see termux/termux-packages
Under scripts/build/termux_step_setup_toolchain.sh
, you can see how it's setting up CC, CXX and other environment variables (along with some other changes which might not be needed here)
I'm closing this as I don't want to complicate esbuild's deploy process by having to install the entire Android build toolchain for this one platform. All of the other 18 platforms I already support can be built fine by Go on any platform without installing anything. I still don't understand why Go doesn't support cross-platform builds for this platform in particular (Go and Android are even both Google projects!) but that's up to them I guess. If you want to run esbuild on 32-bit Android ARM, you'll have to build it yourself. Sorry. |
Closes #1556