build: add rules.mk (still WIP)

This commit is contained in:
d0p1 🏳️‍⚧️ 2025-01-30 11:59:17 +01:00
parent db96f2a59e
commit e2ce2c52d2
13 changed files with 199 additions and 122 deletions

View file

@ -1,30 +1,31 @@
.EXPORT_ALL_VARIABLES:
.DEFAULT_GOAL:=all .DEFAULT_GOAL:=all
MAKEFLAGS += --no-print-directory export MAKEFLAGS += --no-print-directory
TOPDIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) export LIB =
SYSROOTDIR := $(TOPDIR)/sysroot
TOOLSDIR := $(TOPDIR)/tools
BINDIR = /bin export TOPDIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
LIBDIR = /usr/lib export SYSROOTDIR := $(TOPDIR)/sysroot
INCDIR = /usr/include export TOOLSDIR := $(TOPDIR)/tools
ASMDIR = /usr/asm
AS = fasm export BINDIR = /bin
CC ?= gcc export LIBDIR = /usr/lib
RM = rm -f export INCDIR = /usr/include
export ASMDIR = /usr/asm
MK_BUGREPORT := \"https://git.cute.engineering/d0p1/StupidOS/issues\" export AS = fasm
MK_COMMIT := \"$(shell git rev-parse --short HEAD)\" export CC ?= gcc
MK_PACKAGE := \"StupidOS\" export RM = rm -f
CFLAGS = -DMK_COMMIT="$(MK_COMMIT)" \ export MK_BUGREPORT := \"https://git.cute.engineering/d0p1/StupidOS/issues\"
export MK_COMMIT := \"$(shell git rev-parse --short HEAD)\"
export MK_PACKAGE := \"StupidOS\"
export CFLAGS = -DMK_COMMIT="$(MK_COMMIT)" \
-DMK_BUGREPORT="$(MK_BUGREPORT)" \ -DMK_BUGREPORT="$(MK_BUGREPORT)" \
-DMK_PACKAGE="$(MK_PACKAGE)" \ -DMK_PACKAGE="$(MK_PACKAGE)" \
-I$(TOPDIR)include -I$(TOPDIR)include
LDFLAGS = export LDFLAGS =
QEMU_COMMON = \ QEMU_COMMON = \
@ -44,6 +45,7 @@ TARGET += stupid.iso stupid.hdd
else else
EXEXT = .exe EXEXT = .exe
endif endif
export EXEXT
.PHONY: all .PHONY: all
all: $(TARGET) all: $(TARGET)

View file

@ -1,11 +1,3 @@
TOPGOALS = all clean install
SUBDIRS = cmd SUBDIRS = cmd
.PHONY: $(TOPGOALS) include $(TOPDIR)/rules.mk
$(TOPGOALS): $(SUBDIRS)
.PHONY: $(SUBDIRS)
$(SUBDIRS):
@echo "📁 bin/$@"
@DESTDIR=$(DESTDIR)/bin $(MAKE) -C $@ $(MAKECMDGOALS)

View file

@ -1,11 +1,3 @@
TOPGOALS = all clean install
SUBDIRS = bootsect loader efi SUBDIRS = bootsect loader efi
.PHONY: $(TOPGOALS) include $(TOPDIR)/rules.mk
$(TOPGOALS): $(SUBDIRS)
.PHONY: $(SUBDIRS)
$(SUBDIRS):
@echo "📁 boot/$@"
@DESTDIR=$(DESTDIR) $(MAKE) -C $@ $(MAKECMDGOALS)

View file

@ -1,18 +1,4 @@
INCS = coff.h elf.h SYSINCS = errno.h
SYSINCS = sys/errno.h INCS = coff.h elf.h $(addprefix sys/, $(SYSINCS))
INCSYSDIR = $(INCDIR)/sys
.PHONY: all include $(TOPDIR)/rules.mk
all:
.PHONY: clean
clean:
.PHONY: install
install: $(INCS) $(SYSINCS)
@ mkdir -p $(DESTDIR)$(INCDIR)
install $(INCS) $(DESTDIR)$(INCDIR)
@ mkdir -p $(DESTDIR)$(INCSYSDIR)
install $(SYSINCS) $(DESTDIR)$(INCSYSDIR)
.PHONY: all clean install

View file

@ -1,11 +1,3 @@
SUBDIRS = csu crypto lzp c SUBDIRS = csu crypto lzp c
TOPGOALS = all clean install include $(TOPDIR)/rules.mk
.PHONY: $(TOPGOALS)
$(TOPGOALS): $(SUBDIRS)
.PHONY: $(SUBDIRS)
$(SUBDIRS):
@echo "📁 lib/$@"
@DESTDIR=$(DESTDIR) $(MAKE) -C $@ $(MAKECMDGOALS)

