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
|
.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)
|
||||||
|
|
10
bin/Makefile
10
bin/Makefile
|
@ -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)
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
all:
|
all:
|
||||||
fasm cmd.asm
|
fasm cmd.asm
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
10
lib/Makefile
10
lib/Makefile
|
@ -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)
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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
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…
Add table
Reference in a new issue