Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated Makefile to avoid recursive make #131

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions GAMEMASTER.md
Original file line number Diff line number Diff line change
Expand Up @@ -688,6 +688,11 @@ may not run any more, or will run strangely, which will make you sad.
Adding the new gamedefs in will make you happy again ;)


### 5.1 Creating a new game rule set
1. Create a new directory $gamename
2. Copy basic/Makefile.inc to $gamename
3. Replace "basic" with $gamename
4. Add $gamename to Makefile $GAMES

## 6. World Creation Guide

Expand Down
132 changes: 30 additions & 102 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,124 +6,52 @@
# ---- ------ --------
# 2000/MAR/14 Davis Kulis Added the template code.
# 2004/MAR/29 Jan Rietema Added/modified the gamesets
CXX ?= g++
CXXFLAGS += -g -I. -I.. -Wall -std=c++11 -MP -MMD -O

GAME ?= standard
# allow substitution of dependency file
CXXBUILD = $(CXX) $(CXXFLAGS) -MF $(patsubst %.cpp,dep/%.d,$<) -c -o $@ $<

CPLUS = g++
CC = gcc
CFLAGS = -g -I. -I.. -Wall -std=c++11

RULESET_OBJECTS = extra.o map.o monsters.o rules.o world.o

ENGINE_OBJECTS = alist.o aregion.o army.o astring.o battle.o economy.o \
OBJ := alist.o aregion.o army.o astring.o battle.o economy.o \
edit.o faction.o fileio.o game.o gamedata.o gamedefs.o gameio.o \
genrules.o i_rand.o items.o main.o market.o modify.o monthorders.o \
npc.o object.o orders.o parseorders.o production.o quests.o runorders.o \
shields.o skills.o skillshows.o specials.o spells.o template.o unit.o \
events.o events-battle.o events-assassination.o mapgen.o simplex.o namegen.o

OBJECTS = $(patsubst %.o,$(GAME)/obj/%.o,$(RULESET_OBJECTS)) \
$(patsubst %.o,obj/%.o,$(ENGINE_OBJECTS))

$(GAME)-m: objdir $(OBJECTS)
$(CPLUS) $(CFLAGS) -o $(GAME)/$(GAME) $(OBJECTS)

all: basic standard fracas kingdoms havilah neworigins

arcadia: FORCE
$(MAKE) GAME=arcadia

basic: FORCE
$(MAKE) GAME=basic

standard: FORCE
$(MAKE) GAME=standard

kingdoms: FORCE
$(MAKE) GAME=kingdoms

fracas: FORCE
$(MAKE) GAME=fracas

havilah: FORCE
$(MAKE) GAME=havilah

neworigins: FORCE
$(MAKE) GAME=neworigins

$(GAME)/$(GAME): FORCE
$(MAKE) GAME=$(GAME)

all-clean: basic-clean standard-clean fracas-clean kingdoms-clean \
havilah-clean neworigins-clean

arcadia-clean:
$(MAKE) GAME=arcadia clean

basic-clean:
$(MAKE) GAME=basic clean

standard-clean:
$(MAKE) GAME=standard clean

fracas-clean:
$(MAKE) GAME=fracas clean

kingdoms-clean:
$(MAKE) GAME=kingdoms clean

havilah-clean:
$(MAKE) GAME=havilah clean

neworigins-clean:
$(MAKE) GAME=neworigins clean

clean:
rm -f $(OBJECTS)
if [ -d obj ]; then rmdir obj; fi
if [ -d $(GAME)/obj ]; then rmdir $(GAME)/obj; fi
rm -f $(GAME)/html/$(GAME).html
rm -f $(GAME)/$(GAME)

all-rules: basic-rules standard-rules fracas-rules kingdoms-rules \
havilah-rules neworigins-rules

arcadia-rules:
$(MAKE) GAME=arcadia rules

basic-rules:
$(MAKE) GAME=basic rules
# objects per rule set
RULESET := extra.o map.o monsters.o rules.o world.o

standard-rules:
$(MAKE) GAME=standard rules
# sub games
GAMES := basic standard fracas kingdoms havilah neworigins
# arcadia seems different

