summaryrefslogtreecommitdiff
path: root/GNUmakefile
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2011-04-02 22:00:46 -0700
committerBen Longbons <b.r.longbons@gmail.com>2011-04-03 18:26:38 -0700
commit4095d5726ebabc663a6d5397d003773ee652818a (patch)
treeb42844e6a6d8f283d0a31ae92ac5b0d32a669b7b /GNUmakefile
parent7a1b57a80346c1b5f2b2c5b8f0899167bf2fd9b1 (diff)
downloadtmwa-4095d5726ebabc663a6d5397d003773ee652818a.tar.gz
tmwa-4095d5726ebabc663a6d5397d003773ee652818a.tar.bz2
tmwa-4095d5726ebabc663a6d5397d003773ee652818a.tar.xz
tmwa-4095d5726ebabc663a6d5397d003773ee652818a.zip
Rewrite make system to be optimal
Diffstat (limited to 'GNUmakefile')
-rw-r--r--GNUmakefile77
1 files changed, 77 insertions, 0 deletions
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..7d0be35
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,77 @@
+#! /usr/bin/make -f
+SHELL=/bin/bash
+BUILD_DIR = obj
+default: login-server char-server map-server ladmin eathena-monitor
+.DELETE_ON_ERROR:
+include make.defs
+
+.PHONY: all clean common
+.PRECIOUS: %/
+%/:
+ +mkdir -p $@
+
+# The default recipe is suboptimal
+%.c: %.l
+ $(LEX) -o $@ $<
+%.c %.h: %.y
+ $(BISON) -d -o $*.c $<
+
+
+# All this duplication is required because make handles pattern rules specially
+${BUILD_DIR}/char/%.o: src/char/%.c | ${BUILD_DIR}/char/
+ $(COMPILE.c) -o $@ $<
+${BUILD_DIR}/common/%.o: src/common/%.c | ${BUILD_DIR}/common/
+ $(COMPILE.c) -o $@ $<
+${BUILD_DIR}/ladmin/%.o: src/ladmin/%.c | ${BUILD_DIR}/ladmin/
+ $(COMPILE.c) -o $@ $<
+${BUILD_DIR}/login/%.o: src/login/%.c | ${BUILD_DIR}/login/
+ $(COMPILE.c) -o $@ $<
+${BUILD_DIR}/map/%.o: src/map/%.c | ${BUILD_DIR}/map/
+ $(COMPILE.c) -o $@ $<
+${BUILD_DIR}/tool/%.o: src/tool/%.c | ${BUILD_DIR}/tool/
+ $(COMPILE.c) -o $@ $<
+${BUILD_DIR}/webserver/%.o: src/webserver/%.c | ${BUILD_DIR}/webserver/
+ $(COMPILE.c) -o $@ $<
+${BUILD_DIR}/webserver/pages/%.o: src/webserver/pages/%.c | ${BUILD_DIR}/webserver/pages/
+ $(COMPILE.c) -o $@ $<
+
+PROGS = login-server char-server map-server ladmin eathena-monitor webserver
+# Things to actually make
+all: ${PROGS}
+clean:
+ rm -rf ${PROGS} ${BUILD_DIR}/
+common: ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/grfio.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/md5calc.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/nullpo.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o
+
+# Top level programs
+login-server: ${BUILD_DIR}/login/login
+ cp -f $< $@
+char-server: ${BUILD_DIR}/char/char
+ cp -f $< $@
+map-server: ${BUILD_DIR}/map/map
+ cp -f $< $@
+ladmin: ${BUILD_DIR}/ladmin/ladmin
+ cp -f $< $@
+eathena-monitor: ${BUILD_DIR}/tool/eathena-monitor
+ cp -f $< $@
+webserver: ${BUILD_DIR}/webserver/main
+ cp -f $< $@
+
+# Executable dependencies - generated by hand
+${BUILD_DIR}/char/char: ${BUILD_DIR}/char/char.o ${BUILD_DIR}/char/inter.o ${BUILD_DIR}/char/int_party.o ${BUILD_DIR}/char/int_guild.o ${BUILD_DIR}/char/int_storage.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/mt_rand.o
+${BUILD_DIR}/ladmin/ladmin: ${BUILD_DIR}/ladmin/ladmin.o ${BUILD_DIR}/common/md5calc.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/mt_rand.o
+${BUILD_DIR}/login/login: ${BUILD_DIR}/login/login.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/md5calc.o
+${BUILD_DIR}/map/map: LDLIBS=-lm
+${BUILD_DIR}/map/map: ${BUILD_DIR}/map/map.o ${BUILD_DIR}/map/tmw.o ${BUILD_DIR}/map/magic-interpreter-lexer.o ${BUILD_DIR}/map/magic-interpreter-parser.o ${BUILD_DIR}/map/magic-interpreter-base.o ${BUILD_DIR}/map/magic-expr.o ${BUILD_DIR}/map/magic-stmt.o ${BUILD_DIR}/map/magic.o ${BUILD_DIR}/map/map.o ${BUILD_DIR}/map/chrif.o ${BUILD_DIR}/map/clif.o ${BUILD_DIR}/map/pc.o ${BUILD_DIR}/map/npc.o ${BUILD_DIR}/map/chat.o ${BUILD_DIR}/map/path.o ${BUILD_DIR}/map/itemdb.o ${BUILD_DIR}/map/mob.o ${BUILD_DIR}/map/script.o ${BUILD_DIR}/map/storage.o ${BUILD_DIR}/map/skill.o ${BUILD_DIR}/map/skill-pools.o ${BUILD_DIR}/map/atcommand.o ${BUILD_DIR}/map/battle.o ${BUILD_DIR}/map/intif.o ${BUILD_DIR}/map/trade.o ${BUILD_DIR}/map/party.o ${BUILD_DIR}/map/guild.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/grfio.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/nullpo.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/md5calc.o
+${BUILD_DIR}/tool/eathena-monitor: ${BUILD_DIR}/tool/eathena-monitor.o
+${BUILD_DIR}/tool/adduser: ${BUILD_DIR}/tool/adduser.o ${BUILD_DIR}/common/socket.o
+${BUILD_DIR}/tool/itemfrob: ${BUILD_DIR}/tool/itemfrob.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/char/inter.o ${BUILD_DIR}/char/int_guild.o ${BUILD_DIR}/char/int_party.o ${BUILD_DIR}/char/int_storage.o
+${BUILD_DIR}/tool/mapfrob: ${BUILD_DIR}/tool/mapfrob.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/char/inter.o ${BUILD_DIR}/char/int_guild.o ${BUILD_DIR}/char/int_party.o ${BUILD_DIR}/char/int_storage.o
+${BUILD_DIR}/tool/marriage-info: ${BUILD_DIR}/tool/marriage-info.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/char/inter.o ${BUILD_DIR}/char/int_guild.o ${BUILD_DIR}/char/int_party.o ${BUILD_DIR}/char/int_storage.o
+${BUILD_DIR}/webserver/main: ${BUILD_DIR}/webserver/main.o ${BUILD_DIR}/webserver/parse.o ${BUILD_DIR}/webserver/generate.o ${BUILD_DIR}/webserver/htmlstyle.o ${BUILD_DIR}/webserver/logs.o ${BUILD_DIR}/webserver/pages/about.o ${BUILD_DIR}/webserver/pages/sample.o ${BUILD_DIR}/webserver/pages/notdone.o
+
+deps.make:
+ for F in `find src/ -name '*.c'`; do \
+ gcc -m32 -std=c99 -MM "$$F" -MT "$$(sed 's/src/$${BUILD_DIR}/;s/\.c/.o/' <<< "$$F")"; \
+ done > deps.make
+
+include deps.make