Skip to content

Commit 34e8339

Browse files
committed
Fixed crossbuild for Linux ARMv6/ARMv7
1 parent 26b02c2 commit 34e8339

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

DistTasks.yml

+31-3
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ tasks:
2020
all:
2121
desc: Build for distribution for all platforms
2222
cmds:
23-
- task: Linux_ARMv6
2423
- task: Windows_32bit
2524
- task: Windows_64bit
2625
- task: Linux_32bit
2726
- task: Linux_64bit
27+
- task: Linux_ARMv6
2828
- task: Linux_ARMv7
2929
- task: Linux_ARM64
3030
- task: macOS_64bit
@@ -135,7 +135,7 @@ tasks:
135135
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_7"
136136
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
137137
BUILD_PLATFORM: "linux/armv7"
138-
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
138+
CONTAINER_TAG: "{{ .GO_VERSION }}-armhf"
139139
PACKAGE_PLATFORM: "Linux_ARMv7"
140140
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
141141

@@ -157,7 +157,35 @@ tasks:
157157
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
158158
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
159159
BUILD_PLATFORM: "linux/armv6"
160-
CONTAINER_TAG: "{{ .GO_VERSION }}-armel"
160+
# We are experiencing the following error with ARMv6 build:
161+
#
162+
# # github.com/arduino/arduino-cli
163+
# net(.text): unexpected relocation type 296 (R_ARM_V4BX)
164+
# panic: runtime error: invalid memory address or nil pointer dereference
165+
# [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x51ae53]
166+
#
167+
# goroutine 1 [running]:
168+
# cmd/link/internal/loader.(*Loader).SymName(0xc000095c00, 0x0, 0xc0000958d8, 0x5a0ac)
169+
# /usr/local/go/src/cmd/link/internal/loader/loader.go:684 +0x53
170+
# cmd/link/internal/ld.dynrelocsym2(0xc000095880, 0x5a0ac)
171+
# /usr/local/go/src/cmd/link/internal/ld/data.go:777 +0x295
172+
# cmd/link/internal/ld.(*dodataState).dynreloc2(0xc007df9800, 0xc000095880)
173+
# /usr/local/go/src/cmd/link/internal/ld/data.go:794 +0x89
174+
# cmd/link/internal/ld.(*Link).dodata2(0xc000095880, 0xc007d00000, 0x60518, 0x60518)
175+
# /usr/local/go/src/cmd/link/internal/ld/data.go:1434 +0x4d4
176+
# cmd/link/internal/ld.Main(0x8729a0, 0x4, 0x8, 0x1, 0xd, 0xe, 0x0, 0x0, 0x6d7737, 0x12, ...)
177+
# /usr/local/go/src/cmd/link/internal/ld/main.go:302 +0x123a
178+
# main.main()
179+
# /usr/local/go/src/cmd/link/main.go:68 +0x1dc
180+
# Error: failed building for linux/armv6: exit status 2
181+
#
182+
# This seems to be a problem in the go builder 1.16.x that removed support for the R_ARM_V4BX instruction:
183+
# https://github.com/golang/go/pull/44998
184+
# https://groups.google.com/g/golang-codereviews/c/yzN80xxwu2E
185+
#
186+
# Until there is a fix released we must use a recent gcc for Linux_ARMv6 build, so for this
187+
# build we select the debian10 based container.
188+
CONTAINER_TAG: "{{ .GO_VERSION }}-armel-debian10"
161189
PACKAGE_PLATFORM: "Linux_ARMv6"
162190
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
163191

0 commit comments

Comments
 (0)