View file

@ -1,20 +1,28 @@
TARGET = libc.a LIBS = libc.a
OBJS = ctype.o OBJS = ctype.o
INCS = stddef.h time.h ctype.h INCS = stddef.h time.h ctype.h
all: $(TARGET) INST = $(addprefix $(DESTDIR)$(INCDIR)/, $(INCS)) \
$(addprefix $(DESTDIR)$(LIBDIR)/, $(LIBS))
$(TARGET): $(OBJS) .PHONY: all
all: $(LIBS)
$(LIBS): $(OBJS)
$(AR) rcs $@ $^ $(AR) rcs $@ $^
%.o: %.asm %.o: %.asm
$(AS) $< $@ $(AS) $< $@
clean: $(DESTDIR)$(INCDIR)/%.h: %.h
$(RM) $(TARGET) $(OBJS) install -D $< $@
install: $(TARGET) $(DESTDIR)$(LIBDIR)/%.a: %.a
@ mkdir -p $(DESTDIR)$(LIBDIR) install -D $< $@
install $(TARGET) $(DESTDIR)$(LIBDIR)
@ mkdir -p $(DESTDIR)$(INCDIR) .PHONY: clean
install $(INCS) $(DESTDIR)$(INCDIR) clean:
$(RM) $(LIBS) $(OBJS)
.PHONY: install
install: $(INST)

View file

@ -1,4 +1,4 @@
TARGET = libcrypto.a LIBS = libcrypto.a
OBJS = sha2/sha256.o sha2/sha512.o \ OBJS = sha2/sha256.o sha2/sha512.o \
chacha/chacha.o \ chacha/chacha.o \
hchacha/hchacha.o hchacha/hchacha.o
@ -12,27 +12,33 @@ ASMS = sha2/sha2.inc \
chacha/chacha.inc \ chacha/chacha.inc \
hchacha/hchacha.inc hchacha/hchacha.inc
INCCRYPOTDIR = $(INCDIR)/crypto INST = $(addprefix $(DESTDIR)$(INCDIR)/, $(INCS)) \
ASMCRYPTODIR = $(ASMDIR)/crypto $(addprefix $(DESTDIR)$(ASMDIR)/, $(ASMS)) \
$(addprefix $(DESTDIR)$(LIBDIR)/, $(LIBS))
all: $(TARGET) .PHONY: all
all: $(LIBS)
$(TARGET): $(OBJS) $(LIBS): $(OBJS)
$(AR) rcs $@ $^ $(AR) rcs $@ $^
%.o: %.asm %.o: %.asm
$(AS) $< $@ $(AS) $< $@
$(DESTDIR)$(INCDIR)/%.h: %.h
install -D $< $@
$(DESTDIR)$(ASMDIR)/%.inc: %.inc
install -D $< $@
$(DESTDIR)$(LIBDIR)/%.a: %.a
install -D $< $@
.PHONY: clean
clean: clean:
$(RM) $(TARGET) $(OBJS) $(RM) $(LIBS) $(OBJS)
install: $(TARGET) .PHONY: install
@ mkdir -p $(DESTDIR)$(LIBDIR) install: $(INST)
install $(TARGET) $(DESTDIR)$(LIBDIR)
@ mkdir -p $(DESTDIR)$(INCCRYPOTDIR)
install $(INCS) $(DESTDIR)$(INCCRYPOTDIR)
install crypto.h $(DESTDIR)$(INCDIR)
@ mkdir -p $(DESTDIR)$(ASMCRYPTODIR)
install $(ASMS) $(DESTDIR)$(ASMCRYPTODIR)

View file

@ -1,13 +1,16 @@
TARGET = crt0.o LIBS = crt0.o
all: $(TARGET) INST = $(addprefix $(DESTDIR)$(LIBDIR)/, $(LIBS))
all: $(LIBS)
%.o: %.asm %.o: %.asm
$(AS) $< $@ $(AS) $< $@
clean: $(DESTDIR)$(LIBDIR)/%.o: %.o
$(RM) $(TARGET) install -D $< $@
install: $(TARGET) clean:
@ mkdir -p $(DESTDIR)$(LIBDIR) $(RM) $(LIBS)
install $(TARGET) $(DESTDIR)$(LIBDIR)
install: $(INST)

View file

