localserv/Makefile

67 lines
1.8 KiB
Makefile

flags = -Wall -D_GNU_SOURCE -Iinclude
lib-flags = $(flags) -fPIC -shared
obj-flags = $(flags) -c
# the --no-as-needed flag is passed to the linker
# if I was building this correctly it wouldn't be necessary
# but I'm not going to figure out how to do it right now (TODO: figure out)
exe-flags = $(flags) -Wl,--no-as-needed -ljwt
exe := bin/localserv
src := $(wildcard src/*.c) $(wildcard src/**/*.c)
obj := $(src:src/%.c=bin/%.o)
lib-src := $(wildcard lib/*.c)
lib-obj := $(lib-src:lib/%.c=bin/%.o)
all: exe lib
exe: $(exe)
lib: % : server-% client-%
server-lib client-lib: %-lib : bin/%.so
# note: $^ is all prereqs listed on the effective line, $< is first prereq listed
$(exe): $(lib-obj) $(obj)
@mkdir -p $(@D)
@printf "Compiling executable $@ ...\n"
@gcc $(exe-flags) $^ -o $@
@printf "Done.\n"
$(lib-obj) : bin/%.o : include/%.h
$(lib-obj) : bin/%.o : lib/%.c
@mkdir -p $(@D)
@printf "Compiling object for $< ...\n"
@gcc $(obj-flags) $< -o $@
@printf "Done.\n"
$(obj) : bin/%.o : src/%.h
$(obj) : bin/%.o : src/%.c
@mkdir -p $(@D)
@printf "Compiling object for $< ...\n"
@gcc $(obj-flags) $< -o $@
@printf "Done.\n"
bin/%.so : include/%.h
bin/%.so : lib/%.c
@mkdir -p $(@D)
@printf "Compiling DLL for $< ... \n"
@gcc $(lib-flags) $< -o $@
@printf "Done.\n"
clean:
@rm -rf bin/*
@printf "Object files and executable removed.\n"
# for debugging the Makefile. say e.g. "make print-shared-src"
print-% : ; @echo $* = $($*)
# client-test server-test: % : bin/%
# bin/client-test bin/server-test: c-flags += -g
# bin/client-test bin/server-test: bin/%-test : src/c/%.h
# bin/client-test bin/server-test: bin/%-test : src/c/%.c
# @printf "Compiling test executable for $< ... \n"
# @gcc $(c-flags) -o $@ $< && printf "Done.\n"
.PHONY: all clean exe lib server-lib client-lib