Makefile
changeset 0 cff7fac35cc2
child 1 f3cde3db1fef
equal deleted inserted replaced
-1:000000000000 0:cff7fac35cc2
       
     1 # :set noexpandtab
       
     2 
       
     3 # warnings, and use C99 with GNU extensions
       
     4 CFLAGS = -Wall -std=gnu99 -g
       
     5 
       
     6 # preprocessor flags
       
     7 CPPFLAGS = -Isrc/
       
     8 
       
     9 # output name
       
    10 DIST_NAME = 78949E-as1
       
    11 DIST_RESOURCES = README "Learning Diary.pdf"
       
    12 
       
    13 all: depend bin/daemon lib/libnetdaemon.so bin/client
       
    14 
       
    15 bin/daemon : lib/libnetdaemon.so \
       
    16 	build/obj/daemon/daemon.o build/obj/daemon/service.o build/obj/daemon/client.o build/obj/daemon/commands.o \
       
    17     build/obj/daemon/process.o \
       
    18 	build/obj/shared/select.o build/obj/shared/log.o build/obj/shared/util.o build/obj/shared/signal.o
       
    19 
       
    20 lib/libnetdaemon.so : \
       
    21     build/obj/lib/client.o build/obj/lib/commands.o \
       
    22     build/obj/shared/proto.o
       
    23 
       
    24 bin/client : lib/libnetdaemon.so build/obj/shared/log.o
       
    25 
       
    26 SRC_PATHS = $(wildcard src/*/*.c)
       
    27 SRC_NAMES = $(patsubst src/%,%,$(SRC_PATHS))
       
    28 SRC_DIRS = $(dir $(SRC_NAMES))
       
    29 
       
    30 .PHONY : dirs clean depend dist
       
    31 
       
    32 dirs: 
       
    33 	mkdir -p bin lib run dist
       
    34 	mkdir -p $(SRC_DIRS:%=build/deps/%)
       
    35 	mkdir -p $(SRC_DIRS:%=build/obj/%)
       
    36 
       
    37 clean:
       
    38 	rm -f build/obj/*/*.o build/deps/*/*.d
       
    39 	rm -f bin/* lib/*.so run/*
       
    40 	rm -rf dist/*
       
    41 
       
    42 # .h dependencies
       
    43 depend: $(SRC_NAMES:%.c=build/deps/%.d)
       
    44 
       
    45 build/deps/%.d : src/%.c
       
    46 	@set -e; rm -f $@; \
       
    47 	 $(CC) -MM -MT __ $(CPPFLAGS) $< > $@.$$$$; \
       
    48 	 sed 's,__[ :]*,build/obj/$*.o $@ : ,g' < $@.$$$$ > $@; \
       
    49 	 rm -f $@.$$$$
       
    50 
       
    51 include $(wildcard build/deps/*/*.d)
       
    52 
       
    53 # build (potential) library targets with specific cflags
       
    54 # XXX: just build everything with -fPIC?
       
    55 build/obj/shared/%.o : src/shared/%.c
       
    56 	$(CC) -c -fPIC $(CPPFLAGS) $(CFLAGS) $< -o $@
       
    57 
       
    58 build/obj/lib/%.o : src/lib/%.c
       
    59 	$(CC) -c -fPIC $(CPPFLAGS) $(CFLAGS) $< -o $@
       
    60 
       
    61 # general binary objects
       
    62 build/obj/%.o : src/%.c
       
    63 	$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
       
    64 
       
    65 # output binaries
       
    66 bin/% : build/obj/%/main.o
       
    67 	$(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@
       
    68 
       
    69 # output libraries
       
    70 lib/lib%.so :
       
    71 	$(CC) -shared $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@
       
    72 
       
    73 dist:
       
    74 	mkdir -p dist/$(DIST_NAME)
       
    75 	cp -rv Makefile $(DIST_RESOURCES) src/ dist/$(DIST_NAME)/
       
    76 	rm dist/$(DIST_NAME)/src/*/.*.sw[op]
       
    77 	make -C dist/$(DIST_NAME) dirs
       
    78 	tar -C dist -czvf dist/$(DIST_NAME).tar.gz $(DIST_NAME)
       
    79 	@echo "*** Output at dist/$(DIST_NAME).tar.gz"
       
    80