99 lines
2.2 KiB
Makefile
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)
|