mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-31 10:07:49 +00:00 
			
		
		
		
	 7fc347010f
			
		
	
	7fc347010f
	
	
	
		
			
			Why I did it Fix a bug in sonic debug image build. That bug is imported in the following PR: #8920
		
			
				
	
	
		
			209 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ###############################################################################
 | |
| ## FUNCTIONS
 | |
| ###############################################################################
 | |
| 
 | |
| ###############################################################################
 | |
| ## Colored output
 | |
| ###############################################################################
 | |
| 
 | |
| # Enable colored output
 | |
| ifeq ($(SONIC_CONFIG_ENABLE_COLORS),y)
 | |
| ifeq ($(MAKE_TERMOUT),)
 | |
| RED=\033[1;31m
 | |
| PURPLE=\033[1;35m
 | |
| CYAN=\033[1;36m
 | |
| GREEN=\033[1;32m
 | |
| GRAY=\033[0m
 | |
| endif
 | |
| endif
 | |
| 
 | |
| ifeq ($(BUILD_LOG_TIMESTAMP),simple)
 | |
| PROCESS_LOG_OPTION = -t
 | |
| endif
 | |
| 
 | |
| # Print red colored output
 | |
| # call:
 | |
| #       log_red message
 | |
| log_red = echo -e "$(RED)$(1)$(GRAY)"
 | |
| 
 | |
| # Print purple colored output
 | |
| # call:
 | |
| #       log_purple message
 | |
| log_purple = echo -e "$(PURPLE)$(1)$(GRAY)"
 | |
| 
 | |
| # Print blue colored output
 | |
| # call:
 | |
| #       log_blue message
 | |
| log_blue = echo -e "$(CYAN)$(1)$(GRAY)"
 | |
| 
 | |
| # Print green colored output
 | |
| # call:
 | |
| #       log_green message
 | |
| log_green = echo -e "$(GREEN)$(1)$(GRAY)"
 | |
| 
 | |
| ###############################################################################
 | |
| ## Logging
 | |
| ###############################################################################
 | |
| 
 | |
| FLUSH_LOG = rm -f $@.log
 | |
| 
 | |
| LOG_SIMPLE = &>> $(PROJECT_ROOT)/$@.log || { [ $$? -eq 0 ] || pushd $(PROJECT_ROOT) > /dev/null ; ./update_screen.sh -e $@ ; popd > /dev/null ; false ; }
 | |
| LOG = < /dev/null |& $(PROJECT_ROOT)/scripts/process_log.sh $(PROCESS_LOG_OPTION) &>> $(PROJECT_ROOT)/$@.log ; test $${PIPESTATUS[-2]} -eq 0 || { [ $$? -eq 0 ] || pushd $(PROJECT_ROOT) > /dev/null ; ./update_screen.sh -e $@ ; popd > /dev/null ; false ; }
 | |
| 
 | |
| ###############################################################################
 | |
| ## Header and footer for each target
 | |
| ###############################################################################
 | |
| 
 | |
| # Dump targets taht current depends on
 | |
| ifeq ($(SONIC_CONFIG_PRINT_DEPENDENCIES),y)
 | |
| PRINT_DEPENDENCIES = echo Dependencies for $@ are $^ $(LOG)
 | |
| endif
 | |
| 
 | |
| # header for each rule
 | |
| define HEADER
 | |
| @
 | |
| $(PRINT_DEPENDENCIES)
 | |
| $(FLUSH_LOG)
 | |
| ./update_screen.sh -a $@ $*
 | |
| endef
 | |
| 
 | |
| # footer for each rule
 | |
| define FOOTER
 | |
| ./update_screen.sh -d $@ $($*_CACHE_LOADED)
 | |
| endef
 | |
| 
 | |
| ###############################################################################
 | |
| ## Definition of derived target
 | |
| ###############################################################################
 | |
| 
 | |
| # call:
 | |
| #     add_derived_package some_deb.deb, some_derived_deb
 | |
| define add_derived_package
 | |
| $(2)_DEPENDS += $(1)
 | |
| $(2)_RDEPENDS += $($(1)_RDEPENDS)
 | |
| $(2)_MAIN_DEB = $(1)
 | |
| $(1)_DERIVED_DEBS += $(2)
 | |
| $(2)_URL = $($(1)_URL)
 | |
| $(2)_SRC_PATH = $($(1)_SRC_PATH)
 | |
| $(2)_NAME = $($(1)_NAME)
 | |
| $(2)_VERSION = $($(1)_VERSION)
 | |
| SONIC_DERIVED_DEBS += $(2)
 | |
| endef
 | |
| 
 | |
| # call:
 | |
| #     add_extra_package some_deb.deb, some_extra_deb
 | |
| define add_extra_package
 | |
| $(2)_MAIN_DEB = $(1)
 | |
| $(1)_EXTRA_DEBS += $(2)
 | |
| SONIC_EXTRA_DEBS += $(2)
 | |
| endef
 | |
| 
 | |
| ###############################################################################
 | |
| ## Definition of conflict packages
 | |
| ###############################################################################
 | |
| 
 | |
| # call:
 | |
| #     add_conflict_package some_deb.deb, conflict_deb
 | |
| define add_conflict_package
 | |
| $(1)_CONFLICT_DEBS += $(2)
 | |
| $(2)_CONFLICT_DEBS += $(1)
 | |
| endef
 | |
| 
 | |
| ###############################################################################
 | |
| ## Definition of debug dockers
 | |
| ###############################################################################
 | |
| 
 | |
| # call:
 | |
| #     add_dbg_docker some_docker.gz, some-docker-dbg.gz
 | |
| define add_dbg_docker
 | |
| $(2)_PATH = $($(1)_PATH)
 | |
| $(2)_DBG_DEPENDS += $($(1)_DBG_DEPENDS)
 | |
| $(2)_DBG_IMAGE_PACKAGES += $($(1)_DBG_IMAGE_PACKAGES)
 | |
| $(2)_PYTHON_DEBS += $($(1)_PYTHON_DEBS)
 | |
| $(2)_PYTHON_WHEELS += $($(1)_PYTHON_WHEELS)
 | |
| $(2)_LOAD_DOCKERS += $($(1)_LOAD_DOCKERS)
 | |
| $(2)_CACHE_MODE += $($(1)_CACHE_MODE)
 | |
| $(2)_DEP_FLAGS += $($(1)_DEP_FLAGS)
 | |
| $(2)_DEP_FILES += $($(1)_DEP_FILES)
 | |
| $(2)_SMDEP_FILES += $($(1)_SMDEP_FILES)
 | |
| $(2)_SMDEP_PATHS += $($(1)_SMDEP_PATHS)
 | |
| $(2)_DEPENDS += $($(1)_DEPENDS)
 | |
| $(2)_RDEPENDS += $($(1)_RDEPENDS)
 | |
| $(2)_MAIN_DOCKER = $(1)
 | |
| $(1)_DBG_DOCKER += $(2)
 | |
| SONIC_DBG_DOCKERS += $(2)
 | |
| endef
 | |
| 
 | |
| 
 | |
| 
 | |
| ###############################################################################
 | |
| ## Utility functions
 | |
| ###############################################################################
 | |
| # Recursive wildcard function
 | |
| rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
 | |
| 
 | |
| expand = $(foreach d,$(1),$(call expand,$($(d)_$(2)),$(2))) $(1)
 | |
| 
 | |
| ###############################################################################
 | |
| ## Uninstall debs
 | |
| ###############################################################################
 | |
| define UNINSTALL_DEBS
 | |
| if [ -n "$(1)" ]; then \
 | |
|     while true; do \
 | |
|         if mkdir $(DEBS_PATH)/dpkg_lock &> /dev/null; then \
 | |
| 		    { sudo DEBIAN_FRONTEND=noninteractive dpkg -P $(foreach deb,$(1),$(firstword $(subst _, ,$(basename $(deb))))) $(LOG) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { rm -d $(DEBS_PATH)/dpkg_lock && exit 1 ; } \
 | |
|         fi; \
 | |
|     done; \
 | |
| fi
 | |
| endef
 | |
| 
 | |
| ###############################################################################
 | |
| ## Setup overlay fs for dpkg admin directory /var/lib/dpkg
 | |
| ###############################################################################
 | |
| define SETUP_OVERLAYFS_FOR_DPKG_ADMINDIR
 | |
| upperdir=$(shell mktemp -d -p $(DPKG_ADMINDIR_PATH))
 | |
| workdir=$(shell mktemp -d -p $(DPKG_ADMINDIR_PATH))
 | |
| mergedir=$(shell mktemp -d -p $(DPKG_ADMINDIR_PATH))
 | |
| sudo mount -t overlay overlay -olowerdir=/var/lib/dpkg,upperdir=$$upperdir,workdir=$$workdir $$mergedir
 | |
| export SONIC_DPKG_ADMINDIR=$$mergedir
 | |
| trap "sudo umount $$mergedir && rm -rf $$mergedir $$upperdir $$workdir" EXIT
 | |
| endef
 | |
| 
 | |
| 
 | |
| ###############################################################################
 | |
| ## Manifest generation routine
 | |
| ## TODO: changelog generation
 | |
| ###############################################################################
 | |
| # call:
 | |
| #     generate_manifest some_docker.gz, version_suffix
 | |
| define generate_manifest
 | |
|     $(eval export version=$($(1).gz_VERSION))
 | |
|     $(eval export version_suffix=$(2))
 | |
|     $(eval export name=$($(1).gz_CONTAINER_NAME))
 | |
|     $(eval export package_name=$($(1).gz_PACKAGE_NAME))
 | |
|     $(eval export asic_service=$(shell [ -f files/build_templates/per_namespace/$(name).service.j2 ] && echo true || echo false))
 | |
|     $(eval export host_service=$(shell [ -f files/build_templates/$(name).service.j2 ] && echo true || echo false))
 | |
|     $(eval export depends=$($(1).gz_PACKAGE_DEPENDS))
 | |
|     $(eval export requires=$($(1).gz_SERVICE_REQUIRES))
 | |
|     $(eval export after=$($(1).gz_SERVICE_AFTER))
 | |
|     $(eval export before=$($(1).gz_SERVICE_BEFORE))
 | |
|     $(eval export dependent_of=$($(1).gz_SERVICE_DEPENDENT_OF))
 | |
|     $(eval export warm_shutdown_after=$($*.gz_WARM_SHUTDOWN_AFTER))
 | |
|     $(eval export warm_shutdown_before=$($*.gz_WARM_SHUTDOWN_BEFORE))
 | |
|     $(eval export fast_shutdown_after=$($*.gz_FAST_SHUTDOWN_AFTER))
 | |
|     $(eval export fast_shutdown_before=$($*.gz_FAST_SHUTDOWN_BEFORE))
 | |
|     $(eval export privileged=$($(1).gz_CONTAINER_PRIVILEGED))
 | |
|     $(eval export volumes=$($(1).gz_CONTAINER_VOLUMES))
 | |
|     $(eval export tmpfs=$($(1).gz_CONTAINER_TMPFS))
 | |
|     $(eval export config_cli_plugin=$($(1).gz_CLI_CONFIG_PLUGIN))
 | |
|     $(eval export show_cli_plugin=$($(1).gz_CLI_SHOW_PLUGIN))
 | |
|     $(eval export clear_cli_plugin=$($(1).gz_CLI_CLEAR_PLUGIN))
 | |
|     j2 --customize scripts/j2cli/json_filter.py files/build_templates/manifest.json.j2 > $($(1).gz_PATH)/manifest.common.json
 | |
|     if [ -f $($*.gz_PATH)/manifest.part.json.j2 ]; then
 | |
|         j2 --customize scripts/j2cli/json_filter.py $($(1).gz_PATH)/manifest.part.json.j2 > $($(1).gz_PATH)/manifest.part.json
 | |
|         jq -s '.[0] * .[1]' $($(1).gz_PATH)/manifest.common.json $($(1).gz_PATH)/manifest.part.json > $($(1).gz_PATH)/manifest.json
 | |
|     else
 | |
|         mv $($(1).gz_PATH)/manifest.common.json $($(1).gz_PATH)/manifest.json
 | |
|     fi
 | |
| endef
 |