1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
load("//tools/build_defs/docker:docker.bzl", "docker_build")
load("//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
# This is totally non hermetic, we should really replace that by a
# docker_pull rule.
FLAVOURS = [f[f.find(".") + 1:] for f in glob(["Dockerfile.*"])]
[
# This is totally non hermetic.
genrule(
name = "docker-" + flavour,
srcs = ["Dockerfile." + flavour],
outs = ["docker-%s.tar" % flavour],
cmd = "\n".join([
"DIR=\"$$(dirname $<)\"",
"IMG=\"$$(basename $<)\"",
"DOCKER=\"$${PWD}/$(location @docker//:docker)\"",
"(",
" cd $$DIR",
" $$DOCKER build -f $$IMG -t bazel_tools_cpp_test:%s ." % flavour,
")",
"$$DOCKER save bazel_tools_cpp_test:%s > $@" % flavour,
]),
tags = ["local"],
# Docker needs to knows how to contact the daemon from the environment.
# @docker//:docker point to a docker wrapper that copy the environment
# of the user.
tools = ["@docker//:docker"],
)
for flavour in FLAVOURS
]
# Just to avoid re-reading docker images all the time
[
docker_build(
name = "base-" + flavour,
base = "docker-" + flavour,
)
for flavour in FLAVOURS
]
genrule(
name = "gen_workspace",
srcs = ["//:workspace-file"],
outs = ["WORKSPACE"],
cmd = """
cat <<EOF >$@
load("@bazel_tools//tools/cpp:cc_configure.bzl", "cc_configure")
cc_configure()
EOF
cat $(location //:workspace-file) >>$@
""",
)
pkg_tar(
name = "cc_configure_ws",
files = [":WORKSPACE"],
package_dir = "/opt/workspace",
strip_prefix = ".",
)
pkg_tar(
name = "bazel_cc_configure",
package_dir = "/opt/workspace",
strip_prefix = "/",
deps = [
# Order matters.
":cc_configure_ws",
"//:bazel-srcs",
],
)
[
[docker_build(
name = "bazel_cc_configure-%s-%s" % (flavour, mode),
base = ":base-" + flavour,
entrypoint = "/opt/workspace/compile.sh",
env = {
"EXTRA_BAZEL_ARGS": "--spawn_strategy=standalone --genrule_strategy=standalone -c %s" % mode,
},
tars = [":bazel_cc_configure"],
workdir = "/opt/workspace",
) for mode in [
"dbg",
"opt",
"fastbuild",
]]
for flavour in FLAVOURS
]
[
[py_test(
name = "test_cc_configure-%s-%s" % (flavour, mode),
size = "large",
srcs = ["docker_test.py"],
args = [
"--main='$(location :bazel_cc_configure-%s-%s)'" % (flavour, mode),
"--docker='$(location @docker//:docker)'",
],
data = [
":bazel_cc_configure-%s-%s" % (flavour, mode),
"@docker//:docker",
],
local = 1,
main = "docker_test.py",
tags = [
"exclusive",
"local",
],
deps = ["//third_party/py/gflags"],
) for mode in [
"dbg",
"opt",
"fastbuild",
]]
for flavour in FLAVOURS
]
filegroup(
name = "srcs",
srcs = glob(["**"]),
visibility = ["//tools/cpp:__pkg__"],
)
|