build: add rules.mk (still WIP)
This commit is contained in:
parent
db96f2a59e
commit
e2ce2c52d2
13 changed files with 199 additions and 122 deletions
36
Makefile
36
Makefile
|
@ -1,30 +1,31 @@
|
|||
.EXPORT_ALL_VARIABLES:
|
||||
.DEFAULT_GOAL:=all
|
||||
|
||||
MAKEFLAGS += --no-print-directory
|
||||
export MAKEFLAGS += --no-print-directory
|
||||
|
||||
TOPDIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
SYSROOTDIR := $(TOPDIR)/sysroot
|
||||
TOOLSDIR := $(TOPDIR)/tools
|
||||
export LIB =
|
||||
|
||||
BINDIR = /bin
|
||||
LIBDIR = /usr/lib
|
||||
INCDIR = /usr/include
|
||||
ASMDIR = /usr/asm
|
||||
export TOPDIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
export SYSROOTDIR := $(TOPDIR)/sysroot
|
||||
export TOOLSDIR := $(TOPDIR)/tools
|
||||
|
||||
AS = fasm
|
||||
CC ?= gcc
|
||||
RM = rm -f
|
||||
export BINDIR = /bin
|
||||
export LIBDIR = /usr/lib
|
||||
export INCDIR = /usr/include
|
||||
export ASMDIR = /usr/asm
|
||||
|
||||
MK_BUGREPORT := \"https://git.cute.engineering/d0p1/StupidOS/issues\"
|
||||
MK_COMMIT := \"$(shell git rev-parse --short HEAD)\"
|
||||
MK_PACKAGE := \"StupidOS\"
|
||||
export AS = fasm
|
||||
export CC ?= gcc
|
||||
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_PACKAGE="$(MK_PACKAGE)" \
|
||||
-I$(TOPDIR)include
|
||||
LDFLAGS =
|
||||
export LDFLAGS =
|
||||
|
||||
|
||||
QEMU_COMMON = \
|
||||
|
@ -44,6 +45,7 @@ TARGET += stupid.iso stupid.hdd
|
|||
else
|
||||
EXEXT = .exe
|
||||
endif
|
||||
export EXEXT
|
||||
|
||||
.PHONY: all
|
||||
all: $(TARGET)
|
||||
|
|
10
bin/Makefile
10
bin/Makefile
|
@ -1,11 +1,3 @@
|
|||
TOPGOALS = all clean install
|
||||
|
||||
SUBDIRS = cmd
|
||||
|
||||
.PHONY: $(TOPGOALS)
|
||||
$(TOPGOALS): $(SUBDIRS)
|
||||
|
||||
.PHONY: $(SUBDIRS)
|
||||
$(SUBDIRS):
|
||||
@echo "📁 bin/$@"
|
||||
@DESTDIR=$(DESTDIR)/bin $(MAKE) -C $@ $(MAKECMDGOALS)
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
all:
|
||||
fasm cmd.asm
|
||||
|
||||
clean:
|
||||
|
||||
install: all
|
||||
all:
|
||||
fasm cmd.asm
|
||||
|
||||
clean:
|
||||
|
||||
install: all
|
||||
|
|
|
@ -1,11 +1,3 @@
|
|||
TOPGOALS = all clean install
|
||||
|
||||
SUBDIRS = bootsect loader efi
|
||||
|
||||
.PHONY: $(TOPGOALS)
|
||||
$(TOPGOALS): $(SUBDIRS)
|
||||
|
||||
.PHONY: $(SUBDIRS)
|
||||
$(SUBDIRS):
|
||||
@echo "📁 boot/$@"
|
||||
@DESTDIR=$(DESTDIR) $(MAKE) -C $@ $(MAKECMDGOALS)
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
|
|
@ -1,18 +1,4 @@
|
|||
INCS = coff.h elf.h
|
||||
SYSINCS = sys/errno.h
|
||||
INCSYSDIR = $(INCDIR)/sys
|
||||
SYSINCS = errno.h
|
||||
INCS = coff.h elf.h $(addprefix sys/, $(SYSINCS))
|
||||
|
||||
.PHONY: all
|
||||
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
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
|
10
lib/Makefile
10
lib/Makefile
|
@ -1,11 +1,3 @@
|
|||
SUBDIRS = csu crypto lzp c
|
||||
|
||||
TOPGOALS = all clean install
|
||||
|
||||
.PHONY: $(TOPGOALS)
|
||||
$(TOPGOALS): $(SUBDIRS)
|
||||
|
||||
.PHONY: $(SUBDIRS)
|
||||
$(SUBDIRS):
|
||||
@echo "📁 lib/$@"
|
||||
@DESTDIR=$(DESTDIR) $(MAKE) -C $@ $(MAKECMDGOALS)
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
|
|
@ -1,20 +1,28 @@
|
|||
TARGET = libc.a
|
||||
LIBS = libc.a
|
||||
OBJS = ctype.o
|
||||
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 $@ $^
|
||||
|
||||
%.o: %.asm
|
||||
$(AS) $< $@
|
||||
|
||||
clean:
|
||||
$(RM) $(TARGET) $(OBJS)
|
||||
$(DESTDIR)$(INCDIR)/%.h: %.h
|
||||
install -D $< $@
|
||||
|
||||
install: $(TARGET)
|
||||
@ mkdir -p $(DESTDIR)$(LIBDIR)
|
||||
install $(TARGET) $(DESTDIR)$(LIBDIR)
|
||||
@ mkdir -p $(DESTDIR)$(INCDIR)
|
||||
install $(INCS) $(DESTDIR)$(INCDIR)
|
||||
$(DESTDIR)$(LIBDIR)/%.a: %.a
|
||||
install -D $< $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(RM) $(LIBS) $(OBJS)
|
||||
|
||||
.PHONY: install
|
||||
install: $(INST)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
TARGET = libcrypto.a
|
||||
LIBS = libcrypto.a
|
||||
OBJS = sha2/sha256.o sha2/sha512.o \
|
||||
chacha/chacha.o \
|
||||
hchacha/hchacha.o
|
||||
|
@ -12,27 +12,33 @@ ASMS = sha2/sha2.inc \
|
|||
chacha/chacha.inc \
|
||||
hchacha/hchacha.inc
|
||||
|
||||
INCCRYPOTDIR = $(INCDIR)/crypto
|
||||
ASMCRYPTODIR = $(ASMDIR)/crypto
|
||||
INST = $(addprefix $(DESTDIR)$(INCDIR)/, $(INCS)) \
|
||||
$(addprefix $(DESTDIR)$(ASMDIR)/, $(ASMS)) \
|
||||
$(addprefix $(DESTDIR)$(LIBDIR)/, $(LIBS))
|
||||
|
||||
all: $(TARGET)
|
||||
.PHONY: all
|
||||
all: $(LIBS)
|
||||
|
||||
$(TARGET): $(OBJS)
|
||||
$(LIBS): $(OBJS)
|
||||
$(AR) rcs $@ $^
|
||||
|
||||
%.o: %.asm
|
||||
$(AS) $< $@
|
||||
|
||||
$(DESTDIR)$(INCDIR)/%.h: %.h
|
||||
install -D $< $@
|
||||
|
||||
$(DESTDIR)$(ASMDIR)/%.inc: %.inc
|
||||
install -D $< $@
|
||||
|
||||
$(DESTDIR)$(LIBDIR)/%.a: %.a
|
||||
install -D $< $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(RM) $(TARGET) $(OBJS)
|
||||
$(RM) $(LIBS) $(OBJS)
|
||||
|
||||
install: $(TARGET)
|
||||
@ mkdir -p $(DESTDIR)$(LIBDIR)
|
||||
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)
|
||||
.PHONY: install
|
||||
install: $(INST)
|
||||
|
||||
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
TARGET = crt0.o
|
||||
LIBS = crt0.o
|
||||
|
||||
all: $(TARGET)
|
||||
INST = $(addprefix $(DESTDIR)$(LIBDIR)/, $(LIBS))
|
||||
|
||||
all: $(LIBS)
|
||||
|
||||
%.o: %.asm
|
||||
$(AS) $< $@
|
||||
|
||||
clean:
|
||||
$(RM) $(TARGET)
|
||||
$(DESTDIR)$(LIBDIR)/%.o: %.o
|
||||
install -D $< $@
|
||||
|
||||
install: $(TARGET)
|
||||
@ mkdir -p $(DESTDIR)$(LIBDIR)
|
||||
install $(TARGET) $(DESTDIR)$(LIBDIR)
|
||||
clean:
|
||||
$(RM) $(LIBS)
|
||||
|
||||
install: $(INST)
|
||||
|
|
|
@ -1,21 +1,35 @@
|
|||
TARGET = liblzp.a
|
||||
LIBS = liblzp.a
|
||||
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 $@ $^
|
||||
|
||||
%.o: %.asm
|
||||
$(AS) $< $@
|
||||
|
||||
clean:
|
||||
$(RM) $(TARGET) $(OBJS)
|
||||
$(DESTDIR)$(INCDIR)/%.h: %.h
|
||||
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)
|
||||
|
|
|
@ -1,11 +1,3 @@
|
|||
TOPGOALS = all clean install
|
||||
|
||||
SUBDIRS = dummy
|
||||
|
||||
.PHONY: $(TOPGOALS)
|
||||
$(TOPGOALS): $(SUBDIRS)
|
||||
|
||||
.PHONY: $(SUBDIRS)
|
||||
$(SUBDIRS):
|
||||
@echo "📁 modules/$@"
|
||||
@DESTDIR=$(DESTDIR) $(MAKE) -C $@ $(MAKECMDGOALS)
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
MODULE = dummy.mod
|
||||
|
||||
INST = $(addprefix $(DESTDIR)/, $(MODULE))
|
||||
|
||||
all:
|
||||
|
||||
clean:
|
||||
|
@ -7,7 +9,8 @@ clean:
|
|||
$(MODULE): $(MODULE:.mod=.asm)
|
||||
fasm $^ $@
|
||||
|
||||
$(DESTDIR)/%.mod: %.mod
|
||||
install -D $< $@
|
||||
|
||||
.PHONY: install
|
||||
install: $(MODULE)
|
||||
@ mkdir -p $(DESTDIR)
|
||||
install $< $(DESTDIR)
|
||||
install: $(INST)
|
||||
|
|
87
rules.mk
Normal file
87
rules.mk
Normal 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 $< $@
|
||||
|
Loading…
Reference in a new issue