#!/usr/bin/env make ##### Have default "all" target listed at the beginning .PHONY: default default: all # Configurable options CONTAINER_CMD ?= docker CONTAINER_IMAGE_TAG ?= imagebuilder-openeuler-24.03-lts LOG_LEVEL ?= INFO ECHOCTL := @ ifeq ($(LOG_LEVEL),DEBUG) ECHOCTL := endif define stack_include #$$(info Makefile "$$(lastword $$(MAKEFILE_STACK))" includes "$1") MAKEFILE_STACK += $1 CURRENT_MAKEFILE := $$(lastword $$(MAKEFILE_STACK)) CURRENT_DIR := $$(dir $$(CURRENT_MAKEFILE)) include $1 MAKEFILE_STACK := $$(wordlist 1,$$(shell expr $$(words $$(MAKEFILE_STACK)) - 1),$$(MAKEFILE_STACK)) CURRENT_MAKEFILE := $$(lastword $$(MAKEFILE_STACK)) CURRENT_DIR := $$(dir $$(CURRENT_MAKEFILE)) endef MAKEFILE_STACK := $(dir .)$(lastword $(MAKEFILE_LIST)) CURRENT_MAKEFILE := $(lastword $(MAKEFILE_STACK)) CURRENT_DIR := $(dir $(CURRENT_MAKEFILE)) ##### Setup out-of-tree build # ROOT_DIR & WORK_DIR are all absolute path. # As well as DIST_DIR & STAGING_DIR ROOT_DIR := $(realpath .) # O= must be an absolute path, otherwise unexpected behavior will occur when used in combination with make -C ifdef O WORK_DIR := $(realpath $(O)) else WORK_DIR := $(ROOT_DIR)/build endif STAGING_DIR := $(WORK_DIR)/staging DIST_DIR := $(WORK_DIR)/dist # Collected targets ROOTFS_TARGETS := BSP_TARGETS := # Makefile function definations $(eval $(call stack_include,$(CURRENT_DIR)functions.mk)) # Load receipes $(eval $(call stack_include,$(CURRENT_DIR)receipes/receipes.mk)) .PHONY: all_rootfs all_rootfs: $(ROOTFS_TARGETS) .PHONY: all_bsp all_bsp: $(BSP_TARGETS) .PHONY: list_rootfs list_rootfs: @echo $(ROOTFS_TARGETS) .PHONY: list_bsp list_bsp: @echo $(BSP_TARGETS) .PHONY: list list: @echo "ROOTFS targets:" @echo "$(ROOTFS_TARGETS)" | tr ' ' '\n' @echo @echo "BSP targets:" @echo "$(BSP_TARGETS)" | tr ' ' '\n' .PHONY: clean clean: rm -rf "$(WORK_DIR)" .PHONY: clean_staging clean_staging: rm -rf "$(STAGING_DIR)" .PHONY: container container: $(CONTAINER_CMD) build -t $(CONTAINER_IMAGE_TAG) $(ROOT_DIR) @echo "New container image is tagged as: $(CONTAINER_IMAGE_TAG)" .PHONY: .test .test: @echo $(ROOTFS_TARGETS) @echo $(BSP_TARGETS)