diff --git a/Makefile b/Makefile index 460343d..c1970b9 100644 --- a/Makefile +++ b/Makefile @@ -60,9 +60,10 @@ $(BUILD_DIR)/%.o: %.c @$(CC) $< -o $@ -c $(CFLAGS) $(ARCH_CFLAGS) clean: - @printf " \033[1;93mRM\033[0m Deleting build artefacts.\n" + @printf " \033[1;93mRM\033[0m Deleting kernel build artefacts.\n" @rm -rf $(BUILD_DIR) + @$(MAKE) -C sandbox clean all: $(BUILD_DIR)/$(KERNEL_EXEC) @@ -73,10 +74,13 @@ $(BUILD_DIR)/compile_commands.json: @./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 +.PHONY: all compile-db sandbox .INTERMEDIATE: $(ARCH_TEMP_FILES) diff --git a/sandbox/Makefile b/sandbox/Makefile new file mode 100644 index 0000000..31086e3 --- /dev/null +++ b/sandbox/Makefile @@ -0,0 +1,13 @@ +SANDBOX_DIR_LIST := hello + +all: + @for prog in $(SANDBOX_DIR_LIST); do \ + $(MAKE) -C $$prog; \ + done + +clean: + @for prog in $(SANDBOX_DIR_LIST); do \ + $(MAKE) -C $$prog clean; \ + done + +.PHONY: all clean diff --git a/sandbox/hello/Makefile b/sandbox/hello/Makefile new file mode 100644 index 0000000..cfd9c22 --- /dev/null +++ b/sandbox/hello/Makefile @@ -0,0 +1,4 @@ +SANDBOX_PROG_NAME := hello + +include ../sandbox-config.mk +include ../sandbox-template.mk diff --git a/sandbox/hello/main.c b/sandbox/hello/main.c new file mode 100644 index 0000000..71b0ab7 --- /dev/null +++ b/sandbox/hello/main.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, const char **argv) +{ + printf("Hello, world\n"); + return 0; +} diff --git a/sandbox/sandbox-config.mk b/sandbox/sandbox-config.mk new file mode 100644 index 0000000..cde3424 --- /dev/null +++ b/sandbox/sandbox-config.mk @@ -0,0 +1,8 @@ + +MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) +SANDBOX_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH))) + +include $(SANDBOX_DIR)/../tools/make/gcc-host.mk + +SANDBOX_BUILD_DIR := $(SANDBOX_DIR)/../build/sandbox +BUILD_DIR := $(SANDBOX_BUILD_DIR)/$(SANDBOX_PROG_NAME) diff --git a/sandbox/sandbox-template.mk b/sandbox/sandbox-template.mk new file mode 100644 index 0000000..88a7c82 --- /dev/null +++ b/sandbox/sandbox-template.mk @@ -0,0 +1,22 @@ +BUILD_DIR := $(SANDBOX_BUILD_DIR)/$(SANDBOX_PROG_NAME) + +SRC := $(wildcard *.c) +OBJ := $(addprefix $(BUILD_DIR)/,$(SRC:.c=.o)) + +$(BUILD_DIR)/$(SANDBOX_PROG_NAME): $(OBJ) + @mkdir -p $(@D) + + @printf " \033[1;36mHOSTLD\033[0m \033[1msandbox/$(SANDBOX_PROG_NAME)\033[0m\n" + @$(CC) $< -o $@ $(CFLAGS) $(LDFLAGS) + +$(BUILD_DIR)/%.o: %.c + @printf " \033[1;32mHOSTCC\033[0m $(SANDBOX_PROG_NAME)/$^\n" + @mkdir -p $(@D) + + @$(CC) $< -o $@ -c $(CFLAGS) + +all: $(SANDBOX_PROG_NAME) + +clean: + @printf " \033[1;93mRM\033[0m Deleting sandbox/$(SANDBOX_PROG_NAME)\n" + @rm -rf $(BUILD_DIR) diff --git a/tools/make/gcc-host.mk b/tools/make/gcc-host.mk new file mode 100644 index 0000000..df3bb86 --- /dev/null +++ b/tools/make/gcc-host.mk @@ -0,0 +1,7 @@ +LD := gcc +CC := gcc +ASM := gcc + +CFLAGS := -Wall -Werror -pedantic +ASMFLAGS := $(CFLAGS) +LDFLAGS := -O2