From 6bacded5cf3eed117a501213bf9d52bf00a733c8 Mon Sep 17 00:00:00 2001 From: apio Date: Sun, 2 Oct 2022 17:01:30 +0200 Subject: [PATCH] Update build system --- Makefile | 18 ++++++++-------- apps/Makefile | 10 ++------- kernel/Makefile | 10 ++------- libs/Makefile | 6 +++--- libs/libc/Makefile | 54 +++++++++++++++++++++------------------------- tools/env.sh | 9 +++++++- tools/sync-libc.sh | 11 ++++++++++ 7 files changed, 60 insertions(+), 58 deletions(-) create mode 100755 tools/sync-libc.sh diff --git a/Makefile b/Makefile index 87ba859c..b324cb2f 100644 --- a/Makefile +++ b/Makefile @@ -5,20 +5,20 @@ AR := x86_64-luna-ar LD := x86_64-luna-ld build: - @make -C kernel build - @make -C apps build - @make -C libs build + @$(MAKE) -C kernel build + @$(MAKE) -C apps build + @$(MAKE) -C libs build clean: initrd-clean - @make -C kernel clean - @make -C apps clean - @make -C libs clean + @$(MAKE) -C kernel clean + @$(MAKE) -C apps clean + @$(MAKE) -C libs clean initrd-clean: rm -f $(LUNA_ROOT)/initrd/boot/moon.elf $(LUNA_ROOT)/Luna.iso rm -rf $(LUNA_ROOT)/initrd/bin install: - @make -C kernel install - @make -C apps install - @make -C libs install \ No newline at end of file + @$(MAKE) -C kernel install + @$(MAKE) -C apps install + @$(MAKE) -C libs install \ No newline at end of file diff --git a/apps/Makefile b/apps/Makefile index 72c40912..e9722b8c 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -4,21 +4,15 @@ APPS_DIR := $(LUNA_ROOT)/apps APPS_OBJ := $(APPS_DIR)/lib APPS_BIN := $(APPS_DIR)/bin -CC := x86_64-luna-gcc -CXX := x86_64-luna-g++ -ASM := nasm -AR := x86_64-luna-ar -LD := x86_64-luna-ld - REAL_APPS := $(patsubst %, $(APPS_BIN)/%, $(APPS)) ASMFLAGS := -felf64 -APP_LDFLAGS := -nostdlib +LDFLAGS := -nostdlib $(APPS_OBJ)/%.o: $(APPS_DIR)/%.asm @mkdir -p $(@D) - nasm $(ASMFLAGS) -o $@ $^ + $(ASM) $(ASMFLAGS) -o $@ $^ $(APPS_BIN)/%: $(APPS_OBJ)/%.o @mkdir -p $(@D) diff --git a/kernel/Makefile b/kernel/Makefile index ba7e0173..5e9d12dd 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -3,15 +3,9 @@ MOON_SRC := $(MOON_DIR)/src MOON_OBJ := $(MOON_DIR)/lib MOON_BIN := $(MOON_DIR)/bin -CC := x86_64-luna-gcc -CXX := x86_64-luna-g++ -ASM := nasm -AR := x86_64-luna-ar -LD := x86_64-luna-ld - CFLAGS := -Wall -Wextra -Werror -Os -ffreestanding -fstack-protector-all -fno-omit-frame-pointer -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -fshort-wchar -mcmodel=kernel -I$(MOON_DIR)/include -isystem $(MOON_DIR)/include/std CXXFLAGS := -fno-rtti -fno-exceptions -NASMFLAGS := -felf64 +ASMFLAGS := -felf64 LDFLAGS := -T$(MOON_DIR)/moon.ld -nostdlib -lgcc -Wl,--build-id=none -z max-page-size=0x1000 ifneq ($(MOON_BUILD_STABLE), 1) @@ -56,7 +50,7 @@ $(MOON_OBJ)/%.c.o: $(MOON_SRC)/%.c $(MOON_OBJ)/%.asm.o: $(MOON_SRC)/%.asm @mkdir -p $(@D) - nasm $(NASMFLAGS) -o $@ $^ + $(ASM) $(ASMFLAGS) -o $@ $^ build: $(OBJS) @mkdir -p $(@D) diff --git a/libs/Makefile b/libs/Makefile index 50dec626..a0712517 100644 --- a/libs/Makefile +++ b/libs/Makefile @@ -1,8 +1,8 @@ build: - @make -C libc build + @$(MAKE) -C libc build install: - @make -C libc install + @$(MAKE) -C libc install clean: - @make -C libc clean \ No newline at end of file + @$(MAKE) -C libc clean \ No newline at end of file diff --git a/libs/libc/Makefile b/libs/libc/Makefile index 956396bf..54a4067c 100644 --- a/libs/libc/Makefile +++ b/libs/libc/Makefile @@ -3,76 +3,72 @@ LIBC_SRC := $(LIBC_DIR)/src LIBC_OBJ := $(LIBC_DIR)/lib LIBC_BIN := $(LIBC_DIR)/bin -CC := x86_64-luna-gcc -CXX := x86_64-luna-g++ -ASM := nasm -AR := x86_64-luna-ar -LD := x86_64-luna-ld +DESTDIR ?= $(LUNA_BASE)/usr/lib -LIBC_CFLAGS := -Wall -Wextra -Werror -Os -nostdlib -fno-omit-frame-pointer -mno-mmx -mno-sse -mno-sse2 -I$(LIBC_DIR)/include -isystem $(LIBC_DIR)/include -LIBC_CXXFLAGS := -fno-rtti -fno-exceptions -LIBC_NASMFLAGS := -felf64 +CFLAGS := -Wall -Wextra -Werror -Os -nostdlib -fno-omit-frame-pointer -mno-mmx -mno-sse -mno-sse2 +CXXFLAGS := -fno-rtti -fno-exceptions +ASMFLAGS := -felf64 rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) -LIBC_CXX_SRC = $(call rwildcard,$(LIBC_SRC),*.cpp) -LIBC_C_SRC = $(call rwildcard,$(LIBC_SRC),*.c) -LIBC_NASM_SRC = $(call rwildcard,$(LIBC_SRC),*.asm) +CXX_SRC = $(call rwildcard,$(LIBC_SRC),*.cpp) +C_SRC = $(call rwildcard,$(LIBC_SRC),*.c) +ASM_SRC = $(call rwildcard,$(LIBC_SRC),*.asm) -LIBC_OBJS = $(patsubst $(LIBC_SRC)/%.cpp, $(LIBC_OBJ)/%.cpp.o, $(LIBC_CXX_SRC)) -LIBC_OBJS += $(patsubst $(LIBC_SRC)/%.c, $(LIBC_OBJ)/%.c.o, $(LIBC_C_SRC)) -LIBC_OBJS += $(patsubst $(LIBC_SRC)/%.asm, $(LIBC_OBJ)/%.asm.o, $(LIBC_NASM_SRC)) +OBJS = $(patsubst $(LIBC_SRC)/%.cpp, $(LIBC_OBJ)/%.cpp.o, $(CXX_SRC)) +OBJS += $(patsubst $(LIBC_SRC)/%.c, $(LIBC_OBJ)/%.c.o, $(C_SRC)) +OBJS += $(patsubst $(LIBC_SRC)/%.asm, $(LIBC_OBJ)/%.asm.o, $(ASM_SRC)) $(LIBC_OBJ)/%.cpp.o: $(LIBC_SRC)/%.cpp @mkdir -p $(@D) - $(CXX) $(LIBC_CFLAGS) $(LIBC_CXXFLAGS) -o $@ -c $^ + $(CXX) $(CFLAGS) $(CXXFLAGS) -o $@ -c $^ $(LIBC_OBJ)/%.c.o: $(LIBC_SRC)/%.c @mkdir -p $(@D) - $(CC) $(LIBC_CFLAGS) -o $@ -c $^ + $(CC) $(CFLAGS) -o $@ -c $^ $(LIBC_OBJ)/%.asm.o: $(LIBC_SRC)/%.asm @mkdir -p $(@D) - $(ASM) $(LIBC_NASMFLAGS) -o $@ $^ + $(ASM) $(ASMFLAGS) -o $@ $^ -$(LIBC_BIN)/libc.a: $(LIBC_OBJS) +$(LIBC_BIN)/libc.a: $(OBJS) @mkdir -p $(@D) - $(AR) rcs $@ $(LIBC_OBJS) + $(AR) rcs $@ $(OBJS) $(LIBC_BIN)/crt0.o: $(LIBC_DIR)/crt0.asm @mkdir -p $(@D) - $(ASM) $(LIBC_NASMFLAGS) -o $@ $^ + $(ASM) $(ASMFLAGS) -o $@ $^ $(LIBC_BIN)/crti.o: $(LIBC_DIR)/crti.asm @mkdir -p $(@D) - $(ASM) $(LIBC_NASMFLAGS) -o $@ $^ + $(ASM) $(ASMFLAGS) -o $@ $^ $(LIBC_BIN)/crtn.o: $(LIBC_DIR)/crtn.asm @mkdir -p $(@D) - $(ASM) $(LIBC_NASMFLAGS) -o $@ $^ + $(ASM) $(ASMFLAGS) -o $@ $^ build: $(LIBC_BIN)/crt0.o $(LIBC_BIN)/crti.o $(LIBC_BIN)/crtn.o $(LIBC_BIN)/libc.a -$(LUNA_ROOT)/base/usr/lib/libc.a: $(LIBC_BIN)/libc.a +$(DESTDIR)/libc.a: $(LIBC_BIN)/libc.a @mkdir -p $(@D) cp $^ $@ -$(LUNA_ROOT)/base/usr/lib/crt0.o: $(LIBC_BIN)/crt0.o +$(DESTDIR)/crt0.o: $(LIBC_BIN)/crt0.o @mkdir -p $(@D) cp $^ $@ -$(LUNA_ROOT)/base/usr/lib/crti.o: $(LIBC_BIN)/crti.o +$(DESTDIR)/crti.o: $(LIBC_BIN)/crti.o @mkdir -p $(@D) cp $^ $@ -$(LUNA_ROOT)/base/usr/lib/crtn.o: $(LIBC_BIN)/crtn.o +$(DESTDIR)/crtn.o: $(LIBC_BIN)/crtn.o @mkdir -p $(@D) cp $^ $@ -install: $(LUNA_ROOT)/base/usr/lib/libc.a $(LUNA_ROOT)/base/usr/lib/crt0.o $(LUNA_ROOT)/base/usr/lib/crti.o $(LUNA_ROOT)/base/usr/lib/crtn.o +install: $(DESTDIR)/libc.a $(DESTDIR)/crt0.o $(DESTDIR)/crti.o $(DESTDIR)/crtn.o clean: rm -rf $(LIBC_OBJ)/* rm -rf $(LIBC_BIN)/* - rm -f $(LUNA_ROOT)/base/usr/lib/libc.a - rm -f $(LUNA_ROOT)/base/usr/lib/crt*.o \ No newline at end of file + rm -f $(DESTDIR)/libc.a + rm -f $(DESTDIR)/crt*.o \ No newline at end of file diff --git a/tools/env.sh b/tools/env.sh index 3849e8c9..215f0b99 100755 --- a/tools/env.sh +++ b/tools/env.sh @@ -1,3 +1,10 @@ #!/bin/sh export LUNA_ROOT=$(realpath $(dirname $0)/..) -export PATH=$LUNA_ROOT/toolchain/x86-64-luna/bin:$LUNA_ROOT/toolchain/dist:$PATH \ No newline at end of file +export LUNA_BASE=$LUNA_ROOT/base +export PATH=$LUNA_ROOT/toolchain/x86-64-luna/bin:$LUNA_ROOT/toolchain/dist:$PATH + +export CC=x86_64-luna-gcc +export CXX=x86_64-luna-g++ +export LD=x86_64-luna-ld +export AR=x86_64-luna-ar +export ASM=nasm \ No newline at end of file diff --git a/tools/sync-libc.sh b/tools/sync-libc.sh new file mode 100755 index 00000000..858180a1 --- /dev/null +++ b/tools/sync-libc.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e +source $(dirname $0)/env.sh + +cd $LUNA_ROOT + +tools/install-headers.sh + +make -C libs/libc build -j$(nproc) +make -C libs/libc install -j$(nproc) \ No newline at end of file