@ -1,21 +1,35 @@
TARGET = liblzp.a LIBS = liblzp.a
OBJS = lzp.o OBJS = lzp.o
all: $(TARGET) INCS = lzp.h
ASMINCS = lzp.inc
$(TARGET): $(OBJS) INST = $(addprefix $(DESTDIR)$(INCDIR)/, $(INCS)) \
$(addprefix $(DESTDIR)$(ASMDIR)/, $(ASMINCS)) \
$(addprefix $(DESTDIR)$(LIBDIR)/, $(LIBS))
.PHONY: all
all: $(LIBS)
$(LIBS): $(OBJS)
$(AR) rcs $@ $^ $(AR) rcs $@ $^
%.o: %.asm %.o: %.asm
$(AS) $< $@ $(AS) $< $@
clean: $(DESTDIR)$(INCDIR)/%.h: %.h
$(RM) $(TARGET) $(OBJS) install -D $< $@
$(DESTDIR)$(ASMDIR)/%.inc: %.inc
install -D $< $@
$(DESTDIR)$(LIBDIR)/%.a: %.a
install -D $< $@
.PHONY: clean
clean:
$(RM) $(LIBS) $(OBJS)
.PHONY: install
install: $(INST)
install: $(TARGET)
@ mkdir -p $(DESTDIR)$(LIBDIR)
install $(TARGET) $(DESTDIR)$(LIBDIR)
@ mkdir -p $(DESTDIR)$(INCDIR)
install lzp.h $(DESTDIR)$(INCDIR)
@ mkdir -p $(DESTDIR)$(ASMDIR)
install lzp.inc $(DESTDIR)$(ASMDIR)

View file

@ -1,11 +1,3 @@
TOPGOALS = all clean install
SUBDIRS = dummy SUBDIRS = dummy
.PHONY: $(TOPGOALS) include $(TOPDIR)/rules.mk
$(TOPGOALS): $(SUBDIRS)
.PHONY: $(SUBDIRS)
$(SUBDIRS):
@echo "📁 modules/$@"
@DESTDIR=$(DESTDIR) $(MAKE) -C $@ $(MAKECMDGOALS)

View file

@ -1,5 +1,7 @@
MODULE = dummy.mod MODULE = dummy.mod
INST = $(addprefix $(DESTDIR)/, $(MODULE))
all: all:
clean: clean:
@ -7,7 +9,8 @@ clean:
$(MODULE): $(MODULE:.mod=.asm) $(MODULE): $(MODULE:.mod=.asm)
fasm $^ $@ fasm $^ $@
$(DESTDIR)/%.mod: %.mod
install -D $< $@
.PHONY: install .PHONY: install
install: $(MODULE) install: $(INST)
@ mkdir -p $(DESTDIR)
install $< $(DESTDIR)

87
rules.mk Normal file
View file

@ -0,0 +1,87 @@
TARGETS = all install clean
.PHONY: $(TARGETS)
$(TARGETS): ;
_INST = $(addprefix $(DESTDIR)$(INCDIR)/, $(INCS)) \
$(addprefix $(DESTDIR)$(ASMDIR)/, $(ASMINCS)) \
$(addprefix $(DESTDIR)$(LIBDIR)/, $(LIB))
# ----------------- Subdirs -----------------------
ifdef SUBDIRS
_SUBDIRS:=$(filter-out .WAIT,$(SUBDIRS))
_CURDIR=$(subst $(TOPDIR),,$(CURDIR))
ifneq ($(_CURDIR),)
_CURDIR:=$(_CURDIR)/
endif
.PHONY: $(_SUBDIRS)
$(_SUBDIRS):
@echo "📁 $(_CURDIR)$@"
@DESTDIR=$(DESTDIR) $(MAKE) -C $@ $(MAKECMDGOALS)
$(TARGETS): $(SUBDIRS)
endif
# --------------- Build rules ------------------
%.o: %.asm
$(AS) $< $@
# --------------- Lib rules --------------------
ifneq ($(LIB),)
all: $(LIB)
_cleanlib:
$(RM) $(LIB)
clean: _cleanlib
endif
# --------------- Progs rules -------------------
ifneq ($(PROG),)
all: $(PROG)
endif
# --------------- Install rules -----------------
ifneq ($(_INST),)
install: $(_INST)
endif
# headers
$(DESTDIR)$(INCDIR)/%.h: %.h
install -D $< $@
$(DESTDIR)$(ASMDIR)/%.inc: %.inc
install -D $< $@
# libs
$(DESTDIR)$(LIBDIR)/%.a: %.a
install -D $< $@
$(DESTDIR)$(LIBDIR)/%.o: %.o
install -D $< $@
# bins
$(DESTDIR)$(BINDIR)/%: %
install -D $< $@
# kernel & mods
$(DESTDIR)/%.sys: %.sys
install -D $< $@
$(DESTDIR)/%.mod: %.mod
install -D $< $@