Files

99 lines
2.2 KiB
Makefile

#!/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
POOL_DIR := $(WORK_DIR)/pool
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: clean_pool
clean_pool:
rm -rf "$(POOL_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)