aboutsummaryrefslogtreecommitdiff
path: root/mubios/Makefile
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-11-07 23:25:43 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-11-07 23:25:43 +0800
commita1dc82e274cd760aa51b6d618b7b15acc43196d6 (patch)
tree1830603605578b5741e09345ca85d81fd334dc5f /mubios/Makefile
parentd7e9021a10a9c88451cdae178d3e8cd05e79df75 (diff)
downloadrcc-project-a1dc82e274cd760aa51b6d618b7b15acc43196d6.tar.gz
rcc-project-a1dc82e274cd760aa51b6d618b7b15acc43196d6.tar.xz
[mubios] setup Makefile and linker script
Signed-off-by: Richard Qin <richard.qin.x@gmail.com>
Diffstat (limited to 'mubios/Makefile')
-rw-r--r--mubios/Makefile64
1 files changed, 64 insertions, 0 deletions
diff --git a/mubios/Makefile b/mubios/Makefile
new file mode 100644
index 0000000..b5c268e
--- /dev/null
+++ b/mubios/Makefile
@@ -0,0 +1,64 @@
+# RCC-Project
+#
+# Copyright (C) 2026 Richard Qin
+#
+# This file is part of RCC-Project.
+#
+# RCC-Project is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3 of the License, or (at your option) any
+# later version.
+#
+# RCC-Project is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# RCC-Project; see the file COPYING. If not see
+# <http://www.gnu.org/licenses/>.
+
+PROJECT := mubios
+BUILD_DIR := build
+ELF := $(BUILD_DIR)/$(PROJECT).elf
+ROM := $(BUILD_DIR)/$(PROJECT).rom
+
+CC := gcc
+AS := as
+LD := ld
+OBJCOPY := objcopy
+
+CFLAGS := -m32 -ffreestanding -fno-pie -fno-stack-protector \
+ -fno-builtin -nostdinc -Iinclude -Wall -Wextra
+ASFLAGS := --32
+LDFLAGS := -m elf_i386 -nostdlib -T linker.ld
+
+C_SRCS := $(wildcard core/*.c drivers/*.c services/*.c)
+S_SRCS := $(wildcard arch/*.S)
+OBJS := $(patsubst %.c,$(BUILD_DIR)/%.o,$(C_SRCS)) \
+ $(patsubst %.S,$(BUILD_DIR)/%.o,$(S_SRCS))
+
+.PHONY: all elf rom
+
+all: $(ROM)
+
+elf: $(ELF)
+
+rom: $(ROM)
+
+$(ELF): $(OBJS) linker.ld
+ @mkdir -p $(dir $@)
+ $(LD) $(LDFLAGS) -o $@ $(OBJS)
+
+$(ROM): $(ELF)
+ @mkdir -p $(dir $@)
+ $(OBJCOPY) -O binary $< $@
+ @test "$$(stat -c %s $@)" -le 65536
+ @truncate -s 65536 $@
+
+$(BUILD_DIR)/%.o: %.c
+ @mkdir -p $(dir $@)
+ $(CC) $(CFLAGS) -c $< -o $@
+
+$(BUILD_DIR)/%.o: %.S
+ @mkdir -p $(dir $@)
+ $(AS) $(ASFLAGS) $< -o $@