@@ -172,21 +172,40 @@ endif
172
172
endif
173
173
174
174
# Generate the version control build info
175
+ SONIC_VERSION_CACHE := $(filter-out none,$(SONIC_VERSION_CACHE_METHOD))
176
+ SONIC_OVERRIDE_BUILD_VARS += SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE)
177
+ SONIC_OVERRIDE_BUILD_VARS += SONIC_VERSION_CACHE_SOURCE=$(SONIC_VERSION_CACHE_SOURCE)
178
+ export SONIC_VERSION_CACHE SONIC_VERSION_CACHE_SOURCE
179
+ $(shell test -d $(SONIC_VERSION_CACHE_SOURCE) || \
180
+ mkdir -p $(SONIC_VERSION_CACHE_SOURCE) && chmod -f 777 $(SONIC_VERSION_CACHE_SOURCE) 2>/dev/null )
175
181
$(shell SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \
176
182
TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \
183
+ DBGOPT='$(DBGOPT)' \
184
+ DISTRO=$(BLDENV) \
185
+ SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE) \
186
+ SONIC_VERSION_CACHE_SOURCE=$(SONIC_VERSION_CACHE_SOURCE) \
177
187
scripts/generate_buildinfo_config.sh)
178
188
179
189
# Generate the slave Dockerfile, and prepare build info for it
180
- $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) ENABLE_FIPS_FEATURE=$(ENABLE_FIPS_FEATURE) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile)
181
- $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user)
182
- $(shell BUILD_SLAVE=y DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV))
190
+ $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \
191
+ CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) ENABLE_FIPS_FEATURE=$(ENABLE_FIPS_FEATURE) DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) \
192
+ DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile)
193
+ $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \
194
+ CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user)
183
195
196
+ PREPARE_DOCKER=DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) BUILD_SLAVE=y DBGOPT='$(DBGOPT)' SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE) \
197
+ scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV)
198
+
199
+ $(shell $(PREPARE_DOCKER) )
184
200
# Add the versions in the tag, if the version change, need to rebuild the slave
185
- SLAVE_BASE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* src/sonic-build-hooks/hooks/* | sha1sum | awk '{print substr($$1,0,11);}')
201
+ SLAVE_BASE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* src/sonic-build-hooks/hooks/* 2>/dev/null | sha1sum | awk '{print substr($$1,0,11);}')
186
202
# Calculate the slave TAG based on $(USER)/$(PWD)/$(CONFIGURED_PLATFORM) to get unique SHA ID
187
- SLAVE_TAG = $(shell (cat $(SLAVE_DIR)/Dockerfile.user $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* .git/HEAD && echo $(USER)/$(PWD)/$(CONFIGURED_PLATFORM)) \
203
+ SLAVE_TAG = $(shell (cat $(SLAVE_DIR)/Dockerfile.user $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* .git/HEAD 2>/dev/null && echo $(USER)/$(PWD)/$(CONFIGURED_PLATFORM)) \
188
204
| sha1sum | awk '{print substr($$1,0,11);}')
189
205
206
+ COLLECT_DOCKER=DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) DBGOPT='$(DBGOPT)' SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE) \
207
+ scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_DIR) $(SLAVE_DIR)/Dockerfile
208
+
190
209
OVERLAY_MODULE_CHECK := \
191
210
lsmod | grep -q "^overlay " &>/dev/null || \
192
211
zgrep -q 'CONFIG_OVERLAY_FS=y' /proc/config.gz &>/dev/null || \
@@ -240,6 +259,10 @@ ifneq ($(SONIC_DPKG_CACHE_SOURCE),)
240
259
DOCKER_RUN += -v "$(SONIC_DPKG_CACHE_SOURCE):/dpkg_cache:rw"
241
260
endif
242
261
262
+ ifneq ($(SONIC_VERSION_CACHE_SOURCE),)
263
+ DOCKER_RUN += -v "$(SONIC_VERSION_CACHE_SOURCE):/vcache:rw"
264
+ endif
265
+
243
266
ifeq ($(SONIC_ENABLE_SECUREBOOT_SIGNATURE), y)
244
267
ifneq ($(SIGNING_KEY),)
245
268
DOCKER_SIGNING_SOURCE := $(shell dirname $(SIGNING_KEY))
@@ -328,26 +351,65 @@ DOCKER_BASE_LOG = $(SLAVE_DIR)/$(SLAVE_BASE_IMAGE)_$(SLAVE_BASE_TAG).log
328
351
DOCKER_LOG = $(SLAVE_DIR)/$(SLAVE_IMAGE)_$(SLAVE_TAG).log
329
352
330
353
331
- DOCKER_BASE_BUILD = docker build --no-cache \
354
+ DOCKER_SLAVE_BASE_BUILD = docker build --no-cache \
332
355
-t $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) \
333
356
--build-arg http_proxy=$(http_proxy) \
334
357
--build-arg https_proxy=$(https_proxy) \
335
358
--build-arg no_proxy=$(no_proxy) \
336
- $(SLAVE_DIR) $(SPLIT_LOG) $(DOCKER_BASE_LOG)
359
+ --build-arg SONIC_VERSION_CACHE=$(SONIC_VERSION_CACHE) \
360
+ --build-arg SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \
361
+ $(SLAVE_DIR) \
362
+ | awk '/^_VCSTART_$$/,/^_VCEND_$$/{if($$0 !~ /_VCSTART_|_VCEND_/)print >"$(SLAVE_BASE_IMAGE)/vcache/cache.base64";next}{print }' \
363
+ $(SPLIT_LOG) $(DOCKER_BASE_LOG)
364
+
337
365
338
366
DOCKER_BASE_PULL = docker pull \
339
367
$(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
340
368
341
- DOCKER_BUILD = docker build --no-cache \
369
+ DOCKER_USER_BUILD = docker build --no-cache \
342
370
--build-arg user=$(USER) \
343
371
--build-arg uid=$(shell id -u) \
344
372
--build-arg guid=$(shell id -g) \
345
373
--build-arg hostname=$(shell echo $$HOSTNAME) \
346
- --build-arg slave_base_tag_ref=$(SLAVE_BASE_TAG) \
374
+ --build-arg slave_base_tag_ref=$(SLAVE_BASE_TAG) \
347
375
-t $(SLAVE_IMAGE):$(SLAVE_TAG) \
348
376
-f $(SLAVE_DIR)/Dockerfile.user \
349
377
$(SLAVE_DIR) $(SPLIT_LOG) $(DOCKER_LOG)
350
378
379
+
380
+ DOCKER_SLAVE_BASE_BUILD_REGISTRY = \
381
+ { \
382
+ [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
383
+ $(DOCKER_BASE_PULL) && \
384
+ { \
385
+ docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
386
+ $(COLLECT_DOCKER) ; \
387
+ } \
388
+ } || \
389
+ { \
390
+ echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found in registry. Building... ; \
391
+ $(PREPARE_DOCKER) ; \
392
+ $(DOCKER_SLAVE_BASE_BUILD) ; \
393
+ $(COLLECT_DOCKER) ; \
394
+ }
395
+
396
+ SONIC_SLAVE_BASE_BUILD = \
397
+ echo Checking sonic-slave-base image: $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG); \
398
+ docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
399
+ { \
400
+ echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
401
+ $(DOCKER_SLAVE_BASE_BUILD_REGISTRY) ; \
402
+ }
403
+
404
+ SONIC_SLAVE_USER_BUILD = \
405
+ echo Checking sonic-slave image: $(SLAVE_IMAGE):$(SLAVE_TAG); \
406
+ docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
407
+ { \
408
+ echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
409
+ $(DOCKER_USER_BUILD) ; \
410
+ }
411
+
412
+
351
413
SONIC_BUILD_INSTRUCTION := make \
352
414
-f slave.mk \
353
415
PLATFORM=$(PLATFORM) \
@@ -412,9 +474,16 @@ SONIC_BUILD_INSTRUCTION := make \
412
474
413
475
.PHONY: sonic-slave-build sonic-slave-bash init reset
414
476
477
+
478
+ COLLECT_BUILD_VERSION = DBGOPT='$(DBGOPT)' scripts/collect_build_version_files.sh $$?
479
+ ifneq ($(filter clean,$(MAKECMDGOALS)),)
480
+ COLLECT_BUILD_VERSION="echo "
481
+ endif
482
+
483
+
415
484
.DEFAULT_GOAL := all
416
485
417
- %::
486
+ %::|sonic-build-hooks
418
487
ifneq ($(filter y, $(MULTIARCH_QEMU_ENVIRON) $(CROSS_BUILD_ENVIRON)),)
419
488
@$(DOCKER_MULTIARCH_CHECK)
420
489
ifneq ($(BLDENV), )
@@ -423,57 +492,38 @@ ifneq ($(BLDENV), )
423
492
endif
424
493
endif
425
494
@$(OVERLAY_MODULE_CHECK)
495
+ @$(SONIC_SLAVE_BASE_BUILD)
496
+ @$(SONIC_SLAVE_USER_BUILD)
426
497
427
- @pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
428
- @cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
429
- @docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
430
- { [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
431
- $(DOCKER_BASE_PULL) && \
432
- { docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
433
- scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; } } || \
434
- { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
435
- $(DOCKER_BASE_BUILD) ; \
436
- scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; }
437
- @docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
438
- { echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
439
- $(DOCKER_BUILD) ; }
440
498
ifeq "$(KEEP_SLAVE_ON)" "yes"
441
499
ifdef SOURCE_FOLDER
442
- @$(DOCKER_RUN) -v $(SOURCE_FOLDER):/var/$(USER)/src $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; scripts/collect_build_version_files.sh \$$? ; /bin/bash"
500
+ @$(DOCKER_RUN) -v $(SOURCE_FOLDER):/var/$(USER)/src $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; $(COLLECT_BUILD_VERSION) ; /bin/bash"
443
501
else
444
- @$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; scripts/collect_build_version_files.sh \$$? ; /bin/bash"
502
+ @$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; $(COLLECT_BUILD_VERSION) ; /bin/bash"
445
503
endif
446
504
else
447
- @$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; scripts/collect_build_version_files.sh \$$?"
505
+ @$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; $(COLLECT_BUILD_VERSION);"
506
+ @$(docker-image-cleanup)
448
507
endif
449
508
450
509
docker-cleanup:
451
- $(docker-image-cleanup)
510
+ @ $(docker-image-cleanup)
452
511
512
+ .PHONY: sonic-build-hooks
453
513
sonic-build-hooks:
454
514
@pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
515
+ @mkdir -p $(SLAVE_DIR)/buildinfo
455
516
@cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
456
517
457
- sonic-slave-base-build : sonic-build-hooks
518
+ sonic-slave-base-build : | sonic-build-hooks
458
519
ifeq ($(MULTIARCH_QEMU_ENVIRON), y)
459
520
@$(DOCKER_MULTIARCH_CHECK)
460
521
endif
461
522
@$(OVERLAY_MODULE_CHECK)
462
- @echo Checking sonic-slave-base image: $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
463
- @docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
464
- { [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
465
- $(DOCKER_BASE_PULL) && \
466
- { docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
467
- scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; } } || \
468
- { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
469
- $(DOCKER_BASE_BUILD) ; \
470
- scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; }
523
+ @$(SONIC_SLAVE_BASE_BUILD)
471
524
472
525
sonic-slave-build : sonic-slave-base-build
473
- @echo Checking sonic-slave image: $(SLAVE_IMAGE):$(SLAVE_TAG)
474
- @docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
475
- { echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
476
- $(DOCKER_BUILD) ; }
526
+ @$(SONIC_SLAVE_USER_BUILD)
477
527
478
528
sonic-slave-bash : sonic-slave-build
479
529
@$(DOCKER_RUN) -t $(SLAVE_IMAGE):$(SLAVE_TAG) bash
0 commit comments