Reworked the make system to support multiple object files for different

architectures (cross-compiled..) to reside in different subdirectories.
This allows arch-dependant build without having to do a full recycle
each time.
This commit is contained in:
ariclone 2001-11-04 21:40:30 +00:00
parent 5fa4ad8242
commit c640f37416
17 changed files with 103 additions and 57 deletions

View file

@ -27,35 +27,35 @@
all: $(OBJS)
doc: $(OBJS:.o=.doc) $(HDRS:.h=.doc)
doc: $(SRCS:.c=.doc) $(CPPSRCS.cpp=.doc) $(HDRS:.h=.doc)
clean::
$(RM) $(OBJS) core *.doc
clobber: clean
$(RM) .depend .#* *~ *.o
$(RM) .depend .#* *~ *.$(OE)
depend::
@echo -n >.depend
@for i in $(OBJS:.o=.c*) ; do\
@for i in $(SRCS) $(CPPSRCS) ; do\
$(CC) -MM $(IFLAGS) $(DFLAGS) $$i >>.depend ; done
tags::
@for i in $(OBJS:.o=.c*) ; do\
@for i in $(SRCS) $(CPPSRCS) ; do\
cd .. ;\
ctags $(CTAGSFLAGS) $(TAGS) $(MODULE)/$$i ;\
cd $(MODULE) ;\
done
ci::
ci -l $(OBJS:.o=.c*) $(HDRS) Makefile
ci -l $(SRCS) $(CPPSRCS) $(HDRS) Makefile
lockver::
$(LOCKVER) $(OBJS:.o=.c*) $(HDRS) Makefile
$(LOCKVER) $(SRCS) $(CPPSRCS) $(HDRS) Makefile
distlist::
@echo >>$(DISTLIST)
@for i in `echo $(OBJS:.o=.c*)` $(HDRS) Makefile $(EXTRA) ; do \
@for i in $(SRCS) $(CPPSRCS) $(HDRS) Makefile $(EXTRA) ; do \
echo src/$(MODULE)/$$i >>$(DISTLIST) ; done
$(OBJS): $(TOPDIR)/Rules.make

View file

