Files
mango/Makefile

85 lines
2.4 KiB
Makefile

KERNEL_EXEC := socks_kernel
ARCH := x86_64
MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
ROOT_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH)))
include tools/make/gcc-cross-compile.mk
include arch/$(ARCH)/config.mk
BUILD_DIR := build
####################################
# Architecture-specific source files
####################################
ARCH_C_FILES := $(wildcard arch/$(ARCH)/*.c)
ARCH_ASM_FILES := $(wildcard arch/$(ARCH)/*.S)
ARCH_OBJ := $(addprefix $(BUILD_DIR)/,$(ARCH_C_FILES:.c=.o) $(ARCH_ASM_FILES:.S=.o))
####################################
# Platform-independent kernel source files
####################################
KERNEL_SRC_DIRS := init kernel vm
KERNEL_C_FILES := $(foreach dir,$(KERNEL_SRC_DIRS),$(wildcard $(dir)/*.c))
KERNEL_OBJ := $(addprefix $(BUILD_DIR)/,$(KERNEL_C_FILES:.c=.o))
####################################
# Kernel libc source files
####################################
LIBC_SRC_DIRS := stdio string ctype
LIBC_C_FILES := $(foreach dir,$(LIBC_SRC_DIRS),$(wildcard libc/$(dir)/*.c))
LIBC_OBJ := $(addprefix $(BUILD_DIR)/,$(LIBC_C_FILES:.c=.o))
BUILD_ID := $(shell tools/generate_build_id.py --arch $(ARCH))
CFLAGS := $(CFLAGS) -DBUILD_ID=\"$(BUILD_ID)\" -g -Wall -Werror -pedantic \
-Iinclude -Iarch/$(ARCH)/include -Ilibc/include
ASMFLAGS := $(ASMFLAGS) -DBUILD_ID=\"$(BUILD_ID)\"
LDFLAGS := $(LDFLAGS) -g
ALL_KERNEL_OBJECT_FILES := $(KERNEL_OBJ) $(ARCH_OBJ) $(LIBC_OBJ)
all: $(BUILD_DIR)/$(KERNEL_EXEC) sandbox
$(BUILD_DIR)/$(KERNEL_EXEC): $(ALL_KERNEL_OBJECT_FILES)
@printf " \033[1;36mLD\033[0m \033[1mbuild/\033[35m$(KERNEL_EXEC)\033[0m\n"
@mkdir -p $(@D)
@$(LD) $^ -o $@ $(LDFLAGS) $(ARCH_LDFLAGS)
$(BUILD_DIR)/%.o: %.S
@printf " \033[1;32mAS\033[0m \033[35m$(KERNEL_EXEC)\033[0m/$<\n"
@mkdir -p $(@D)
@$(ASM) $< -o $@ -c $(ASMFLAGS) $(ARCH_ASMFLAGS)
$(BUILD_DIR)/%.o: %.c
@printf " \033[1;32mCC\033[0m \033[35m$(KERNEL_EXEC)\033[0m/$<\n"
@mkdir -p $(@D)
@$(CC) $< -o $@ -c $(CFLAGS) $(ARCH_CFLAGS)
clean:
@printf " \033[1;93mRM\033[0m Deleting build files.\n"
@rm -rf $(BUILD_DIR)
$(BUILD_DIR)/compile_commands.json:
@$(MAKE) clean
@printf " \033[1;93mGEN\033[0m Generating compiler database.\n"
@./tools/make/generate_compile_commands.py
sandbox:
@$(MAKE) -C sandbox
compile-db: $(BUILD_DIR)/compile_commands.json
include arch/$(ARCH)/extra.mk
.PHONY: all compile-db sandbox
.INTERMEDIATE: $(ARCH_TEMP_FILES)