fracas-rules:
$(MAKE) GAME=fracas rules

kingdoms-rules:
$(MAKE) GAME=kingdoms rules
DEP := $(addprefix dep/,$(OBJ:.o=.d))
ALL_OBJS := $(addprefix obj/,$(OBJ))

havilah-rules:
$(MAKE) GAME=havilah rules
### targets
.PHONY: all
all: dep obj

neworigins-rules:
$(MAKE) GAME=neworigins rules
.PHONY: all-rules

rules: $(GAME)/$(GAME)
(cd $(GAME); \
./$(GAME) genrules $(GAME)_intro.html $(GAME).css html/$(GAME).html \
)
obj:
@mkdir $@

FORCE:
dep:
@mkdir $@

objdir:
if [ ! -d obj ]; then mkdir obj; fi
if [ ! -d $(GAME)/obj ]; then mkdir $(GAME)/obj; fi
-include $(DEP)
-include $(addsuffix /Makefile.inc, $(GAMES))

.PHONY: clean
clean::
@rm -f $(ALL_OBJS)

$(patsubst %.o,$(GAME)/obj/%.o,$(RULESET_OBJECTS)): $(GAME)/obj/%.o: $(GAME)/%.cpp
$(CPLUS) $(CFLAGS) -c -o $@ $<
.PHONY: all-clean
all-clean:
$(MAKE) clean

$(patsubst %.o,obj/%.o,$(ENGINE_OBJECTS)): obj/%.o: %.cpp
$(CPLUS) $(CFLAGS) -c -o $@ $<
$(ALL_OBJS): obj/%.o: %.cpp
@$(CXXBUILD)

42 changes: 42 additions & 0 deletions basic/Makefile.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# bring in rule set objects
BASIC_OBJS := $(addprefix basic/obj/,$(RULESET))
# map dependencies
BASIC_DEP := $(addprefix dep/basic/,$(RULSET:.o=.d))

# include dependencies
-include $(BASIC_DEP)

# add our dependencies to all
all: dep/basic basic/obj basic

# establish exe
basic: basic/basic

# add our objects to clean
clean::
@rm -f $(BASIC_OBJS) basic/basic

# create directories
basic/obj:
@mkdir $@

dep/basic:
@mkdir $@

$(BASIC_OBJS): basic/obj/%.o: basic/%.cpp
@$(CXXBUILD)

basic/basic: $(ALL_OBJS) $(BASIC_OBJS)
@$(CXX) -o $@ $^

# nice name to generate rules
.PHONY: basic-rules
basic-rules: basic/html/basic.html

all-rules: basic-rules

# generate rules
basic/html/basic.html: basic/basic_intro.html basic/html/basic.css basic/basic
(cd basic; \
./basic genrules basic_intro.html basic.css html/basic.html)

42 changes: 42 additions & 0 deletions fracas/Makefile.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# bring in rule set objects
FRACAS_OBJS := $(addprefix fracas/obj/,$(RULESET))
# map dependencies
FRACAS_DEP := $(addprefix dep/fracas/,$(RULSET:.o=.d))

# include dependencies
-include $(FRACAS_DEP)

# add our dependencies to all
all: dep/fracas fracas/obj fracas

# establish exe
fracas: fracas/fracas

# add our objects to clean
clean::
@rm -f $(FRACAS_OBJS) fracas/fracas

# create directories
fracas/obj:
@mkdir $@

dep/fracas:
@mkdir $@

$(FRACAS_OBJS): fracas/obj/%.o: fracas/%.cpp
@$(CXXBUILD)

fracas/fracas: $(ALL_OBJS) $(FRACAS_OBJS)
@$(CXX) -o $@ $^

# nice name to generate rules
.PHONY: fracas-rules
fracas-rules: fracas/html/fracas.html

all-rules: fracas-rules

# generate rules
fracas/html/fracas.html: fracas/fracas_intro.html fracas/html/fracas.css fracas/fracas
(cd fracas; \
./fracas genrules fracas_intro.html fracas.css html/fracas.html)