@ -83,22 +83,31 @@ doc++::
src::
@$(MAKE) -C src all
etlib/hash.o: etlib/hash.c
etlib/getopt.o: etlib/getopt.c
etlib/prgname.o: etlib/prgname.c
etlib/$(OBJDIR)hash.$(OE): etlib/hash.c
@if [ ! -d etlib/$(OBJDIR) ]; then mkdir etlib/$(OBJDIR); fi
$(CC) -c $(CFLAGS) $< -o $@
etlib/$(OBJDIR)getopt.$(OE): etlib/getopt.c
@if [ ! -d etlib/$(OBJDIR) ]; then mkdir etlib/$(OBJDIR); fi
$(CC) -c $(CFLAGS) $< -o $@
etlib/$(OBJDIR)prgname.$(OE): etlib/prgname.c
@if [ ! -d etlib/$(OBJDIR) ]; then mkdir etlib/$(OBJDIR); fi
$(CC) -c $(CFLAGS) $< -o $@
# UNIX-TARGET
freecraft: src etlib/hash.o src/libclone.a
$(CCLD) -o freecraft src/libclone.a $(CLONELIBS) -I. $(CFLAGS)
freecraft: src etlib/$(OBJDIR)hash.$(OE) src/$(OBJDIR)libclone.a
$(CCLD) -o freecraft src/$(OBJDIR)libclone.a etlib/$(OBJDIR)hash.$(OE) $(CLONELIBS) -I. $(CFLAGS)
# WIN32-TARGET
freecraft.exe: src etlib/prgname.o etlib/getopt.o etlib/hash.o \
src/freecraftrc.o src/libclone.a src/main.o
$(CCLD) -o freecraft$(EXE) src/main.o src/libclone.a src/freecraftrc.o \
freecraft.exe: src etlib/$(OBJDIR)prgname.$(OE) etlib/$(OBJDIR)getopt.$(OE) etlib/$(OBJDIR)hash.$(OE) \
src/$(OBJDIR)freecraftrc.$(OE) src/$(OBJDIR)libclone.a src/$(OBJDIR)main.$(OE)
$(CCLD) -o freecraft$(EXE) src/$(OBJDIR)main.$(OE) src/$(OBJDIR)libclone.a src/$(OBJDIR)freecraftrc.$(OE) \
etlib/$(OBJDIR)prgname.$(OE) etlib/$(OBJDIR)getopt.$(OE) etlib/$(OBJDIR)hash.$(OE) \
-lSDLmain $(CLONELIBS) -I. $(CFLAGS)
src/freecraftrc.o: src/freecraft.rc
windres --include-dir contrib -osrc/freecraftrc.o src/freecraft.rc
src/$(OBJDIR)freecraftrc.$(OE): src/freecraft.rc
windres --include-dir contrib -osrc/$(OBJDIR)freecraftrc.$(OE) src/freecraft.rc
# -L. -lefence
# -Lccmalloc-0.2.3/src -lccmalloc -ldl
@ -112,7 +121,7 @@ tools::
clean::
@set -e; for i in $(MODULES) ; do $(MAKE) -C $$i clean ; done
$(RM) core gmon.out cscope.out *.doc etlib/*.o .#*
$(RM) core gmon.out cscope.out *.doc etlib/$(OBJDIR)*.$(OE) .#*
clobber: clean
@set -e; for i in $(MODULES) ; do $(MAKE) -C $$i clobber ; done

14
setup
View file

@ -692,6 +692,7 @@ if test "$WIN32" = 1 ; then
echo "OUTFILE=\$(TOPDIR)/freecraft\$(EXE)" >> $RULESFILE
echo "ARCH=win32" >> $RULESFILE
echo "OE=o" >> $RULESFILE
echo "OBJDIR=winobj/" >> $RULESFILE
else
# LINUX
echo "# Linux" >> $RULESFILE
@ -699,6 +700,7 @@ else
echo "OUTFILE=\$(TOPDIR)/freecraft" >> $RULESFILE
echo "ARCH=linux" >> $RULESFILE
echo "OE=o" >> $RULESFILE
echo "OBJDIR=obj/" >> $RULESFILE
fi
#------------------------------------------------------------------------------
@ -744,19 +746,19 @@ echo >> $RULESFILE
#------------------------------------------------------------------------------
echo "%.o: %.c" >> $RULESFILE
echo "\$(OBJDIR)%.\$(OE): %.c" >> $RULESFILE
echo " \$(CC) -c \$(CFLAGS) \$< -o \$@" >> $RULESFILE
echo " @\$(AR) cru \$(TOPDIR)/src/libclone.a \$@" >> $RULESFILE
echo " @\$(AR) cru \$(TOPDIR)/src/\$(OBJDIR)libclone.a \$@" >> $RULESFILE
if [ "$DARWIN" = "1" ] ; then
echo " ranlib \$(TOPDIR)/src/libclone.a" >> $RULESFILE
echo " ranlib \$(TOPDIR)/src/\$(OBJDIR)libclone.a" >> $RULESFILE
fi
echo >> $RULESFILE
echo "%.o: %.cpp" >> $RULESFILE
echo "\$(OBJDIR)%.\$(OE): %.cpp" >> $RULESFILE
echo " \$(CC) -c \$(CFLAGS) \$< -o \$@" >> $RULESFILE
echo " @\$(AR) cru \$(TOPDIR)/src/libclone.a \$@" >> $RULESFILE
echo " @\$(AR) cru \$(TOPDIR)/src/\$(OBJDIR)libclone.a \$@" >> $RULESFILE
if [ "$DARWIN" = "1" ] ; then
echo " ranlib \$(TOPDIR)/src/libclone.a" >> $RULESFILE
echo " ranlib \$(TOPDIR)/src/\$(OBJDIR)libclone.a" >> $RULESFILE
fi
echo >> $RULESFILE

View file

@ -34,14 +34,19 @@ MODULES= clone map unit action ai ui sound video network pathfinder siod \
game beos missile libmodplug
all::
@set -e; for i in $(MODULES) ; do $(MAKE) -C $$i all ; done
@if [ ! -d ./$(OBJDIR) ] ; then mkdir ./$(OBJDIR) ; fi
@set -e; for i in $(MODULES) ; do\
if [ ! -d $$i/$(OBJDIR) ] ; then mkdir $$i/$(OBJDIR) ; fi ;\
$(MAKE) -C $$i all ;\
done
doc::
@set -e; for i in $(MODULES) include ; do $(MAKE) -C $$i doc ; done
clean::
@set -e; for i in $(MODULES) include ; do $(MAKE) -C $$i clean ; done
$(RM) $(OBJS) libclone.a
$(RM) $(OBJS) $(OBJDIR)libclone.a
-@$(RM) $(OBJDIR)main.$(OE) $(OBJDIR)freecraftrc.$(OE)
clobber:: clean
@set -e; for i in $(MODULES) include ; do $(MAKE) -C $$i clobber ; done

View file

@ -31,13 +31,15 @@ include $(TOPDIR)/Rules.make
MODULE = action
OBJS = command.$(OE) actions.$(OE) action_die.$(OE) action_patrol.$(OE) \
action_still.$(OE) action_stand.$(OE) action_move.$(OE) \
action_follow.$(OE) action_attack.$(OE) action_resource.$(OE) \
action_board.$(OE) action_unload.$(OE) action_repair.$(OE) \
action_harvest.$(OE) action_minegold.$(OE) \
action_returngoods.$(OE) action_research.$(OE) action_demolish.$(OE) \
action_build.$(OE) action_train.$(OE) action_upgradeto.$(OE) \
action_spellcast.$(OE)
SRCS = command.c actions.c action_die.c action_patrol.c \
action_still.c action_stand.c action_move.c \
action_follow.c action_attack.c action_resource.c \
action_board.c action_unload.c action_repair.c \
action_harvest.c action_minegold.c \
action_returngoods.c action_research.c action_demolish.c \
action_build.c action_train.c action_upgradeto.c \
action_spellcast.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -33,7 +33,9 @@ MODULE = ai
HDRS = ai_local.h
OBJS = ai.$(OE) new_ai.$(OE) ccl_ai.$(OE) ai_resource.$(OE) \
ai_building.$(OE) ai_force.$(OE)
SRCS = ai.c new_ai.c ccl_ai.c ai_resource.c \
ai_building.c ai_force.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -30,7 +30,10 @@ TOPDIR = ../..
include $(TOPDIR)/Rules.make
MODULE = beos
OBJS = beos.$(OE)
CPPSRCS = beos.cpp
OBJS = $(addprefix $(OBJDIR), $(CPPSRCS:.cpp=.$(OE)))
#distlist::
# @echo src/$(MODULE)/beos.cpp >>$(DISTLIST)

View file

@ -31,6 +31,8 @@ include $(TOPDIR)/Rules.make
MODULE = game
OBJS = game.$(OE) savegame.$(OE) loadgame.$(OE)
SRCS = game.c savegame.c loadgame.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -33,6 +33,8 @@ include $(TOPDIR)/Rules.make
MODULE = include
SRCS =
OBJS =
HDRS = actions.h ai.h ccl.h freecraft.h construct.h cursor.h font.h icons.h \

View file

@ -31,8 +31,10 @@ include $(TOPDIR)/Rules.make
MODULE = map
OBJS = map.$(OE) map_draw.$(OE) ccl_map.$(OE) \
map_fog.$(OE) map_rock.$(OE) map_wood.$(OE) map_wall.$(OE) \
minimap.$(OE) tileset.$(OE) ccl_tileset.$(OE) map_save.$(OE)
SRCS = map.c map_draw.c ccl_map.c \
map_fog.c map_rock.c map_wood.c map_wall.c \
minimap.c tileset.c ccl_tileset.c map_save.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -30,6 +30,9 @@ TOPDIR = ../..
include $(TOPDIR)/Rules.make
MODULE = network
OBJS = network.$(OE) lowlevel.$(OE) netconnect.$(OE) commands.$(OE)
SRCS = network.c lowlevel.c netconnect.c commands.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -31,6 +31,8 @@ include $(TOPDIR)/Rules.make
MODULE = pathfinder
OBJS = pathfinder.$(OE) astar.$(OE) ccl_pathfinder.$(OE)
SRCS = pathfinder.c astar.c ccl_pathfinder.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -30,7 +30,10 @@ TOPDIR = ../..
include $(TOPDIR)/Rules.make
MODULE = sound
OBJS = sound.$(OE) sound_server.$(OE) ccl_sound.$(OE) sound_id.$(OE) \
unitsound.$(OE)
SRCS = sound.c sound_server.c ccl_sound.c sound_id.c \
unitsound.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -31,9 +31,11 @@ include $(TOPDIR)/Rules.make
MODULE = clone
OBJS = clone.$(OE) mainloop.$(OE) goal.$(OE) selection.$(OE) groups.$(OE) \
unit.$(OE) unit_draw.$(OE) unitcache.$(OE) unit_find.$(OE) \
construct.$(OE) player.$(OE) pud.$(OE) ccl.$(OE) iolib.$(OE) \
spells.$(OE) ccl_player.$(OE)
SRCS = clone.c mainloop.c goal.c selection.c groups.c \
unit.c unit_draw.c unitcache.c unit_find.c \
construct.c player.c pud.c ccl.c iolib.c \
spells.c ccl_player.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -36,8 +36,11 @@ include $(TOPDIR)/Rules.make
##
MODULE = ui
OBJS = mouse.$(OE) button_checks.$(OE) botpanel.$(OE) mainscr.$(OE) \
icons.$(OE) ui.$(OE) ccl_ui.$(OE) menus.$(OE) console.$(OE) \
interface.$(OE)
SRCS = mouse.c button_checks.c botpanel.c mainscr.c \
icons.c ui.c ccl_ui.c menus.c console.c \
interface.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -31,7 +31,9 @@ include $(TOPDIR)/Rules.make
MODULE = unit
OBJS = unittype.$(OE) ccl_unittype.$(OE) upgrade.$(OE) depend.$(OE) \
ccl_unit.$(OE)
SRCS = unittype.c ccl_unittype.c upgrade.c depend.c \
ccl_unit.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk

View file

@ -33,8 +33,10 @@ MODULE = video
HDRS = _clip_rectangle intern_video.h
OBJS = video.$(OE) cursor.$(OE) sprite.$(OE) \
graphic.$(OE) linedraw.$(OE) font.$(OE) png.$(OE) \
sdl.$(OE) new_X11.$(OE) X11.$(OE) svgalib.$(OE) wince.$(OE)
SRCS = video.c cursor.c sprite.c \
graphic.c linedraw.c font.c png.c \
sdl.c new_X11.c X11.c svgalib.c wince.c
OBJS = $(addprefix $(OBJDIR), $(SRCS:.c=.$(OE)))
include $(TOPDIR)/Common.mk