|
1 |
| -## Argument Variables ## |
| 1 | +include aosp-build/Makefile |
2 | 2 |
|
3 |
| -CPUS := $(shell nproc) |
4 |
| -MEMORY := 10000 |
5 |
| -DISK := 300000 |
6 |
| -DEVICE := crosshatch |
7 |
| -BACKEND := local |
8 |
| -CHANNEL := beta |
9 |
| -BUILD := user |
10 |
| -FLAVOR := aosp |
11 |
| -IMAGE := hashbang/aosp-build:latest |
12 |
| -IMAGE_OPTIONS := |
13 |
| -NAME := aosp-build-$(FLAVOR)-$(BACKEND) |
14 |
| -SHELL := /bin/bash |
| 3 | +NAME := hashbangos-$(FLAVOR)-$(BACKEND) |
15 | 4 |
|
16 |
| --include $(PWD)/config/env/$(BACKEND).env |
| 5 | +contain-base-extend = \ |
| 6 | + --volume $(PWD)/aosp-build/scripts:/opt/aosp-build/scripts \ |
| 7 | + --volume $(PWD)/aosp-build/config:/opt/aosp-build/config \ |
| 8 | + --volume $(PWD)/aosp-build/config/manifests:/home/build/config/manifests-aosp |
17 | 9 |
|
18 |
| -## Default Target ## |
| 10 | +.PHONY: HashbangOS-setup |
| 11 | +HashbangOS-setup: |
| 12 | + cd aosp-build/ && ln -sf ../build |
19 | 13 |
|
20 |
| -.DEFAULT_GOAL := default |
21 |
| -.PHONY: default |
22 |
| -default: machine image fetch tools keys build release |
| 14 | +.PHONY: HashbangOS-release |
| 15 | +HashbangOS-review: HashbangOS-setup |
| 16 | + make -C aosp-build config ensure-git-status-clean |
| 17 | + make -C aosp-build manifest ensure-git-status-clean fetch |
| 18 | + make fetch review |
23 | 19 |
|
24 |
| - |
25 |
| -## Primary Targets ## |
26 |
| - |
27 |
| -.PHONY: fetch |
28 |
| -fetch: submodule-update machine image |
29 |
| - $(contain) fetch |
30 |
| - |
31 |
| -.PHONY: keys |
32 |
| -keys: |
33 |
| - $(contain) keys |
34 |
| - |
35 |
| -.PHONY: build |
36 |
| -build: |
37 |
| - $(contain) build |
38 |
| - |
39 |
| -.PHONY: release |
40 |
| -release: |
41 |
| - $(contain) release |
42 |
| - |
43 |
| -.PHONY: publish |
44 |
| -publish: |
45 |
| - $(contain) publish |
46 |
| - |
47 |
| -.PHONY: clean |
48 |
| -clean: |
49 |
| - $(contain) clean |
50 |
| - |
51 |
| -.PHONY: mrproper |
52 |
| -mrproper: storage-delete machine-delete |
53 |
| - rm -rf build |
54 |
| - |
55 |
| - |
56 |
| -## Secondary Targets ## |
57 |
| - |
58 |
| -.PHONY: image |
59 |
| -image: |
60 |
| - $(docker) build \ |
61 |
| - --tag $(IMAGE) \ |
62 |
| - --file $(PWD)/config/container/Dockerfile \ |
63 |
| - $(IMAGE_OPTIONS) \ |
64 |
| - $(PWD) |
65 |
| - |
66 |
| -config/container/Dockerfile.minimal: config/container/Dockerfile config/container/render_template |
67 |
| - ./config/container/render_template "$<" | grep -v '^#\s*$$' > "$@" |
68 |
| - |
69 |
| -.PHONY: image-minimal |
70 |
| -image-minimal: config/container/Dockerfile.minimal |
71 |
| - $(docker) build \ |
72 |
| - --tag $(IMAGE) \ |
73 |
| - --file "$(PWD)/$<" \ |
74 |
| - $(IMAGE_OPTIONS) \ |
75 |
| - $(PWD) |
76 |
| - |
77 |
| -.PHONY: tools |
78 |
| -tools: |
79 |
| - mkdir -p config/keys build/base release build/external |
80 |
| - $(contain) tools |
81 |
| - |
82 |
| -.PHONY: vendor |
83 |
| -vendor: |
84 |
| - $(contain) build-vendor |
85 |
| - |
86 |
| -.PHONY: chromium |
87 |
| -chromium: |
88 |
| - $(contain) build-chromium |
89 |
| - |
90 |
| -.PHONY: kernel |
91 |
| -kernel: |
92 |
| - $(contain) build-kernel |
93 |
| - |
94 |
| - |
95 |
| -## Development ## |
96 |
| - |
97 |
| -.PHONY: latest |
98 |
| -latest: config submodule-latest fetch |
99 |
| - |
100 |
| -.PHONY: manifest |
101 |
| -manifest: config |
102 |
| - $(contain) bash -c "source <(environment) && manifest" |
103 |
| - |
104 |
| -.PHONY: config |
105 |
| -config: |
106 |
| - $(contain) bash -c "source <(environment) && config" |
107 |
| - |
108 |
| -.PHONY: test-repro |
109 |
| -test-repro: |
110 |
| - $(contain) test-repro |
111 |
| - |
112 |
| -.PHONY: test |
113 |
| -test: test-repro |
114 |
| - |
115 |
| -.PHONY: patches |
116 |
| -patches: |
117 |
| - @$(contain) bash -c "cd base; repo diff --absolute" |
118 |
| - |
119 |
| -.PHONY: shell |
120 |
| -shell: |
121 |
| - $(docker) inspect "$(NAME)" \ |
122 |
| - && $(docker) exec --interactive --tty "$(NAME)" shell \ |
123 |
| - || $(contain) shell |
124 |
| - |
125 |
| -.PHONY: monitor |
126 |
| -monitor: |
127 |
| - $(docker) inspect "$(NAME)" \ |
128 |
| - && $(docker) exec --interactive --tty "$(NAME)" htop |
129 |
| - |
130 |
| -.PHONY: install |
131 |
| -install: tools |
132 |
| - @scripts/flash |
133 |
| - |
134 |
| - |
135 |
| -## Source Management ## |
136 |
| - |
137 |
| -.PHONY: submodule-update |
138 |
| -submodule-update: |
139 |
| - git submodule update --init --recursive |
140 |
| - |
141 |
| -.PHONY: submodule-latest |
142 |
| -submodule-latest: |
143 |
| - git submodule foreach 'git checkout master && git pull' |
144 |
| - |
145 |
| -## Storage Bootstrapping ## |
146 |
| - |
147 |
| -# TODO: detect if plugin is already installed or not |
148 |
| -# TODO: Hash lock rexray with sha256 digest to prevent tag clobbering |
149 |
| -.PHONY: storage-digitalocean |
150 |
| -storage-digitalocean: |
151 |
| - $(docker) volume ls | grep $(NAME) \ |
152 |
| - ||( $(docker) plugin install \ |
153 |
| - --grant-all-permissions \ |
154 |
| - rexray/dobs:0.11.4 \ |
155 |
| - DOBS_REGION=$(DIGITALOCEAN_REGION) \ |
156 |
| - DOBS_TOKEN=$(DIGITALOCEAN_TOKEN) \ |
157 |
| - ; $(docker) volume create \ |
158 |
| - --driver rexray/dobs:0.11.4 \ |
159 |
| - --opt=size=$$(( $(DISK) / 1000 )) \ |
160 |
| - --name=$(NAME) \ |
161 |
| - ) |
162 |
| - |
163 |
| -.PHONY: storage-local |
164 |
| -storage-local: |
165 |
| - $(docker) volume ls | grep $(NAME) \ |
166 |
| - || $(docker) volume create \ |
167 |
| - --driver local \ |
168 |
| - --opt type=none \ |
169 |
| - --opt o=bind \ |
170 |
| - --opt device=$(PWD)/build \ |
171 |
| - $(NAME) |
172 |
| - |
173 |
| -.PHONY: storage-delete |
174 |
| -storage-delete: |
175 |
| - $(docker) volume rm -f $(NAME) || : |
176 |
| - |
177 |
| - |
178 |
| -## VM Management ## |
179 |
| - |
180 |
| -.PHONY: machine-start |
181 |
| -machine-start: machine-install machine-create machine-date |
182 |
| - $(docker_machine) status $(NAME) \ |
183 |
| - || $(docker_machine) start $(NAME) |
184 |
| - |
185 |
| -.PHONY: machine-sync |
186 |
| -machine-sync: |
187 |
| - $(docker_machine) scp -r -d config/ $(NAME):$(PWD)/config/ |
188 |
| - |
189 |
| -.PHONY: machine-shell |
190 |
| -machine-shell: |
191 |
| - $(docker_machine) ssh $(NAME) |
192 |
| - |
193 |
| -.PHONY: machine-stop |
194 |
| -machine-stop: |
195 |
| - $(docker_machine) stop $(NAME) |
196 |
| - |
197 |
| -.PHONY: machine-delete |
198 |
| -machine-delete: |
199 |
| - $(docker_machine) rm -f -y $(NAME) |
200 |
| - |
201 |
| -.PHONY: machine-date |
202 |
| -machine-date: |
203 |
| - $(docker_machine) ssh $(NAME) \ |
204 |
| - "sudo date -s @$(shell date +%s)" |
205 |
| - |
206 |
| -.PHONY: machine-create |
207 |
| -machine-create: machine-install |
208 |
| - $(docker_machine) status $(NAME) \ |
209 |
| - ||( $(docker_machine) create \ |
210 |
| - --driver $(BACKEND) \ |
211 |
| - $(docker_machine_create_flags) \ |
212 |
| - $(NAME) \ |
213 |
| - ) |
214 |
| - |
215 |
| -.PHONY: machine-install |
216 |
| -machine-install: |
217 |
| - # wget docker-machine & hash check here |
218 |
| - |
219 |
| - |
220 |
| -## VM Bootstrapping ## |
221 |
| - |
222 |
| -ifeq ($(BACKEND),local) |
223 |
| - |
224 |
| -executables = docker |
225 |
| -docker = docker |
226 |
| -machine: |
227 |
| -storage_flags = --volume $(PWD)/build/:/home/build/build/ |
228 |
| - |
229 |
| -else ifeq ($(BACKEND),virtualbox) |
230 |
| - |
231 |
| -executables = docker-machine ssh virtualbox |
232 |
| -docker = $(docker_machine) ssh $(NAME) -t docker |
233 |
| -machine: machine-start storage-local |
234 |
| -storage_flags = --volume $(NAME):/home/build/build/ |
235 |
| -docker_machine_create_flags = \ |
236 |
| - --virtualbox-share-folder="$(PWD):$(PWD)" \ |
237 |
| - --virtualbox-disk-size="$(DISK)" \ |
238 |
| - --virtualbox-memory="$(MEMORY)" \ |
239 |
| - --virtualbox-cpu-count="$(CPUS)" |
240 |
| - |
241 |
| -else ifeq ($(BACKEND),digitalocean) |
242 |
| - |
243 |
| -executables = docker-machine ssh |
244 |
| -docker = $(docker_machine) ssh $(NAME) -t docker |
245 |
| -machine: machine-start storage-digitalocean machine-sync |
246 |
| -storage_flags = --volume $(NAME):/home/build/build/ |
247 |
| -docker_machine_create_flags = \ |
248 |
| - --digitalocean-access-token=$(DIGITALOCEAN_TOKEN) \ |
249 |
| - --digitalocean-region=$(DIGITALOCEAN_REGION) \ |
250 |
| - --digitalocean-image=$(DIGITALOCEAN_IMAGE) \ |
251 |
| - --digitalocean-size=$(DIGITALOCEAN_SIZE) |
252 |
| - |
253 |
| -endif |
254 |
| - |
255 |
| -userid = $(shell id -u) |
256 |
| -groupid = $(shell id -g) |
257 |
| -docker_machine = docker-machine --storage-path "${PWD}/build/machine" |
258 |
| -contain := \ |
259 |
| - $(docker) run \ |
260 |
| - --rm \ |
261 |
| - --tty \ |
262 |
| - --interactive \ |
263 |
| - --name "$(NAME)" \ |
264 |
| - --hostname "$(NAME)" \ |
265 |
| - --user $(userid):$(groupid) \ |
266 |
| - --env DEVICE=$(DEVICE) \ |
267 |
| - --security-opt seccomp=unconfined \ |
268 |
| - --volume $(PWD)/config:/home/build/config \ |
269 |
| - --volume $(PWD)/release:/home/build/release \ |
270 |
| - --volume $(PWD)/scripts:/home/build/scripts \ |
271 |
| - $(storage_flags) \ |
272 |
| - $(IMAGE) |
273 |
| - |
274 |
| - |
275 |
| -## Required Binary Check ## |
276 |
| - |
277 |
| -check_executables := $(foreach exec,$(executables),\$(if \ |
278 |
| - $(shell which $(exec)),some string,$(error "No $(exec) in PATH"))) |
| 20 | +HashbangOS-build: clean fetch build release |
0 commit comments