Use xgo for cross-build -> fix cgo + generate
This commit is contained in:
parent
f72215d29f
commit
eaf427db00
|
@ -3,8 +3,6 @@ ARG target=library
|
|||
#Build stage
|
||||
FROM $target/golang:1.10-alpine3.7 AS build-env
|
||||
|
||||
#QEMU phase
|
||||
|
||||
ARG GOARCH
|
||||
ARG GITEA_VERSION
|
||||
ARG TAGS="sqlite"
|
||||
|
|
4
Makefile
4
Makefile
|
@ -262,7 +262,11 @@ release-linux:
|
|||
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
||||
$(GO) get -u github.com/karalabe/xgo; \
|
||||
fi
|
||||
ifneq ($(XGOARCH),)
|
||||
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets "linux/${XGOARCH}" -out gitea-$(VERSION) .
|
||||
else
|
||||
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out gitea-$(VERSION) .
|
||||
endif
|
||||
ifeq ($(CI),drone)
|
||||
mv /build/* $(DIST)/binaries
|
||||
endif
|
||||
|
|
12
docker/Makefile
vendored
12
docker/Makefile
vendored
|
@ -25,14 +25,11 @@ docker-build:
|
|||
docker run -ti --rm -v $(CURDIR):/srv/app/src/code.gitea.io/gitea -w /srv/app/src/code.gitea.io/gitea -e TAGS="bindata $(TAGS)" webhippie/golang:edge make clean generate build
|
||||
|
||||
.PHONY: docker-cross
|
||||
docker-cross : clean generate docker-setup-qemu
|
||||
# docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) .
|
||||
docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) --build-arg TAGS="" -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) .
|
||||
docker-cross : docker-setup-qemu
|
||||
docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) .
|
||||
#exemple TARGET=arm64v8 GOARCH=arm64 QEMU_ARCH=aarch64 make docker-cross
|
||||
#exemple TARGET=amd64 GOARCH=amd64 QEMU_ARCH=amd64 make docker-cross
|
||||
#exemple TARGET=arm32v6 GOARCH=arm QEMU_ARCH=arm make docker-cross
|
||||
#TODO make generate fail with qemu (qemu: Unsupported syscall: 0) so we run as deps in host env
|
||||
#TODO seems to core dump when build with sqlite (maybe related to cgo) look at xgo to find a solution
|
||||
|
||||
.PHONY: docker-setup-qemu
|
||||
docker-setup-qemu:
|
||||
|
@ -40,8 +37,11 @@ docker-setup-qemu:
|
|||
echo "Loading qemu libs for multi-arch support."; \
|
||||
(cd docker && curl -sL https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCH}-static.tar.gz | tar xz); \
|
||||
docker run --rm --privileged multiarch/qemu-user-static:register --reset; \
|
||||
echo "Generate dockerfile for specific arch."; \
|
||||
sed "s/^#QEMU phase/COPY docker\/qemu-${QEMU_ARCH}-static* \/usr\/bin\//g" Dockerfile > docker/Dockerfile.${QEMU_ARCH}; \
|
||||
sed -i "s/make clean generate build/make build/g" docker/Dockerfile.${QEMU_ARCH}; \
|
||||
sed -i 's/^FROM $$target\/golang:1.10-alpine3.7 AS build-env/FROM karalabe\/xgo-latest AS build-env/g' docker/Dockerfile.${QEMU_ARCH}; \
|
||||
sed -i 's/^RUN apk --no-cache add build-base git/RUN GOARCH=$$GOHOSTARCH go get -u github.com\/jteeuwen\/go-bindata\/.../g' docker/Dockerfile.${QEMU_ARCH}; \
|
||||
sed -i 's/make clean generate build/PATH=$$PATH:\$$GOPATH\/bin\/ XGOARCH="${GOARCH}" make clean generate release-linux \&\& mv \/build\/gitea-* .\/gitea/g' docker/Dockerfile.${QEMU_ARCH}; \
|
||||
else cp Dockerfile docker/Dockerfile.${QEMU_ARCH}; \
|
||||
fi;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user