|
|
@@ -0,0 +1,533 @@
|
|
|
+#
|
|
|
+# Makefile rules for compiling Alias or SoftImage character models into egg,
|
|
|
+# and then into pfb's.
|
|
|
+#
|
|
|
+
|
|
|
+include $(DTOOL)/inc/Makefile.inst-egg.vars
|
|
|
+
|
|
|
+ifeq ($(EGG_PALETTIZE),)
|
|
|
+ EGG_PALETTIZE = egg-palettize
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(EGG_TEXTURES),)
|
|
|
+ EGG_TEXTURES = egg-textures
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(PFICONV),)
|
|
|
+ PFICONV = pficonv -m
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(PFI_DIR),)
|
|
|
+ PFI_DIR = $(CHAR_PFI_DIR)
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(QTESS),)
|
|
|
+ QTESS = qtess $(QTESS_OPTS)
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(TESS),)
|
|
|
+ TESS = tess $(TESS_OPTS)
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(EGG_BLEND),)
|
|
|
+ EGG_BLEND = egg-blend $(EGG_BLEND_OPTS)
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(EGG_REPLACE),)
|
|
|
+ EGG_REPLACE = egg-replace $(EGG_REPLACE_OPTS)
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(EGG_REPLACE_OPTS),)
|
|
|
+ EGG_REPLACE_OPTS = -n
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(INSTALL_DIR),)
|
|
|
+ INSTALL_DIR = $(INSTALL_ROOT)/models/char/$(DIR_NAME)
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(INSTALL_MAP_DIR),)
|
|
|
+ INSTALL_MAP_DIR = $(INSTALL_DIR)/$(INSTALL_MAPS)
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(DIR_NAME),)
|
|
|
+ DIR_NAME = $(CHAR_NAME)
|
|
|
+endif
|
|
|
+
|
|
|
+# A synonym to help palettize find a reasonable default palette name.
|
|
|
+SCENE = $(DIR_NAME)
|
|
|
+
|
|
|
+ifeq ($(EGG_NAME),)
|
|
|
+ EGG_NAME = $(CHAR_NAME)
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(CHAR_TOP_NODE),)
|
|
|
+ CHAR_TOP_NODE = $(CHAR_NAME)
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(PALETTE_NAME),)
|
|
|
+ # If the palette name is nonempty, make sure it doesn't contain slashes.
|
|
|
+ PALETTE_NAME := $(subst /,-,$(PALETTE_NAME))
|
|
|
+endif
|
|
|
+
|
|
|
+PAL_EGG_DIR = $(CHAR_BUILD_DIR)/pal
|
|
|
+
|
|
|
+
|
|
|
+# WIRE_DIR and WIRE_PATTERN tell the makefile where to find the latest model
|
|
|
+# file.
|
|
|
+ifneq ($(WIRE_DIR),)
|
|
|
+ ifneq ($(WIRE_PATTERN),)
|
|
|
+ WIRE_FILE := $(strip $(shell cd $(WIRE_DIR); findlatest $(WIRE_DIR) $(WIRE_PATTERN)))
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+# TX_WIRE_DIR and TX_WIRE_PATTERN tell where to find the latest model for the
|
|
|
+# texture substitution. If this is non-null, it will use this file to
|
|
|
+# substitute pieces in when it builds the NURBS file. This is a hack to
|
|
|
+# work around the Alias/SoftImage texture offset problem.
|
|
|
+ifneq ($(TX_WIRE_DIR),)
|
|
|
+ ifneq ($(TX_WIRE_PATTERN),)
|
|
|
+ TX_WIRE_FILE := $(strip $(shell cd $(TX_WIRE_DIR); findlatest $(TX_WIRE_DIR) $(TX_WIRE_PATTERN)))
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(CHAN_DIR),)
|
|
|
+ FIND_CHAN_FILES = $(foreach pat,$(CHAN_PATTERN),$(foreach dir,$(CHAN_DIR),$(strip $(shell cd $(dir); findlatest $(dir) $(pat)))))
|
|
|
+endif
|
|
|
+
|
|
|
+# If the user didn't give us an explicit directory to place the unoptimized
|
|
|
+# models--normally $(UNOPT)--infer it.
|
|
|
+ifeq ($(UNOPT),)
|
|
|
+ ifneq ($(OPTCHAR_OPTS),)
|
|
|
+ UNOPT = unopt/
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+# And, we might even want to make a second pass at optcharring.
|
|
|
+ifeq ($(UNOPT2),)
|
|
|
+ ifneq ($(OPTCHAR2_OPTS),)
|
|
|
+ UNOPT2 = unopt2/
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+# Set UNOPT2_NAME to be the printable name of UNOPT2.
|
|
|
+ifeq ($(UNOPT2),)
|
|
|
+ UNOPT2_NAME = .
|
|
|
+else
|
|
|
+ UNOPT2_NAME = $(UNOPT2)
|
|
|
+endif
|
|
|
+
|
|
|
+# We need this variable in a substitution below.
|
|
|
+comma := ,
|
|
|
+
|
|
|
+ifeq ($(POLY_MODEL_FILE),)
|
|
|
+ POLY_MODEL_FILE = $(EGG_NAME)-mod.egg
|
|
|
+endif
|
|
|
+
|
|
|
+ifeq ($(NURBS_MODEL_FILE),)
|
|
|
+ NURBS_MODEL_FILE = $(EGG_NAME)-nurbs.egg
|
|
|
+endif
|
|
|
+
|
|
|
+# We define two different variables, NURBS_MODEL_READ and
|
|
|
+# NURBS_MODEL_WRITE, to allow inserting of a user step in the build
|
|
|
+# process between writing a final NURBS model and processing it.
|
|
|
+# Normally, these variables are the same; if the user makefile defines
|
|
|
+# them different, it can establish the processing to generate one from
|
|
|
+# the other.
|
|
|
+ifeq ($(NURBS_MODEL_READ),)
|
|
|
+ NURBS_MODEL_READ = $(NURBS_MODEL_FILE)
|
|
|
+endif
|
|
|
+ifeq ($(NURBS_MODEL_WRITE),)
|
|
|
+ NURBS_MODEL_WRITE = $(NURBS_MODEL_FILE)
|
|
|
+endif
|
|
|
+
|
|
|
+# Similarly for POLY_MODEL_READ and POLY_MODEL_WRITE.
|
|
|
+ifeq ($(POLY_MODEL_READ),)
|
|
|
+ POLY_MODEL_READ = $(POLY_MODEL_FILE)
|
|
|
+endif
|
|
|
+ifeq ($(POLY_MODEL_WRITE),)
|
|
|
+ POLY_MODEL_WRITE = $(POLY_MODEL_FILE)
|
|
|
+endif
|
|
|
+
|
|
|
+TX_EGG_FILE = $(EGG_NAME)-tx.egg
|
|
|
+PRETX_EGG_FILE = $(EGG_NAME)-pretx.egg
|
|
|
+
|
|
|
+# ANIMS is the list of anim files. These are passed through optchar.
|
|
|
+CHAN_FILES := $(patsubst %,$(CHAN_FILE_PREFIX)%$(CHAN_FILE_SUFFIX).egg,$(ANIMS))
|
|
|
+
|
|
|
+# ANIMS2 is the list of anim files that are passed through the second round
|
|
|
+# of optchar, if there is one. If ANIMS2 is left unspecified, the user
|
|
|
+# may specify simply BLEND_ANIMS, which is concatenated on the end.
|
|
|
+ifneq ($(ANIMS2),)
|
|
|
+ CHAN2_FILES := $(patsubst %,$(CHAN_FILE_PREFIX)%$(CHAN_FILE_SUFFIX).egg,$(ANIMS2))
|
|
|
+else
|
|
|
+ CHAN2_FILES := $(CHAN_FILES) $(patsubst %,$(CHAN_FILE_PREFIX)%$(CHAN_FILE_SUFFIX).egg,$(BLEND_ANIMS))
|
|
|
+endif
|
|
|
+
|
|
|
+MODEL_FILES_READ = $(MODEL_FILES)
|
|
|
+MODEL_FILES_WRITE = $(MODEL_FILES)
|
|
|
+
|
|
|
+ifneq ($(POLY_OPTS),)
|
|
|
+ MODEL_FILES_READ += $(POLY_MODEL_READ)
|
|
|
+ MODEL_FILES_WRITE += $(POLY_MODEL_WRITE)
|
|
|
+endif
|
|
|
+
|
|
|
+# Maybe we have a list of additional models that are built by separate
|
|
|
+# makefiles, but are intended to be optcharred in with the primary
|
|
|
+# model.
|
|
|
+ifneq ($(AUX_MODELS),)
|
|
|
+ UNOPT_AUX_MODELS := $(patsubst %,$(UNOPT)%.egg,$(AUX_MODELS))
|
|
|
+ OPT_AUX_MODELS := $(patsubst %,%.egg,$(AUX_MODELS))
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(LODS),)
|
|
|
+ # If LODS is set, assume it's a list of models that will be compiled
|
|
|
+ # into a single multiple-lod model.
|
|
|
+
|
|
|
+ LOD_EGG_FILES := $(patsubst %,$(UNOPT)$(EGG_NAME)-%.egg,$(LODS))
|
|
|
+ MODEL_FILES_READ := $(patsubst $(UNOPT)%,%,$(POLY_MODEL_READ))
|
|
|
+ MODEL_FILES_WRITE := $(patsubst $(UNOPT)%,%,$(POLY_MODEL_WRITE))
|
|
|
+
|
|
|
+ LOD_DF :=
|
|
|
+ ifneq ($(LOD_DIST),)
|
|
|
+ LOD_DF += -d $(LOD_DIST)
|
|
|
+ endif
|
|
|
+ ifneq ($(LOD_FADE),)
|
|
|
+ LOD_DF += -f $(LOD_FADE)
|
|
|
+ endif
|
|
|
+
|
|
|
+ # If we're building a multiple-lod model, we might want to consider
|
|
|
+ # different TESS options.
|
|
|
+ ifneq ($(TESS_LEVELS),)
|
|
|
+ TESS_MODELS := $(patsubst %,$(UNOPT)$(EGG_NAME)-%.egg,$(TESS_LEVELS))
|
|
|
+ endif
|
|
|
+ ifneq ($(QTESS_LEVELS),)
|
|
|
+ QTESS_MODELS := $(patsubst %,$(UNOPT)$(EGG_NAME)-%.egg,$(QTESS_LEVELS))
|
|
|
+ endif
|
|
|
+
|
|
|
+else
|
|
|
+ # Ok, we're not building a multiple-lod model. We're either building
|
|
|
+ # several distinct models, or a single NURBS model.
|
|
|
+
|
|
|
+ MODEL_FILES_READ += $(OPT_AUX_MODELS)
|
|
|
+ MODEL_FILES_WRITE += $(OPT_AUX_MODELS)
|
|
|
+
|
|
|
+ ifneq ($(TESS_LEVELS),)
|
|
|
+ # One or more TESS'ed model.
|
|
|
+ TESS_MODELS := $(patsubst %,$(UNOPT)$(EGG_NAME)-%.egg,$(TESS_LEVELS))
|
|
|
+ MODEL_FILES_READ += $(patsubst $(UNOPT)%,%,$(TESS_MODELS))
|
|
|
+ MODEL_FILES_WRITE += $(patsubst $(UNOPT)%,%,$(TESS_MODELS))
|
|
|
+ else
|
|
|
+ ifneq ($(QTESS_LEVELS),)
|
|
|
+ # One or more QTESS'ed model.
|
|
|
+ QTESS_MODELS := $(patsubst %,$(UNOPT)$(EGG_NAME)-%.egg,$(QTESS_LEVELS))
|
|
|
+ MODEL_FILES_READ += $(patsubst $(UNOPT)%,%,$(QTESS_MODELS))
|
|
|
+ MODEL_FILES_WRITE += $(patsubst $(UNOPT)%,%,$(QTESS_MODELS))
|
|
|
+ else
|
|
|
+ ifneq ($(NURBS_OPTS),)
|
|
|
+ # No particular tesselation parameters, but the user still asked for
|
|
|
+ # a NURBS file. He must really want to install it.
|
|
|
+ MODEL_FILES_READ += $(NURBS_MODEL_READ)
|
|
|
+ MODEL_FILES_WRITE += $(NURBS_MODEL_WRITE)
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+# Now that we've built up the list of MODEL_FILES, give the user a chance
|
|
|
+# to override it. These are the egg files that get passed through optchar.
|
|
|
+ifneq ($(BUILD_MODELS),)
|
|
|
+ MODEL_FILES_READ := $(patsubst %,$(EGG_NAME)-%.egg,$(BUILD_MODELS))
|
|
|
+ MODEL_FILES_WRITE := $(patsubst %,$(EGG_NAME)-%.egg,$(BUILD_MODELS))
|
|
|
+endif
|
|
|
+
|
|
|
+# And the user might always have some extra ones.
|
|
|
+ifneq ($(EXTRA_MODELS),)
|
|
|
+ MODEL_FILES_READ += $(patsubst %,$(EGG_NAME)-%.egg,$(EXTRA_MODELS))
|
|
|
+ MODEL_FILES_WRITE += $(patsubst %,$(EGG_NAME)-%.egg,$(EXTRA_MODELS))
|
|
|
+endif
|
|
|
+
|
|
|
+# If the user specified BUILD2_MODELS, these are files that get passed
|
|
|
+# through optchar the second time (if there is a second optchar pass).
|
|
|
+# Otherwise, we'll infer it as well.
|
|
|
+ifneq ($(BUILD2_MODELS),)
|
|
|
+ MODEL2_FILES := $(patsubst %,$(EGG_NAME)-%.egg,$(BUILD2_MODELS))
|
|
|
+else
|
|
|
+ MODEL2_FILES := $(MODEL_FILES_READ)
|
|
|
+endif
|
|
|
+
|
|
|
+# Similarly for extras.
|
|
|
+ifneq ($(EXTRA2_MODELS),)
|
|
|
+ MODEL2_FILES += $(patsubst %,$(EGG_NAME)-%.egg,$(EXTRA2_MODELS))
|
|
|
+endif
|
|
|
+
|
|
|
+QTESS_RULE = $(UNOPT)$(EGG_NAME)-$(MODEL).egg : $(UNOPT)$(NURBS_MODEL_READ)
|
|
|
+
|
|
|
+# This is largely unnecessary, because of $(TESS_MODELS).
|
|
|
+TESS_RULE = $(UNOPT)$(EGG_NAME)-$(MODEL).egg : $(UNOPT)$(NURBS_MODEL_READ)
|
|
|
+
|
|
|
+
|
|
|
+BLEND_RULE = $(UNOPT2)$(CHAN_FILE_PREFIX)$(word 1,$(ANIM))-$(word 2,$(ANIM))$(word 3,$(ANIM))$(CHAN_FILE_SUFFIX).egg : $(patsubst %,$(UNOPT2)$(CHAN_FILE_PREFIX)%$(CHAN_FILE_SUFFIX).egg,$(word 1,$(ANIM)) $(word 2,$(ANIM)))
|
|
|
+
|
|
|
+
|
|
|
+ifneq ($(COLLAPSED_ANIM),)
|
|
|
+ COLLAPSED_CHAN_FILE = $(EGG_NAME)-$(COLLAPSED_ANIM).egg
|
|
|
+ ifneq ($(OPTCHAR_OPTS),)
|
|
|
+ OPTCHAR_OPTS += -c $(COLLAPSED_CHAN_FILE)
|
|
|
+ endif
|
|
|
+ OPT_MODEL_FILES = $(patsubst %,$(UNOPT2)%,$(MODEL_FILES_READ)
|
|
|
+ OPT_CHAN_FILES = $(COLLAPSED_CHAN_FILE))
|
|
|
+ OPT2_MODEL_FILES = $(MODEL2_FILES)
|
|
|
+ OPT2_CHAN_FILES = $(COLLAPSED_CHAN_FILE)
|
|
|
+else
|
|
|
+ OPT_MODEL_FILES = $(patsubst %,$(UNOPT2)%,$(MODEL_FILES_READ))
|
|
|
+ OPT_CHAN_FILES = $(patsubst %,$(UNOPT2)%,$(CHAN_FILES))
|
|
|
+ OPT2_MODEL_FILES = $(MODEL2_FILES)
|
|
|
+ OPT2_CHAN_FILES = $(CHAN2_FILES)
|
|
|
+endif
|
|
|
+OPT_EGG_FILES = $(OPT_MODEL_FILES) $(OPT_CHAN_FILES)
|
|
|
+OPT2_EGG_FILES = $(OPT2_MODEL_FILES) $(OPT2_CHAN_FILES)
|
|
|
+
|
|
|
+UNOPT2_EGG_FILES = $(patsubst %,$(UNOPT2)%,$(OPT2_EGG_FILES))
|
|
|
+
|
|
|
+ifneq ($(INSTALL_MODELS),)
|
|
|
+ # If the user gave us a custom list of eggs to install, respect it. These
|
|
|
+ # are the egg files--models, in this case--that get converted to pfb's
|
|
|
+ # or whatever.
|
|
|
+ INSTALL_MODEL_FILES := $(patsubst %,$(EGG_NAME)-%.egg,$(INSTALL_MODELS))
|
|
|
+else
|
|
|
+ # Otherwise, infer it.
|
|
|
+ INSTALL_MODEL_FILES := $(OPT2_MODEL_FILES)
|
|
|
+endif
|
|
|
+ifneq ($(INSTALL_ANIMS),)
|
|
|
+ # Same story with the anims.
|
|
|
+ INSTALL_CHAN_FILES := $(patsubst %,$(CHAN_FILE_PREFIX)%.egg,$(INSTALL_ANIMS))
|
|
|
+else
|
|
|
+ # Otherwise, infer it.
|
|
|
+ INSTALL_CHAN_FILES := $(OPT2_CHAN_FILES)
|
|
|
+endif
|
|
|
+INSTALL_EGG_FILES = $(INSTALL_MODEL_FILES) $(INSTALL_CHAN_FILES)
|
|
|
+
|
|
|
+PAL_MODEL_FILES := $(patsubst %,$(PAL_EGG_DIR)/%,$(INSTALL_MODEL_FILES))
|
|
|
+
|
|
|
+INSTALL_INST_MODEL_FILES := $(patsubst %.egg,$(INSTALL_DIR)/%.$(INST),$(INSTALL_MODEL_FILES))
|
|
|
+INSTALL_INST_CHAN_FILES := $(patsubst %.egg,$(INSTALL_DIR)/%.$(INST),$(INSTALL_CHAN_FILES))
|
|
|
+INSTALL_INST_FILES = $(INSTALL_INST_MODEL_FILES) $(INSTALL_INST_CHAN_FILES)
|
|
|
+
|
|
|
+ifneq ($(INSTALL_MAPS),)
|
|
|
+ EXTRA_INSTALL_TARGET := install-maps
|
|
|
+ EXTRA_UNINSTALL_TARGET := uninstall-maps
|
|
|
+endif
|
|
|
+
|
|
|
+UNOPT_MODEL_FILES_READ := $(patsubst %,$(UNOPT)%,$(MODEL_FILES_READ))
|
|
|
+UNOPT_MODEL_FILES_WRITE := $(patsubst %,$(UNOPT)%,$(MODEL_FILES_WRITE))
|
|
|
+UNOPT_CHAN_FILES := $(patsubst %,$(UNOPT)%,$(CHAN_FILES))
|
|
|
+UNOPT_EGG_FILES_READ := $(UNOPT_MODEL_FILES_READ) $(UNOPT_CHAN_FILES)
|
|
|
+UNOPT_EGG_FILES_WRITE := $(UNOPT_MODEL_FILES_WRITE) $(UNOPT_CHAN_FILES)
|
|
|
+
|
|
|
+.PHONY: egg pfb all_dirs check-palette
|
|
|
+.PHONY: install-maps uninstall-maps
|
|
|
+.PHONY: realinstall uninstall clean cleanall
|
|
|
+.PHONY: $(addprefix uninstall-,$(INSTALL_INST_FILES))
|
|
|
+
|
|
|
+egg: $(UNOPT) all_dirs $(INSTALL_EGG_FILES)
|
|
|
+pfb: $(UNOPT) all_dirs check-palette $(INSTALL_INST_FILES) $(EXTRA_INSTALL_TARGET)
|
|
|
+all_dirs: maps $(INSTALL_DIR) $(UNOPT) $(UNOPT2)
|
|
|
+
|
|
|
+ifneq ($(PALETTE_NAME),)
|
|
|
+all_dirs: $(PAL_EGG_DIR)
|
|
|
+endif
|
|
|
+
|
|
|
+realinstall: pfb
|
|
|
+uninstall: $(addprefix uninstall-,$(INSTALL_INST_FILES)) $(EXTRA_UNINSTALL_TARGET)
|
|
|
+$(addprefix uninstall-,$(INSTALL_INST_FILES)) : uninstall-% :
|
|
|
+ rm -f $(patsubst uninstall-%,%,$@)
|
|
|
+
|
|
|
+clean:
|
|
|
+ rm -f $(sort $(OPT_EGG_FILES) $(LOD_EGG_FILES) $(INSTALL_EGG_FILES))
|
|
|
+ rm -f $(sort $(UNOPT_EGG_FILES_READ) $(UNOPT_EGG_FILES_WRITE) $(UNOPT)$(NURBS_MODEL_READ) $(UNOPT)$(NURBS_MODEL_WRITE))
|
|
|
+ rm -f $(EXTRA_DIRT) maps/*
|
|
|
+ifneq ($(TX_WIRE_FILE),)
|
|
|
+ rm -f $(UNOPT)$(PRETX_EGG_FILE) $(UNOPT)$(TX_EGG_FILE)
|
|
|
+endif
|
|
|
+ifneq ($(OPTCHAR2_OPTS),)
|
|
|
+ rm -f $(OPT2_EGG_FILES)
|
|
|
+ rm -f $(UNOPT2_EGG_FILES)
|
|
|
+endif
|
|
|
+
|
|
|
+cleanall: clean
|
|
|
+
|
|
|
+$(INSTALL_DIR):
|
|
|
+ mkdir -p $(INSTALL_DIR)
|
|
|
+
|
|
|
+ifneq ($(LODS),)
|
|
|
+# Make the unoptimized multiple-lod file
|
|
|
+$(UNOPT)$(POLY_MODEL_WRITE) : $(LOD_EGG_FILES)
|
|
|
+ egg-lod $(LOD_OPTS) $(LOD_DF) -o $@ $(patsubst %,%$(comma)$(CHAR_TOP_NODE),$< $^)
|
|
|
+else
|
|
|
+ ifneq ($(POLY_OPTS),)
|
|
|
+ # Make the unoptimized model file
|
|
|
+
|
|
|
+ ifeq ($(TX_WIRE_FILE),)
|
|
|
+ # Make the poly file the normal way, directly.
|
|
|
+$(UNOPT)$(POLY_MODEL_WRITE) : $(WIRE_FILE)
|
|
|
+ $(MAKE_POLY_MODEL)
|
|
|
+
|
|
|
+ else
|
|
|
+ # Make the poly file via the TX_WIRE_FILE.
|
|
|
+$(UNOPT)$(TX_EGG_FILE) : $(TX_WIRE_FILE)
|
|
|
+ $(MAKE_TX_MODEL)
|
|
|
+$(UNOPT)$(PRETX_EGG_FILE) : $(WIRE_FILE)
|
|
|
+ $(MAKE_POLY_MODEL)
|
|
|
+$(UNOPT)$(POLY_MODEL_WRITE) : $(UNOPT)$(PRETX_EGG_FILE) $(UNOPT)$(TX_EGG_FILE)
|
|
|
+ $(EGG_REPLACE) -o $@ $^
|
|
|
+ endif
|
|
|
+
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(NURBS_OPTS),)
|
|
|
+# Make the nurbs model file
|
|
|
+
|
|
|
+ ifeq ($(TX_WIRE_FILE),)
|
|
|
+ # Make the nurbs file the normal way, directly.
|
|
|
+$(UNOPT)$(NURBS_MODEL_WRITE) : $(WIRE_FILE)
|
|
|
+ $(MAKE_NURBS_MODEL)
|
|
|
+
|
|
|
+ else
|
|
|
+ # Make the nurbs file via the TX_WIRE_FILE.
|
|
|
+$(UNOPT)$(TX_EGG_FILE) : $(TX_WIRE_FILE)
|
|
|
+ $(MAKE_TX_MODEL)
|
|
|
+$(UNOPT)$(PRETX_EGG_FILE) : $(WIRE_FILE)
|
|
|
+ $(MAKE_NURBS_MODEL)
|
|
|
+$(UNOPT)$(NURBS_MODEL_WRITE) : $(UNOPT)$(PRETX_EGG_FILE) $(UNOPT)$(TX_EGG_FILE)
|
|
|
+ $(EGG_REPLACE) -o $@ $^
|
|
|
+ endif
|
|
|
+
|
|
|
+endif
|
|
|
+
|
|
|
+# Make the tesselated files.
|
|
|
+ifneq ($(TESS_MODELS),)
|
|
|
+$(TESS_MODELS) : $(UNOPT)%.egg : %.tess $(UNOPT)$(NURBS_MODEL_READ)
|
|
|
+ $(TESS) $(UNOPT)$(NURBS_MODEL_READ) $< >$@
|
|
|
+endif
|
|
|
+
|
|
|
+# Make the tesselated files.
|
|
|
+ifneq ($(QTESS_MODELS),)
|
|
|
+$(QTESS_MODELS) : $(UNOPT)%.egg : %.qtess $(UNOPT)$(NURBS_MODEL_READ)
|
|
|
+ $(QTESS) -iq $< -o $@ $(UNOPT)$(NURBS_MODEL_READ)
|
|
|
+endif
|
|
|
+
|
|
|
+# Make the auxiliary models, model files whose build commands are
|
|
|
+# handled in a separate makefile.
|
|
|
+ifneq ($(UNOPT_AUX_MODELS),)
|
|
|
+$(UNOPT_AUX_MODELS) : $(UNOPT)%.egg : Makefile.%
|
|
|
+ $(MAKE) -f $< $@
|
|
|
+endif
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ifneq ($(OPTCHAR_OPTS),)
|
|
|
+# Make the optimized files.
|
|
|
+$(OPT_EGG_FILES) : $(UNOPT_EGG_FILES_READ)
|
|
|
+ egg-optchar -d $(UNOPT2_NAME) $(OPTCHAR_OPTS) $^
|
|
|
+else
|
|
|
+ ifneq ($(COLLAPSED_CHAN_FILE),)
|
|
|
+ # Ok, we're not optcharing, but we do need to collapse some chan files.
|
|
|
+$(COLLAPSED_CHAN_FILE) : $(CHAN_FILES)
|
|
|
+ egg-optchar -c $(COLLAPSED_CHAN_FILE) $(CHAN_FILES)
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(OPTCHAR2_OPTS),)
|
|
|
+# Make the optimized files again.
|
|
|
+$(OPT2_EGG_FILES) : $(UNOPT2_EGG_FILES)
|
|
|
+ egg-optchar -d . $(OPTCHAR2_OPTS) $^
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(PALETTE_NAME),)
|
|
|
+ # Palettize the files as we install them.
|
|
|
+PT_FILES := $(patsubst %.egg,%.pt,$(INSTALL_MODEL_FILES))
|
|
|
+$(PT_FILES) : %.pt : %.egg
|
|
|
+ touch $@
|
|
|
+
|
|
|
+# Attempt to regularize the cwd.
|
|
|
+DIRNAME=$(notdir $(shell pwd))
|
|
|
+PWD=$(CHAR_BUILD_DIR)/$(DIRNAME)
|
|
|
+
|
|
|
+$(PAL_MODEL_FILES) : $(PT_FILES)
|
|
|
+ $(EGG_PALETTIZE) -t -de $(PAL_EGG_DIR) -dm $(INSTALL_ROOT)/maps $(PALETTIZE_OPTS) $(TEXATTRIB_DIR)/$(PALETTE_NAME).txa $(patsubst %.pt,$(PWD)/%.egg,$^)
|
|
|
+
|
|
|
+$(INSTALL_INST_MODEL_FILES) : $(INSTALL_DIR)/%.$(INST) : $(PAL_EGG_DIR)/%.egg
|
|
|
+ $(INSTALL_EGG_ACTION)
|
|
|
+
|
|
|
+else
|
|
|
+ # Don't palettize.
|
|
|
+$(INSTALL_INST_MODEL_FILES) : $(INSTALL_DIR)/%.$(INST) : %.egg
|
|
|
+ $(INSTALL_EGG_ACTION)
|
|
|
+endif
|
|
|
+
|
|
|
+$(INSTALL_INST_CHAN_FILES) : $(INSTALL_DIR)/%.$(INST) : %.egg
|
|
|
+ $(INSTALL_EGG_ACTION)
|
|
|
+
|
|
|
+$(PAL_EGG_DIR):
|
|
|
+ mkdir $(PAL_EGG_DIR)
|
|
|
+
|
|
|
+maps:
|
|
|
+ mkdir maps
|
|
|
+
|
|
|
+ifneq ($(UNOPT),)
|
|
|
+$(UNOPT):
|
|
|
+ mkdir $(UNOPT)
|
|
|
+ ln -s ../maps $(UNOPT)maps
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(UNOPT2),)
|
|
|
+$(UNOPT2):
|
|
|
+ mkdir $(UNOPT2)
|
|
|
+ ln -s ../maps $(UNOPT2)maps
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(PALETTE_NAME),)
|
|
|
+check-palette: $(TEXATTRIB_DIR)/$(PALETTE_NAME).pi
|
|
|
+$(TEXATTRIB_DIR)/$(PALETTE_NAME).pi : $(TEXATTRIB_DIR)/$(PALETTE_NAME).txa
|
|
|
+ $(EGG_PALETTIZE) -t $(PALETTIZE_OPTS) $<
|
|
|
+$(TEXATTRIB_DIR)/$(PALETTE_NAME).txa :
|
|
|
+ @echo $@
|
|
|
+else
|
|
|
+check-palette:
|
|
|
+endif
|
|
|
+
|
|
|
+show-chan-files:
|
|
|
+ @echo CHAN_DIR is $(CHAN_DIR)
|
|
|
+ @echo CHAN_PATTERN is $(CHAN_PATTERN)
|
|
|
+ @echo CHAN_FILES is $(CHAN_FILES)
|
|
|
+ @echo FIND_CHAN_FILES is $(FIND_CHAN_FILES)
|
|
|
+
|
|
|
+show-wire-files:
|
|
|
+ @echo WIRE_DIR is $(WIRE_DIR)
|
|
|
+ @echo WIRE_PATTERN is $(WIRE_PATTERN)
|
|
|
+ @echo WIRE_FILE is $(WIRE_FILE)
|
|
|
+ @echo TX_WIRE_DIR is $(TX_WIRE_DIR)
|
|
|
+ @echo TX_WIRE_PATTERN is $(TX_WIRE_PATTERN)
|
|
|
+ @echo TX_WIRE_FILE is $(TX_WIRE_FILE)
|
|
|
+
|
|
|
+show-lods:
|
|
|
+ @echo LODS is $(LODS)
|
|
|
+ @echo LOD_EGG_FILES is $(LOD_EGG_FILES)
|
|
|
+
|
|
|
+show-models:
|
|
|
+ @echo NURBS_MODEL_READ is $(NURBS_MODEL_READ)
|
|
|
+ @echo NURBS_MODEL_WRITE is $(NURBS_MODEL_WRITE)
|
|
|
+ @echo POLY_MODEL_READ is $(POLY_MODEL_READ)
|
|
|
+ @echo POLY_MODEL_WRITE is $(POLY_MODEL_WRITE)
|
|
|
+ @echo MODEL_FILES_READ is $(MODEL_FILES_READ)
|
|
|
+ @echo MODEL_FILES_WRITE is $(MODEL_FILES_WRITE)
|
|
|
+ @echo OPT_EGG_FILES is $(OPT_EGG_FILES)
|
|
|
+ @echo UNOPT_EGG_FILES_READ is $(UNOPT_EGG_FILES_READ)
|
|
|
+ @echo UNOPT_EGG_FILES_WRITE is $(UNOPT_EGG_FILES_WRITE)
|
|
|
+ @echo INSTALL_MODEL_FILES is $(INSTALL_MODEL_FILES)
|
|
|
+ @echo INSTALL_INST_FILES is $(INSTALL_INST_FILES)
|
|
|
+ @echo PAL_MODEL_FILES is $(PAL_MODEL_FILES)
|
|
|
+ @echo PT_FILES is $(PT_FILES)
|
|
|
+ @echo INSTALL_CHAN_FILES is $(INSTALL_CHAN_FILES)
|
|
|
+ @echo .txa file is $(TEXATTRIB_DIR)/$(PALETTE_NAME).txa
|