update windows resources generation
New solution is not hardcoded to amd64 but integrates with the cross toolchain and support creating arm binaries. Go has been updated so that ASLR works Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
@ -11,7 +11,6 @@ set -eu
|
||||
: "${GO_BUILDTAGS=}"
|
||||
: "${GO_STRIP=}"
|
||||
|
||||
set -x
|
||||
. ./scripts/build/.variables
|
||||
|
||||
if [ -z "$CGO_ENABLED" ]; then
|
||||
@ -55,6 +54,23 @@ if [ -n "$GO_STRIP" ]; then
|
||||
LDFLAGS="$LDFLAGS -s -w"
|
||||
fi
|
||||
|
||||
if [ "$(go env GOOS)" = "windows" ]; then
|
||||
# Generate a Windows file version of the form major,minor,patch,build
|
||||
VERSION_QUAD=$(printf "%s" "$VERSION" | sed -re 's/^([0-9.]*).*$/\1/' | tr . , | sed -re 's/^[0-9]+$/\0,0/' | sed -re 's/^[0-9]+,[0-9]+$/\0,0/' | sed -re 's/^[0-9]+,[0-9]+,[0-9]+$/\0,0/')
|
||||
|
||||
set --
|
||||
[ -n "$VERSION" ] && set -- "$@" -D "DOCKER_VERSION=\"$VERSION\""
|
||||
[ -n "$VERSION_QUAD" ] && set -- "$@" -D "DOCKER_VERSION_QUAD=$VERSION_QUAD"
|
||||
[ -n "$GITCOMMIT" ] && set -- "$@" -D "DOCKER_COMMIT=\"$GITCOMMIT\""
|
||||
|
||||
windres=$($(go env CC) --print-prog-name=windres)
|
||||
|
||||
target="$(dirname "$0")/../../cli/winresources/rsrc_$(go env GOARCH).syso"
|
||||
mkdir -p "$(dirname "${target}")"
|
||||
"$windres" -i "$(dirname "$0")/../winresources/docker.rc" -o "$target" "$@"
|
||||
echo "package winresources" > "$(dirname "${target}")/stub_windows.go"
|
||||
fi
|
||||
|
||||
echo "Building $GO_LINKMODE $(basename "${TARGET}")"
|
||||
|
||||
export GO111MODULE=auto
|
||||
|
||||
@ -1,23 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Build a windows binary from linux
|
||||
#
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
source ./scripts/build/.variables
|
||||
|
||||
export CC=x86_64-w64-mingw32-gcc
|
||||
export CGO_ENABLED=1
|
||||
export GOOS=windows
|
||||
export GOARCH=amd64
|
||||
|
||||
# Override TARGET
|
||||
TARGET="build/docker-$GOOS-$GOARCH.exe"
|
||||
|
||||
echo "Generating windows resources"
|
||||
go generate ./cli/winresources
|
||||
|
||||
echo "Building $TARGET"
|
||||
# TODO: -tags pkcs11
|
||||
go build -o "${TARGET}" --ldflags "${LDFLAGS}" "${SOURCE}"
|
||||
@ -1,45 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Compile the Windows resources into the sources
|
||||
#
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
# shellcheck source=/go/src/github.com/docker/cli/scripts/build/.variables
|
||||
source "$SCRIPTDIR"/../build/.variables
|
||||
|
||||
RESOURCES=$SCRIPTDIR/../winresources
|
||||
|
||||
TEMPDIR=$(mktemp -d)
|
||||
trap 'rm -rf $TEMPDIR' EXIT
|
||||
|
||||
if [ "$(go env GOHOSTOS)" = "windows" ]; then
|
||||
WINDRES=windres
|
||||
else
|
||||
# Cross compiling
|
||||
WINDRES=x86_64-w64-mingw32-windres
|
||||
fi
|
||||
|
||||
# Generate a Windows file version of the form major,minor,patch,build (with any part optional)
|
||||
VERSION_QUAD=$(printf "%s" "$VERSION" | sed -re 's/^([0-9.]*).*$/\1/' | tr . ,)
|
||||
|
||||
# Pass version and commit information into the resource compiler
|
||||
defs=
|
||||
[ -n "$VERSION" ] && defs+=( "-D DOCKER_VERSION=\"$VERSION\"")
|
||||
[ -n "$VERSION_QUAD" ] && defs+=( "-D DOCKER_VERSION_QUAD=$VERSION_QUAD")
|
||||
[ -n "$GITCOMMIT" ] && defs+=( "-D DOCKER_COMMIT=\"$GITCOMMIT\"")
|
||||
|
||||
makeres() {
|
||||
# shellcheck disable=SC2086
|
||||
"$WINDRES" \
|
||||
-i "$RESOURCES/$1" \
|
||||
-o "$3" \
|
||||
-F "$2" \
|
||||
--use-temp-file \
|
||||
-I "$TEMPDIR" \
|
||||
${defs[*]}
|
||||
}
|
||||
|
||||
makeres docker.rc pe-x86-64 rsrc_amd64.syso
|
||||
makeres docker.rc pe-i386 rsrc_386.syso
|
||||
Reference in New Issue
Block a user