THIS_FILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) SANDBOX_PROG_MAKEFILE_PATH := $(abspath $(firstword $(MAKEFILE_LIST))) SANDBOX_BASE_DIR := $(patsubst %/,%,$(dir $(THIS_FILE_PATH))) SANDBOX_PROG_DIR := $(patsubst %/,%,$(dir $(SANDBOX_PROG_MAKEFILE_PATH))) BUILD_DIR := $(SANDBOX_BASE_DIR)/../build/sandbox include $(SANDBOX_BASE_DIR)/../tools/make/gcc-host.mk EXEC_NAME := sandbox DIR_LIST := memblock vm base INCLUDE_DIRS := $(foreach dir,$(DIR_LIST),-I$(dir)/include) SRC := $(foreach dir,$(DIR_LIST),$(wildcard $(dir)/*.c)) OBJ := $(addprefix $(BUILD_DIR)/,$(SRC:.c=.o)) CFLAGS := $(INCLUDE_DIRS) -g all: $(BUILD_DIR)/$(EXEC_NAME) @for prog in $(SANDBOX_DIR_LIST); do \ $(MAKE) -C $$prog; \ done $(BUILD_DIR)/$(EXEC_NAME): $(OBJ) @mkdir -p $(@D) @printf " \033[1;36mHOSTLD\033[0m \033[1mbuild/sandbox/\033[35m$(EXEC_NAME)\n" @$(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS) $(BUILD_DIR)/%.o: %.c @printf " \033[1;32mHOSTCC\033[0m \033[35msandbox\033[0m/$<\n" @mkdir -p $(@D) @$(CC) $< -o $@ -c $(CFLAGS) .PHONY: all