Skip to content

Commit d9ebc48

Browse files
committed
docker: make possible to only build the engine without committing it to Unvanquished
One can only build the engine without committing it to Unvanquished by doing: ./docker-build --engine-reference=<git_reference> --targets=<engine_target> The reference for the game is now optional, the current master branch will be built if not set. The currently committed engine reference for the game reference will be built if the engine reference is not set. The repository clone is now complete, instead of doing a shadow clone. This makes easier to checkout arbitrary commits, and in the future this will ensure the most recent tag is reachable, to compute the version string.
1 parent b82ff40 commit d9ebc48

5 files changed

+30
-24
lines changed

build-release

+5-8
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,8 @@ build () {
480480
cmake_opts="${cmake_opts} -DBUILD_GAME_NACL=ON -DBUILD_GAME_NACL_NEXE=ON -DBUILD_CGAME=ON -DBUILD_SGAME=ON -DBUILD_CLIENT=OFF -DBUILD_TTY_CLIENT=OFF -DBUILD_SERVER=OFF"
481481
fi
482482

483+
local daemon_dir="${root_dir}/daemon"
484+
483485
if "${build_engine}"
484486
then
485487
engine_archive_basename="${target}"
@@ -498,7 +500,7 @@ build () {
498500
fi
499501

500502
strip="${mingw_arch_prefix}-w64-mingw32-strip"
501-
cmake_opts="${cmake_opts} -DCMAKE_TOOLCHAIN_FILE=${root_dir}/daemon/cmake/cross-toolchain-mingw${bitness}.cmake"
503+
cmake_opts="${cmake_opts} -DCMAKE_TOOLCHAIN_FILE=${daemon_dir}/cmake/cross-toolchain-mingw${bitness}.cmake"
502504
# unused
503505
# cmake_opts="${cmake_opts} -DPKG_CONFIG_EXECUTABLE=${mingw_arch_prefix}-w64-mingw32-pkg-config"
504506
fi
@@ -578,7 +580,7 @@ build () {
578580
fi
579581

580582
strip="${mingw_arch_prefix}-w64-mingw32-strip"
581-
cmake_opts="${cmake_opts} -DCMAKE_TOOLCHAIN_FILE=${root_dir}/daemon/cmake/cross-toolchain-mingw${bitness}.cmake"
583+
cmake_opts="${cmake_opts} -DCMAKE_TOOLCHAIN_FILE=${daemon_dir}/cmake/cross-toolchain-mingw${bitness}.cmake"
582584
# unused
583585
# cmake_opts="${cmake_opts} -DPKG_CONFIG_EXECUTABLE=${mingw_arch_prefix}-w64-mingw32-pkg-config"
584586
fi
@@ -599,7 +601,7 @@ build () {
599601
then
600602
# configuration
601603

602-
cmake -H"${root_dir}" \
604+
cmake -H"${daemon_dir}" \
603605
-B"${target_build_dir}" \
604606
-G"Unix Makefiles" \
605607
-D"CMAKE_C_FLAGS=${cmake_cflags}" \
@@ -609,11 +611,6 @@ build () {
609611
|| throwError INTERNAL "${target} cmake failed"
610612
fi
611613

612-
if "${build_vm}" || "${build_engine}"
613-
then
614-
daemon_dir="$(cmake -H"${root_dir}" -B"${target_build_dir}" -LH | grep '^DAEMON_DIR:' | sed -e 's/[^=]*=//')"
615-
fi
616-
617614
if "${build_vm}"
618615
then
619616
# build vm

docker-build

+8-8
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,9 @@ def main():
115115
parser.add_argument("--clean", dest="clean", help="Delete previous target and universal zip builds.", action="store_true")
116116
parser.add_argument("--prune", dest="prune", help="Delete all docker images from previous target builds.", action="store_true")
117117
parser.add_argument("--reimage", dest="reimage", help="Rebuild the system docker images for the targets to build.", action="store_true")
118-
parser.add_argument("--reference", dest="reference", metavar="REFERENCE", nargs='?', help="Git reference for targets to build.")
119-
parser.add_argument("--targets", dest="targets", metavar="TARGETS", nargs='+', help="List of targets. Requires a reference. Available targets: {}".format(known_target_option_list))
118+
parser.add_argument("--reference", dest="reference", metavar="REFERENCE", nargs='?', default="default", help="Git reference for targets to build.")
119+
parser.add_argument("--engine-reference", dest="engine_reference", metavar="ENGINE_REFERENCE", nargs='?', default="default", help="Git reference for engine targets to build.")
120+
parser.add_argument("--targets", dest="targets", metavar="TARGETS", nargs='+', help="List of targets. Available targets: {}".format(known_target_option_list))
120121
parser.add_argument("--unizip", dest="unizip", help="Make an universal zip out of built targets.", action="store_true")
121122
parser.add_argument("--chown", dest="chown", help="Change ownership of produced files, this option should never be needed as other tasks are expected to do it.", action="store_true")
122123
parser.add_argument("--docker", dest="docker", metavar="PATH", default="docker", help="Path to the docker binary. Default: %(default)s.")
@@ -125,9 +126,6 @@ def main():
125126

126127
docker = Docker(args.docker)
127128

128-
if args.targets and not args.reference:
129-
error("Building a target requires a reference.")
130-
131129
target_list = []
132130

133131
if args.targets:
@@ -150,7 +148,8 @@ def main():
150148
print("Clean: {}".format(str(args.clean)))
151149
print("Prune: {}".format(str(args.prune)))
152150
print("Reimage: {}".format(str(args.reimage)))
153-
print("Reference: {}".format(str(args.reference)))
151+
print("reference: {}".format(str(args.reference)))
152+
print("Engine reference: {}".format(str(args.engine_reference)))
154153
print("Targets: {}".format(target_list_string))
155154
print("Unizip: {}".format(str(args.unizip)))
156155
print("Chown: {}".format(str(args.chown)))
@@ -174,6 +173,7 @@ def main():
174173

175174
if target_list:
176175
reference_arg="--build-arg=reference={}".format(args.reference)
176+
engine_reference_arg = "--build-arg=engine_reference={}".format(args.engine_reference)
177177

178178
if args.reimage:
179179
docker.run("rmi", ["unvanquished-common-system"], stderr=subprocess.DEVNULL)
@@ -186,7 +186,7 @@ def main():
186186
docker.run("build", ["unvanquished-common-system", targets_arg])
187187

188188
# Clone source repositories and build external dependencies.
189-
docker.run("build", ["unvanquished-common-source", targets_arg, reference_arg])
189+
docker.run("build", ["unvanquished-common-source", targets_arg, reference_arg, engine_reference_arg])
190190

191191
# Build the targets.
192192
docker.run("mrun", ["--rm", targets_env,
@@ -243,7 +243,7 @@ def main():
243243
docker.run("commit", [container_id, "unvanquished-darling-darling"])
244244

245245
# Clone source repositories.
246-
docker.run("build", ["unvanquished-darling-source", reference_arg])
246+
docker.run("build", ["unvanquished-darling-source", reference_arg, engine_reference_arg])
247247

248248
# Build the targets.
249249
docker.run("mrun", ["--privileged", "--rm", targets_env,

docker/clone-repositories

+13-6
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,22 @@
2626

2727
source "$(dirname "${BASH_SOURCE[0]}")/common.sh"
2828

29-
# Assume the desired revision of Unvanquished is near the tip
30-
# of some branch (last 20 commits)
31-
_exec git clone --depth 20 --no-single-branch \
32-
'https://github.com/Unvanquished/Unvanquished.git' '/Unvanquished'
29+
_exec git clone 'https://github.com/Unvanquished/Unvanquished.git' '/Unvanquished'
3330

3431
cd '/Unvanquished'
3532

36-
_exec git checkout "${reference}"
33+
if [ "${reference:-default}" != 'default' ]
34+
then
35+
_exec git checkout "${reference}"
36+
fi
3737

38-
_exec git submodule update --init --depth 1 --recursive
38+
_exec git submodule update --init --recursive
39+
40+
if [ "${engine_reference:-default}" != 'default' ]
41+
then
42+
_exec git -C daemon checkout "${engine_reference}"
43+
44+
_exec git -C daemon submodule update --init --recursive
45+
fi
3946

4047
_exec mkdir -p '/Unvanquished/build/release'

docker/unvanquished-common-source.Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ ARG targets
44
RUN test -n "${targets}"
55

66
ARG reference
7-
RUN test -n "${reference}"
7+
8+
ARG engine_reference
89

910
RUN /docker/clone-repositories
1011

Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
FROM unvanquished-darling-darling
22

33
ARG reference
4-
RUN test -n "${reference}"
4+
5+
ARG engine_reference
56

67
RUN /docker/clone-repositories

0 commit comments

Comments
 (0)