@@ -124,7 +124,7 @@ endif
124124# Define a do-nothing target for rules/config.user so that when
125125# the file is missing, make won't try to rebuld everything.
126126rules/config.user:
127- @ echo -n ""
127+ $(Q) echo -n ""
128128
129129include rules/config
130130-include rules/config.user
@@ -173,21 +173,59 @@ endif
173173endif
174174
175175# Generate the version control build info
176- $(shell SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \
177- TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \
178- scripts/generate_buildinfo_config.sh)
176+ $(shell \
177+ SONIC_VERSION_CONTROL_COMPONENTS=$(SONIC_VERSION_CONTROL_COMPONENTS) \
178+ TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) \
179+ PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \
180+ scripts/generate_buildinfo_config.sh)
179181
180182# Generate the slave Dockerfile, and prepare build info for it
181- $(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)
182- $(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)
183- $(shell BUILD_SLAVE=y DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV))
183+ $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) \
184+ MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \
185+ CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) \
186+ ENABLE_FIPS_FEATURE=$(ENABLE_FIPS_FEATURE) \
187+ DOCKER_EXTRA_OPTS=$(DOCKER_EXTRA_OPTS) \
188+ DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) \
189+ j2 $(SLAVE_DIR)/Dockerfile.j2 > $(SLAVE_DIR)/Dockerfile)
190+
191+ $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) \
192+ MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \
193+ CROSS_BUILD_ENVIRON=$(CROSS_BUILD_ENVIRON) \
194+ j2 $(SLAVE_DIR)/Dockerfile.user.j2 > $(SLAVE_DIR)/Dockerfile.user)
195+
196+ PREPARE_DOCKER=BUILD_SLAVE=y \
197+ DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) \
198+ scripts/prepare_docker_buildinfo.sh \
199+ $(SLAVE_BASE_IMAGE) \
200+ $(SLAVE_DIR)/Dockerfile \
201+ $(CONFIGURED_ARCH) \
202+ "" \
203+ $(BLDENV)
204+
205+ $(shell $(PREPARE_DOCKER) )
184206
185207# Add the versions in the tag, if the version change, need to rebuild the slave
186- 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);}')
187- # Calculate the slave TAG based on $(USER)/$(PWD)/$(CONFIGURED_PLATFORM) to get unique SHA ID
188- SLAVE_TAG = $(shell (cat $(SLAVE_DIR)/Dockerfile.user $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* .git/HEAD && echo $(USER)/$(PWD)/$(CONFIGURED_PLATFORM)) \
189- | sha1sum | awk '{print substr($$1,0,11);}')
208+ SLAVE_BASE_TAG = $(shell \
209+ cat $(SLAVE_DIR)/Dockerfile \
210+ $(SLAVE_DIR)/buildinfo/versions/versions-* \
211+ src/sonic-build-hooks/hooks/* 2>/dev/null \
212+ | sha1sum \
213+ | awk '{print substr($$1,0,11);}')
190214
215+ # Calculate the slave TAG based on $(USER)/$(PWD)/$(CONFIGURED_PLATFORM) to get unique SHA ID
216+ SLAVE_TAG = $(shell \
217+ (cat $(SLAVE_DIR)/Dockerfile.user \
218+ $(SLAVE_DIR)/Dockerfile \
219+ $(SLAVE_DIR)/buildinfo/versions/versions-* \
220+ .git/HEAD \
221+ && echo $(USER)/$(PWD)/$(CONFIGURED_PLATFORM)) \
222+ | sha1sum \
223+ | awk '{print substr($$1,0,11);}')
224+
225+ COLLECT_DOCKER=DEFAULT_CONTAINER_REGISTRY=$(DEFAULT_CONTAINER_REGISTRY) \
226+ scripts/collect_docker_version_files.sh \
227+ $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) \
228+ target
191229OVERLAY_MODULE_CHECK := \
192230 lsmod | grep -q "^overlay " &>/dev/null || \
193231 zgrep -q 'CONFIG_OVERLAY_FS=y' /proc/config.gz &>/dev/null || \
@@ -329,7 +367,7 @@ DOCKER_BASE_LOG = $(SLAVE_DIR)/$(SLAVE_BASE_IMAGE)_$(SLAVE_BASE_TAG).log
329367DOCKER_LOG = $(SLAVE_DIR)/$(SLAVE_IMAGE)_$(SLAVE_TAG).log
330368
331369
332- DOCKER_BASE_BUILD = docker build --no-cache \
370+ DOCKER_SLAVE_BASE_BUILD = docker build --no-cache \
333371 -t $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) \
334372 --build-arg http_proxy=$(http_proxy) \
335373 --build-arg https_proxy=$(https_proxy) \
@@ -339,7 +377,7 @@ DOCKER_BASE_BUILD = docker build --no-cache \
339377DOCKER_BASE_PULL = docker pull \
340378 $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
341379
342- DOCKER_BUILD = docker build --no-cache \
380+ DOCKER_USER_BUILD = docker build --no-cache \
343381 --build-arg user=$(USER) \
344382 --build-arg uid=$(shell id -u) \
345383 --build-arg guid=$(shell id -g) \
@@ -349,7 +387,52 @@ DOCKER_BUILD = docker build --no-cache \
349387 -f $(SLAVE_DIR)/Dockerfile.user \
350388 $(SLAVE_DIR) $(SPLIT_LOG) $(DOCKER_LOG)
351389
352- SONIC_BUILD_INSTRUCTION := make \
390+
391+ DOCKER_SLAVE_BASE_INSPECT = \
392+ { \
393+ echo Checking sonic-slave-base image: $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG); \
394+ docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null; \
395+ }
396+
397+ DOCKER_SLAVE_BASE_PULL_REGISTRY = \
398+ [ $(ENABLE_DOCKER_BASE_PULL) == y ] && \
399+ { \
400+ echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; \
401+ $(DOCKER_BASE_PULL); \
402+ } && \
403+ { \
404+ docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
405+ $(COLLECT_DOCKER); \
406+ }\
407+
408+ SONIC_SLAVE_BASE_BUILD = \
409+ { \
410+ $(DOCKER_SLAVE_BASE_INSPECT); \
411+ } || \
412+ { \
413+ $(DOCKER_SLAVE_BASE_PULL_REGISTRY); \
414+ } || \
415+ { \
416+ echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
417+ $(PREPARE_DOCKER) ; \
418+ $(DOCKER_SLAVE_BASE_BUILD) ; \
419+ $(COLLECT_DOCKER) ; \
420+ }
421+
422+ DOCKER_SLAVE_USER_INSPECT = \
423+ { \
424+ echo Checking sonic-slave-user image: $(SLAVE_IMAGE):$(SLAVE_TAG); \
425+ docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null; \
426+ }
427+
428+ SONIC_SLAVE_USER_BUILD = \
429+ { $(DOCKER_SLAVE_USER_INSPECT) } || \
430+ { \
431+ echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
432+ $(DOCKER_USER_BUILD) ; \
433+ }
434+
435+ SONIC_BUILD_INSTRUCTION := $(MAKE) \
353436 -f slave.mk \
354437 PLATFORM=$(PLATFORM) \
355438 PLATFORM_ARCH=$(PLATFORM_ARCH) \
@@ -417,87 +500,75 @@ SONIC_BUILD_INSTRUCTION := make \
417500
418501.PHONY: sonic-slave-build sonic-slave-bash init reset
419502
503+
504+ ifeq ($(filter clean,$(MAKECMDGOALS)),)
505+ COLLECT_BUILD_VERSION = { DBGOPT='$(DBGOPT)' scripts/collect_build_version_files.sh $$?; }
506+ endif
507+
508+ ifdef SOURCE_FOLDER
509+ DOCKER_RUN += -v $(SOURCE_FOLDER):/var/$(USER)/src
510+ endif
511+
512+ ifeq "$(KEEP_SLAVE_ON)" "yes"
513+ SLAVE_SHELL={ /bin/bash; }
514+ endif
515+
420516.DEFAULT_GOAL := all
421517
422- %::
518+ %:: | sonic-build-hooks
423519ifneq ($(filter y, $(MULTIARCH_QEMU_ENVIRON) $(CROSS_BUILD_ENVIRON)),)
424- @ $(DOCKER_MULTIARCH_CHECK)
520+ $(Q) $(DOCKER_MULTIARCH_CHECK)
425521ifneq ($(BLDENV), )
426- @$(DOCKER_SERVICE_MULTIARCH_CHECK)
427- @$(DOCKER_SERVICE_DOCKERFS_CHECK)
428- endif
429- endif
430- @$(OVERLAY_MODULE_CHECK)
431-
432- @pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
433- @cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
434- @docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
435- { [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
436- $(DOCKER_BASE_PULL) && \
437- { docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
438- scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; } } || \
439- { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
440- $(DOCKER_BASE_BUILD) ; \
441- scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; }
442- @docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
443- { echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
444- $(DOCKER_BUILD) ; }
445- ifeq "$(KEEP_SLAVE_ON)" "yes"
446- ifdef SOURCE_FOLDER
447- @$(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"
448- else
449- @$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; scripts/collect_build_version_files.sh \$$?; /bin/bash"
450- endif
451- else
452- @$(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_BUILD_INSTRUCTION) $@; scripts/collect_build_version_files.sh \$$?"
522+ $(Q)$(DOCKER_SERVICE_MULTIARCH_CHECK)
523+ $(Q)$(DOCKER_SERVICE_DOCKERFS_CHECK)
524+ endif
453525endif
526+ $(Q)$(OVERLAY_MODULE_CHECK)
527+ $(Q)$(SONIC_SLAVE_BASE_BUILD)
528+ $(Q)$(SONIC_SLAVE_USER_BUILD)
529+
530+ $(Q)$(DOCKER_RUN) \
531+ $(SLAVE_IMAGE):$(SLAVE_TAG) \
532+ bash -c "$(SONIC_BUILD_INSTRUCTION) $@;$(COLLECT_BUILD_VERSION); $(SLAVE_SHELL)"
533+ $(Q)$(docker-image-cleanup)
454534
455535docker-cleanup:
456- $(docker-image-cleanup)
536+ $(Q)$( docker-image-cleanup)
457537
538+ .PHONY: sonic-build-hooks
458539sonic-build-hooks:
459- @pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) make all; popd
460- @cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
540+ $(Q)pushd src/sonic-build-hooks; TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) $(MAKE) all; popd
541+ $(Q)mkdir -p $(SLAVE_DIR)/buildinfo
542+ $(Q)cp src/sonic-build-hooks/buildinfo/sonic-build-hooks* $(SLAVE_DIR)/buildinfo
461543
462- sonic-slave-base-build : sonic-build-hooks
544+ sonic-slave-base-build : | sonic-build-hooks
463545ifeq ($(MULTIARCH_QEMU_ENVIRON), y)
464- @$(DOCKER_MULTIARCH_CHECK)
465- endif
466- @$(OVERLAY_MODULE_CHECK)
467- @echo Checking sonic-slave-base image: $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
468- @docker inspect --type image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) &> /dev/null || \
469- { [ $(ENABLE_DOCKER_BASE_PULL) == y ] && { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Pulling...; } && \
470- $(DOCKER_BASE_PULL) && \
471- { docker tag $(REGISTRY_SERVER):$(REGISTRY_PORT)/$(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) && \
472- scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; } } || \
473- { echo Image $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) not found. Building... ; \
474- $(DOCKER_BASE_BUILD) ; \
475- scripts/collect_docker_version_files.sh $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) target ; }
546+ $(Q)$(DOCKER_MULTIARCH_CHECK)
547+ endif
548+ $(Q)$(OVERLAY_MODULE_CHECK)
549+ $(Q)$(SONIC_SLAVE_BASE_BUILD)
476550
477551sonic-slave-build : sonic-slave-base-build
478- @echo Checking sonic-slave image: $(SLAVE_IMAGE):$(SLAVE_TAG)
479- @docker inspect --type image $(SLAVE_IMAGE):$(SLAVE_TAG) &> /dev/null || \
480- { echo Image $(SLAVE_IMAGE):$(SLAVE_TAG) not found. Building... ; \
481- $(DOCKER_BUILD) ; }
552+ $(Q)$(SONIC_SLAVE_USER_BUILD)
482553
483554sonic-slave-bash : sonic-slave-build
484- @ $(DOCKER_RUN) -t $(SLAVE_IMAGE):$(SLAVE_TAG) bash
555+ $(Q) $(DOCKER_RUN) -t $(SLAVE_IMAGE):$(SLAVE_TAG) bash
485556
486557sonic-slave-run : sonic-slave-build
487- @ $(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_RUN_CMDS)"
558+ $(Q) $(DOCKER_RUN) $(SLAVE_IMAGE):$(SLAVE_TAG) bash -c "$(SONIC_RUN_CMDS)"
488559
489560showtag:
490- @ echo $(SLAVE_IMAGE):$(SLAVE_TAG)
491- @ echo $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
561+ $(Q) echo $(SLAVE_IMAGE):$(SLAVE_TAG)
562+ $(Q) echo $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
492563
493564init :
494- @ git submodule update --init --recursive
495- @ git submodule foreach --recursive '[ -f .git ] && echo "gitdir: $$(realpath --relative-to=. $$(cut -d" " -f2 .git))" > .git'
565+ $(Q) git submodule update --init --recursive
566+ $(Q) git submodule foreach --recursive '[ -f .git ] && echo "gitdir: $$(realpath --relative-to=. $$(cut -d" " -f2 .git))" > .git'
496567
497568.ONESHELL : reset
498569reset :
499- @ echo && echo -n "Warning! All local changes will be lost. Proceed? [y/N]: "
500- @ read ans && (
570+ $(Q) echo && echo -n "Warning! All local changes will be lost. Proceed? [y/N]: "
571+ $(Q) read ans && (
501572 if [ $$ans == y ]; then
502573 echo "Resetting local repository. Please wait...";
503574 sudo rm -rf fsroot*;
0 commit comments