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…
	
	Add table
		
		Reference in a new issue