42 changes: 42 additions & 0 deletions havilah/Makefile.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# bring in rule set objects
HAVILAH_OBJS := $(addprefix havilah/obj/,$(RULESET))
# map dependencies
HAVILAH_DEP := $(addprefix dep/havilah/,$(RULSET:.o=.d))

# include dependencies
-include $(HAVILAH_DEP)

# add our dependencies to all
all: dep/havilah havilah/obj havilah

# establish exe
havilah: havilah/havilah

# add our objects to clean
clean::
@rm -f $(HAVILAH_OBJS) havilah/havilah

# create directories
havilah/obj:
@mkdir $@

dep/havilah:
@mkdir $@

$(HAVILAH_OBJS): havilah/obj/%.o: havilah/%.cpp
@$(CXXBUILD)

havilah/havilah: $(ALL_OBJS) $(HAVILAH_OBJS)
@$(CXX) -o $@ $^

# nice name to generate rules
.PHONY: havilah-rules
havilah-rules: havilah/html/havilah.html

all-rules: havilah-rules

# generate rules
havilah/html/havilah.html: havilah/havilah_intro.html havilah/html/havilah.css havilah/havilah
(cd havilah; \
./havilah genrules havilah_intro.html havilah.css html/havilah.html)

42 changes: 42 additions & 0 deletions kingdoms/Makefile.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# bring in rule set objects
KINGDOMS_OBJS := $(addprefix kingdoms/obj/,$(RULESET))
# map dependencies
KINGDOMS_DEP := $(addprefix dep/kingdoms/,$(RULSET:.o=.d))

# include dependencies
-include $(KINGDOMS_DEP)

# add our dependencies to all
all: dep/kingdoms kingdoms/obj kingdoms

# establish exe
kingdoms: kingdoms/kingdoms

# add our objects to clean
clean::
@rm -f $(KINGDOMS_OBJS) kingdoms/kingdoms

# create directories
kingdoms/obj:
@mkdir $@

dep/kingdoms:
@mkdir $@

$(KINGDOMS_OBJS): kingdoms/obj/%.o: kingdoms/%.cpp
@$(CXXBUILD)

kingdoms/kingdoms: $(ALL_OBJS) $(KINGDOMS_OBJS)
@$(CXX) -o $@ $^

# nice name to generate rules
.PHONY: kingdoms-rules
kingdoms-rules: kingdoms/html/kingdoms.html

all-rules: kingdoms-rules

# generate rules
kingdoms/html/kingdoms.html: kingdoms/kingdoms_intro.html kingdoms/html/kingdoms.css kingdoms/kingdoms
(cd kingdoms; \
./kingdoms genrules kingdoms_intro.html kingdoms.css html/kingdoms.html)

42 changes: 42 additions & 0 deletions neworigins/Makefile.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# bring in rule set objects
NEWORIGINS_OBJS := $(addprefix neworigins/obj/,$(RULESET))
# map dependencies
NEWORIGINS_DEP := $(addprefix dep/neworigins/,$(RULSET:.o=.d))

# include dependencies
-include $(NEWORIGINS_DEP)

# add our dependencies to all
all: dep/neworigins neworigins/obj neworigins

# establish exe
neworigins: neworigins/neworigins

# add our objects to clean
clean::
@rm -f $(NEWORIGINS_OBJS) neworigins/neworigins

# create directories
neworigins/obj:
@mkdir $@

dep/neworigins:
@mkdir $@

$(NEWORIGINS_OBJS): neworigins/obj/%.o: neworigins/%.cpp
@$(CXXBUILD)

neworigins/neworigins: $(ALL_OBJS) $(NEWORIGINS_OBJS)
@$(CXX) -o $@ $^

# nice name to generate rules
.PHONY: neworigins-rules
neworigins-rules: neworigins/html/neworigins.html

all-rules: neworigins-rules

# generate rules
neworigins/html/neworigins.html: neworigins/neworigins_intro.html neworigins/html/neworigin.css neworigins/neworigins
(cd neworigins; \
./neworigins genrules neworigins_intro.html neworigin.css html/neworigins.html)

Loading