diff options
Diffstat (limited to '')
-rw-r--r-- | Makefile | 118 | ||||
-rw-r--r-- | build.mk | 55 | ||||
-rw-r--r-- | config.mk | 70 |
3 files changed, 138 insertions, 105 deletions
@@ -4,122 +4,32 @@ # without any warranty. -# The package path prefix, if you want to install to another root, set DESTDIR to that root. -PREFIX ?= /usr -# The command path excluding prefix. -BIN ?= /bin -# The library path excluding prefix. -LIB ?= /lib -# The executable library path excluding prefix. -LIBEXEC ?= /libexec -# The resource path excluding prefix. -DATA ?= /share -# The command path including prefix. -BINDIR ?= $(PREFIX)$(BIN) -# The library path including prefix. -LIBDIR ?= $(PREFIX)$(LIB) -# The executable library path including prefix. -LIBEXECDIR ?= $(PREFIX)$(LIBEXEC) -# The resource path including prefix. -DATADIR ?= $(PREFIX)$(DATA) -# The generic documentation path including prefix. -DOCDIR ?= $(DATADIR)/doc -# The info manual documentation path including prefix. -INFODIR ?= $(DATADIR)/info -# The license base path including prefix. -LICENSEDIR ?= $(DATADIR)/licenses - -# The name of the package as it should be installed. -PKGNAME ?= mds - - -# Optimisation level (and debug flags.) -OPTIMISE = -Og -g - -# Enabled Warnings. -WARN = -Wall -Wextra -pedantic -Wdouble-promotion -Wformat=2 -Winit-self \ - -Wmissing-include-dirs -Wtrampolines -Wfloat-equal -Wshadow \ - -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls \ - -Wnested-externs -Winline -Wno-variadic-macros -Wsign-conversion \ - -Wswitch-default -Wconversion -Wsync-nand -Wunsafe-loop-optimizations \ - -Wcast-align -Wstrict-overflow -Wdeclaration-after-statement -Wundef \ - -Wbad-function-cast -Wcast-qual -Wwrite-strings -Wlogical-op \ - -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wpacked \ - -Wvector-operation-performance -Wunsuffixed-float-constants \ - -Wsuggest-attribute=const -Wsuggest-attribute=noreturn \ - -Wsuggest-attribute=pure -Wsuggest-attribute=format -Wnormalized=nfkc - -# The C standard used in the code. -STD = gnu99 - -# Libraries linking flags. -LDS = -pthread -Lbin -lmdsserver -lrt - -# C compiler debug flags. -DEBUG_FLAGS = -ifeq ($(DEBUG),y) -DEBUG_FLAGS += -D'DEBUG' -DEBUG_FLAGS += -D'LIBEXECDIR="$(shell pwd)/bin"' -endif - -# Options for the C compiler. -C_FLAGS = $(OPTIMISE) $(WARN) -std=$(STD) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \ - -ftree-vrp -fstrict-aliasing -fipa-pure-const -fstack-usage \ - -fstrict-overflow -funsafe-loop-optimizations -fno-builtin \ - -D'_GNU_SOURCE' -D'PKGNAME="$(PKGNAME)"' $(DEBUG_FLAGS) - - -# Object files for the libary +# Include configurations. +include config.mk + + +# Object files for the libary. LIBOBJ = linked-list client-list hash-table fd-table mds-message util # Servers and utilities. SERVERS = mds mds-respawn mds-server mds-echo mds-registry -# Build rules. - -.PHONY: all -all: obj/mds-base.o $(foreach S,$(SERVERS),bin/$(S)) bin/libmdsserver.so - - -MDS_SERVER_OBJ_ = mds-server interception-condition client multicast \ - queued-interception globals signals interceptors \ - sending slavery reexec receiving -MDS_SERVER_OBJ = obj/mds-base.o $(foreach O,$(MDS_SERVER_OBJ_),obj/mds-server/$(O).o) -bin/mds-server: $(MDS_SERVER_OBJ) bin/libmdsserver.so - mkdir -p $(shell dirname $@) - $(CC) $(C_FLAGS) -o $@ $(LDS) $(MDS_SERVER_OBJ) -ifeq ($(DEBUG),y) - mv $@ $@.real - cp test.d/mds-server $@ -endif +OBJ_mds-server = mds-server interception-condition client multicast \ + queued-interception globals signals interceptors \ + sending slavery reexec receiving -bin/%: obj/%.o obj/mds-base.o bin/libmdsserver.so - mkdir -p $(shell dirname $@) - $(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_$*) $< obj/mds-base.o +OBJ_mds-server_ = $(foreach O,$(OBJ_mds-server),obj/mds-server/$(O).o) -bin/mds: obj/mds.o bin/libmdsserver.so - mkdir -p $(shell dirname $@) - $(CC) $(C_FLAGS) -o $@ $(LDS) $< -obj/mds-server/%.o: src/mds-server/%.c src/mds-server/*.h src/libmdsserver/*.h - mkdir -p $(shell dirname $@) - $(CC) $(C_FLAGS) -Isrc -c -o $@ $< -obj/%.o: src/%.c src/*.h src/libmdsserver/*.h - mkdir -p $(shell dirname $@) - $(CC) $(C_FLAGS) -Isrc -c -o $@ $< - - -bin/libmdsserver.so: $(foreach O,$(LIBOBJ),obj/libmdsserver/$(O).o) - mkdir -p $(shell dirname $@) - $(CC) $(C_FLAGS) -shared -o $@ $^ +# Build rules. -obj/libmdsserver/%.o: src/libmdsserver/%.c src/libmdsserver/*.h - mkdir -p $(shell dirname $@) - $(CC) $(C_FLAGS) -fPIC -c -o $@ $< +.PHONY: all +all: servers libraries +include build.mk # Set permissions on built files. @@ -128,8 +38,6 @@ perms: all sudo chown 'root:root' bin/mds sudo chmod 4755 bin/mds - - # Clean rules. .PHONY: clean diff --git a/build.mk b/build.mk new file mode 100644 index 0000000..31a62ad --- /dev/null +++ b/build.mk @@ -0,0 +1,55 @@ +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. This file is offered as-is, +# without any warranty. + + +.PHONY: libraries +libraries: bin/libmdsserver.so + +.PHONY: servers +servers: $(foreach S,$(SERVERS),bin/$(S)) + + +# Link large servers. + +bin/mds-server: $(OBJ_mds-server_) obj/mds-base.o bin/libmdsserver.so + mkdir -p $(shell dirname $@) + $(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_mds-server) $(OBJ_mds-server_) obj/mds-base.o +ifeq ($(DEBUG),y) + mv $@ $@.real + cp test.d/mds-server $@ +endif + + +# Link small servers. + +bin/%: obj/%.o obj/mds-base.o bin/libmdsserver.so + mkdir -p $(shell dirname $@) + $(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_$*) $< obj/mds-base.o + + +# Link kernel. + +bin/mds: obj/mds.o bin/libmdsserver.so + mkdir -p $(shell dirname $@) + $(CC) $(C_FLAGS) -o $@ $(LDS) $(LDS_mds) $< + + +# Build object files for kernel/servers. + +obj/%.o: src/%.c $(shell dirname src/%)/*.h src/mds-base.h src/libmdsserver/*.h + mkdir -p $(shell dirname $@) + $(CC) $(C_FLAGS) -Isrc -c -o $@ $< + + +# Build libmdsserver. + +bin/libmdsserver.so: $(foreach O,$(LIBOBJ),obj/libmdsserver/$(O).o) + mkdir -p $(shell dirname $@) + $(CC) $(C_FLAGS) -shared -o $@ $^ + +obj/libmdsserver/%.o: src/libmdsserver/%.c src/libmdsserver/*.h + mkdir -p $(shell dirname $@) + $(CC) $(C_FLAGS) -fPIC -c -o $@ $< + diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..25e50b8 --- /dev/null +++ b/config.mk @@ -0,0 +1,70 @@ +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. This file is offered as-is, +# without any warranty. + + +# The package path prefix, if you want to install to another root, set DESTDIR to that root. +PREFIX ?= /usr +# The command path excluding prefix. +BIN ?= /bin +# The library path excluding prefix. +LIB ?= /lib +# The executable library path excluding prefix. +LIBEXEC ?= /libexec +# The resource path excluding prefix. +DATA ?= /share +# The command path including prefix. +BINDIR ?= $(PREFIX)$(BIN) +# The library path including prefix. +LIBDIR ?= $(PREFIX)$(LIB) +# The executable library path including prefix. +LIBEXECDIR ?= $(PREFIX)$(LIBEXEC) +# The resource path including prefix. +DATADIR ?= $(PREFIX)$(DATA) +# The generic documentation path including prefix. +DOCDIR ?= $(DATADIR)/doc +# The info manual documentation path including prefix. +INFODIR ?= $(DATADIR)/info +# The license base path including prefix. +LICENSEDIR ?= $(DATADIR)/licenses + +# The name of the package as it should be installed. +PKGNAME ?= mds + + +# Optimisation level (and debug flags.) +OPTIMISE = -Og -g + +# Enabled Warnings. +WARN = -Wall -Wextra -pedantic -Wdouble-promotion -Wformat=2 -Winit-self \ + -Wmissing-include-dirs -Wtrampolines -Wfloat-equal -Wshadow \ + -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls \ + -Wnested-externs -Winline -Wno-variadic-macros -Wsign-conversion \ + -Wswitch-default -Wconversion -Wsync-nand -Wunsafe-loop-optimizations \ + -Wcast-align -Wstrict-overflow -Wdeclaration-after-statement -Wundef \ + -Wbad-function-cast -Wcast-qual -Wwrite-strings -Wlogical-op \ + -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wpacked \ + -Wvector-operation-performance -Wunsuffixed-float-constants \ + -Wsuggest-attribute=const -Wsuggest-attribute=noreturn \ + -Wsuggest-attribute=pure -Wsuggest-attribute=format -Wnormalized=nfkc + +# The C standard used in the code. +STD = gnu99 + +# Libraries linking flags. +LDS = -pthread -Lbin -lmdsserver -lrt + +# C compiler debug flags. +DEBUG_FLAGS = +ifeq ($(DEBUG),y) +DEBUG_FLAGS += -D'DEBUG' +DEBUG_FLAGS += -D'LIBEXECDIR="$(shell pwd)/bin"' +endif + +# Options for the C compiler. +C_FLAGS = $(OPTIMISE) $(WARN) -std=$(STD) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \ + -ftree-vrp -fstrict-aliasing -fipa-pure-const -fstack-usage \ + -fstrict-overflow -funsafe-loop-optimizations -fno-builtin \ + -D'_GNU_SOURCE' -D'PKGNAME="$(PKGNAME)"' $(DEBUG_FLAGS) + |