Makefile: Refactor using advanced GNU Make tricks and $(eval), part 1: targets

git-svn-id: https://svn.eduke32.com/eduke32@6093 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2017-03-23 03:03:32 +00:00
parent 6fbf4e6f1c
commit 63eadeb0e1

View file

@ -544,12 +544,12 @@ endif
## Construct file names of object files ## Construct file names of object files
COMMON_EDITOR_OBJS_EXP:=$(addprefix $(DUKE3D_OBJ)/,$(addsuffix .$o,$(COMMON_EDITOR_OBJS))) COMMON_EDITOR_OBJS_EXP:=$(addprefix $(DUKE3D_OBJ)/,$(addsuffix .$o,$(COMMON_EDITOR_OBJS))) $(ENGINE_EDITOR_OBJS_EXP)
MIDI_OBJS_EXP:=$(addprefix $(DUKE3D_OBJ)/,$(addsuffix .$o,$(MIDI_OBJS))) MIDI_OBJS_EXP:=$(addprefix $(DUKE3D_OBJ)/,$(addsuffix .$o,$(MIDI_OBJS)))
DUKE3D_GAME_OBJS_EXP:=$(addprefix $(DUKE3D_OBJ)/,$(addsuffix .$o,$(DUKE3D_GAME_OBJS))) DUKE3D_GAME_OBJS_EXP:=$(addprefix $(DUKE3D_OBJ)/,$(addsuffix .$o,$(DUKE3D_GAME_OBJS))) $(MIDI_OBJS_EXP) $(AUDIOLIB_OBJS_EXP) $(MACT_OBJS_EXP) $(ENET_TARGET)
DUKE3D_EDITOR_OBJS_EXP:=$(addprefix $(DUKE3D_OBJ)/,$(addsuffix .$o,$(DUKE3D_EDITOR_OBJS))) DUKE3D_EDITOR_OBJS_EXP:=$(addprefix $(DUKE3D_OBJ)/,$(addsuffix .$o,$(DUKE3D_EDITOR_OBJS))) $(AUDIOLIB_OBJS_EXP)
# Shadow Warrior # Shadow Warrior
@ -665,8 +665,32 @@ ifeq ($(PLATFORM),WINDOWS)
SW_EDITOR_OBJS+= buildres SW_EDITOR_OBJS+= buildres
endif endif
SW_GAME_OBJS_EXP:=$(addprefix $(SW_OBJ)/,$(addsuffix .$o,$(SW_GAME_OBJS))) SW_GAME_OBJS_EXP:=$(addprefix $(SW_OBJ)/,$(addsuffix .$o,$(SW_GAME_OBJS))) $(MIDI_OBJS_EXP) $(AUDIOLIB_OBJS_EXP) $(MACT_OBJS_EXP)
SW_EDITOR_OBJS_EXP:=$(addprefix $(SW_OBJ)/,$(addsuffix .$o,$(SW_EDITOR_OBJS))) SW_EDITOR_OBJS_EXP:=$(addprefix $(SW_OBJ)/,$(addsuffix .$o,$(SW_EDITOR_OBJS))) $(AUDIOLIB_OBJS_EXP)
### component definitions end
### targets begin
GAMES := \
KENBUILD \
DUKE3D \
SW \
LIBRARIES := \
ENGINE \
AUDIOLIB \
MACT \
ENET \
COMPONENTS = \
$(GAMES) \
$(LIBRARIES) \
TOOLS \
ROLES = \
GAME \
EDITOR \
ifeq ($(PRETTY_OUTPUT),1) ifeq ($(PRETTY_OUTPUT),1)
@ -700,103 +724,43 @@ start:
tools: $(addsuffix $(EXESUFFIX),$(TOOLS_TARGETS)) tools: $(addsuffix $(EXESUFFIX),$(TOOLS_TARGETS))
@ls -l $^ @ls -l $^
ifeq ($(PLATFORM),WII) ifeq ($(PLATFORM),WII)
ifneq ($(ELF2DOL),) ifneq ($(ELF2DOL),)
$(KENBUILD_GAME)$(DOLSUFFIX): $(KENBUILD_GAME)$(EXESUFFIX) %$(DOLSUFFIX): %$(EXESUFFIX)
$(KENBUILD_EDITOR)$(DOLSUFFIX): $(KENBUILD_EDITOR)$(EXESUFFIX)
$(DUKE3D_GAME)$(DOLSUFFIX): $(DUKE3D_GAME)$(EXESUFFIX)
$(DUKE3D_EDITOR)$(DOLSUFFIX): $(DUKE3D_EDITOR)$(EXESUFFIX)
$(SW_GAME)$(DOLSUFFIX): $(SW_GAME)$(EXESUFFIX)
$(SW_EDITOR)$(DOLSUFFIX): $(SW_EDITOR)$(EXESUFFIX)
endif endif
endif endif
$(KENBUILD_GAME)$(EXESUFFIX): $(KENBUILD_GAME_OBJS_EXP) $(ENGINE_OBJS_EXP) define BUILDRULE
$(LINK_STATUS)
$(RECIPE_IF) $(LINKER) -o $@ $^ $(GUI_LIBS) $(LIBDIRS) $(LIBS) $(RECIPE_RESULT_LINK) $$($1_$2)$$(EXESUFFIX): $$($1_$2_OBJS_EXP) $$(COMMON_$2_OBJS_EXP) $$(ENGINE_OBJS_EXP) $$($1_$2_MISCDEPS)
ifeq ($(PLATFORM),WII) $$(LINK_STATUS)
ifneq ($(ELF2DOL),) $$(RECIPE_IF) $$(LINKER) -o $$@ $$^ $$(GUI_LIBS) $$($1_$2_LDFLAGS) $$(LIBDIRS) $$(LIBS) $$(RECIPE_RESULT_LINK)
$(ELF2DOL) $(KENBUILD_GAME)$(EXESUFFIX) $(KENBUILD_GAME)$(DOLSUFFIX) ifeq ($$(PLATFORM),WII)
ifneq ($$(ELF2DOL),)
$$(ELF2DOL) $$@ $$($1_$2)$$(DOLSUFFIX)
endif endif
endif endif
ifneq ($(STRIP),) ifneq ($$(STRIP),)
$(STRIP) $@ $$(STRIP) $$@ $$($1_$2_STRIPFLAGS)
endif
ifeq ($$(PLATFORM),DARWIN)
cp -RPf "platform/Apple/bundles/$$($1_$2_PROPER).app" "./"
mkdir -p "$$($1_$2_PROPER).app/Contents/MacOS"
cp -f "$$($1_$2)$$(EXESUFFIX)" "$$($1_$2_PROPER).app/Contents/MacOS/"
endif endif
$(KENBUILD_EDITOR)$(EXESUFFIX): $(KENBUILD_EDITOR_OBJS_EXP) $(COMMON_EDITOR_OBJS_EXP) $(ENGINE_EDITOR_OBJS_EXP) $(ENGINE_OBJS_EXP) endef
$(LINK_STATUS)
$(RECIPE_IF) $(LINKER) -o $@ $^ $(GUI_LIBS) $(LIBDIRS) $(LIBS) $(RECIPE_RESULT_LINK)
ifeq ($(PLATFORM),WII)
ifneq ($(ELF2DOL),)
$(ELF2DOL) $(KENBUILD_EDITOR)$(EXESUFFIX) $(KENBUILD_EDITOR)$(DOLSUFFIX)
endif
endif
ifneq ($(STRIP),)
$(STRIP) $@
endif
$(DUKE3D_GAME)$(EXESUFFIX): $(DUKE3D_GAME_OBJS_EXP) $(MIDI_OBJS_EXP) $(ENGINE_OBJS_EXP) $(MACT_OBJS_EXP) $(AUDIOLIB_OBJS_EXP) $(ENET_TARGET) $(DUKE3D_GAME_MISCDEPS) $(foreach i,$(GAMES),$(foreach j,$(ROLES),$(eval $(call BUILDRULE,$i,$j))))
$(LINK_STATUS)
$(RECIPE_IF) $(LINKER) -o $@ $^ $(GUI_LIBS) $(DUKE3D_GAME_LDFLAGS) $(LIBDIRS) $(LIBS) $(RECIPE_RESULT_LINK)
ifeq ($(PLATFORM),WII)
ifneq ($(ELF2DOL),)
$(ELF2DOL) $(DUKE3D_GAME)$(EXESUFFIX) $(DUKE3D_GAME)$(DOLSUFFIX)
endif
endif
ifneq ($(STRIP),)
$(STRIP) $@ $(DUKE3D_GAME_STRIPFLAGS)
endif
ifeq ($(PLATFORM),DARWIN)
cp -RPf "platform/Apple/bundles/$(DUKE3D_GAME_PROPER).app" "./"
mkdir -p "$(DUKE3D_GAME_PROPER).app/Contents/MacOS"
cp -f "$(DUKE3D_GAME)$(EXESUFFIX)" "$(DUKE3D_GAME_PROPER).app/Contents/MacOS/"
endif
$(DUKE3D_EDITOR)$(EXESUFFIX): $(DUKE3D_EDITOR_OBJS_EXP) $(COMMON_EDITOR_OBJS_EXP) $(ENGINE_EDITOR_OBJS_EXP) $(ENGINE_OBJS_EXP) $(AUDIOLIB_OBJS_EXP) $(DUKE3D_EDITOR_MISCDEPS)
$(LINK_STATUS)
$(RECIPE_IF) $(LINKER) -o $@ $^ $(GUI_LIBS) $(DUKE3D_EDITOR_LDFLAGS) $(LIBDIRS) $(LIBS) $(RECIPE_RESULT_LINK)
ifeq ($(PLATFORM),WII)
ifneq ($(ELF2DOL),)
$(ELF2DOL) $(DUKE3D_EDITOR)$(EXESUFFIX) $(DUKE3D_EDITOR)$(DOLSUFFIX)
endif
endif
ifneq ($(STRIP),)
$(STRIP) $@ $(DUKE3D_EDITOR_STRIPFLAGS)
endif
ifeq ($(PLATFORM),DARWIN)
cp -RPf "platform/Apple/bundles/$(DUKE3D_EDITOR_PROPER).app" "./"
mkdir -p "$(DUKE3D_EDITOR_PROPER).app/Contents/MacOS"
cp -f "$(DUKE3D_EDITOR)$(EXESUFFIX)" "$(DUKE3D_EDITOR_PROPER).app/Contents/MacOS/"
endif
$(SW_GAME)$(EXESUFFIX): $(SW_GAME_OBJS_EXP) $(MIDI_OBJS_EXP) $(ENGINE_OBJS_EXP) $(MACT_OBJS_EXP) $(AUDIOLIB_OBJS_EXP)
$(LINK_STATUS)
$(RECIPE_IF) $(LINKER) -o $@ $^ $(GUI_LIBS) $(LIBDIRS) $(LIBS) $(RECIPE_RESULT_LINK)
ifeq ($(PLATFORM),WII)
ifneq ($(ELF2DOL),)
$(ELF2DOL) $(SW_GAME)$(EXESUFFIX) $(SW_GAME)$(DOLSUFFIX)
endif
endif
ifneq ($(STRIP),)
$(STRIP) $@
endif
$(SW_EDITOR)$(EXESUFFIX): $(SW_EDITOR_OBJS_EXP) $(COMMON_EDITOR_OBJS_EXP) $(ENGINE_EDITOR_OBJS_EXP) $(ENGINE_OBJS_EXP)
$(LINK_STATUS)
$(RECIPE_IF) $(LINKER) -o $@ $^ $(GUI_LIBS) $(LIBDIRS) $(LIBS) $(RECIPE_RESULT_LINK)
ifeq ($(PLATFORM),WII)
ifneq ($(ELF2DOL),)
$(ELF2DOL) $(SW_EDITOR)$(EXESUFFIX) $(SW_EDITOR)$(DOLSUFFIX)
endif
endif
ifneq ($(STRIP),)
$(STRIP) $@
endif
include $(ENGINE_ROOT)/Dependencies.mak include $(ENGINE_ROOT)/Dependencies.mak
include $(DUKE3D_ROOT)/Dependencies.mak include $(DUKE3D_ROOT)/Dependencies.mak
include $(SW_ROOT)/Dependencies.mak include $(SW_ROOT)/Dependencies.mak
# RULES # RULES
$(EBACKTRACEDLL): platform/Windows/src/backtrace.c $(EBACKTRACEDLL): platform/Windows/src/backtrace.c