rubidium@5643: # Auto-generated file -- DO NOT EDIT rubidium@5643: rubidium@5643: CC_HOST = !!CC_HOST!! rubidium@5643: CXX_HOST = !!CXX_HOST!! rubidium@5643: CC_BUILD = !!CC_BUILD!! celestar@5650: CXX_BUILD = !!CXX_BUILD!! rubidium@5643: WINDRES = !!WINDRES!! rubidium@5643: STRIP = !!STRIP!! rubidium@5643: CC_CFLAGS = !!CC_CFLAGS!! rubidium@5643: CFLAGS = !!CFLAGS!! rubidium@5643: CFLAGS_BUILD = !!CFLAGS_BUILD!! rubidium@5643: LIBS = !!LIBS!! rubidium@5643: LDFLAGS = !!LDFLAGS!! rubidium@5643: BIN_DIR = !!BIN_DIR!! rubidium@5643: LANG_DIR = !!LANG_DIR!! rubidium@5643: SRC_OBJS_DIR = !!SRC_OBJS_DIR!! rubidium@5643: LANG_OBJS_DIR= !!LANG_OBJS_DIR!! rubidium@5643: SRC_DIR = !!SRC_DIR!! rubidium@5643: MEDIA_DIR = !!MEDIA_DIR!! rubidium@5643: TTD = !!TTD!! rubidium@5643: STRGEN = !!STRGEN!! rubidium@5643: ENDIAN_CHECK = !!ENDIAN_CHECK!! rubidium@5643: ENDIAN_FORCE = !!ENDIAN_FORCE!! rubidium@5643: OS = !!OS!! rubidium@5643: STAGE = !!STAGE!! rubidium@5643: MAKEDEPEND = !!MAKEDEPEND!! rubidium@5643: CFLAGS_MAKEDEP= !!CFLAGS_MAKEDEP!! rubidium@5643: SORT = !!SORT!! celestar@5648: REVISION = !!REVISION!! rubidium@5643: CONFIG_CACHE_COMPILER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_COMPILER!! rubidium@5643: CONFIG_CACHE_LINKER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_LINKER!! rubidium@5643: CONFIG_CACHE_ENDIAN = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_ENDIAN!! rubidium@5643: CONFIG_CACHE_SOURCE = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_SOURCE!! rubidium@5643: CONFIG_CACHE_VERSION = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_VERSION!! rubidium@5643: rubidium@5643: OBJS_C := !!OBJS_C!! rubidium@5643: OBJS_CPP := !!OBJS_CPP!! rubidium@5643: OBJS_M := !!OBJS_M!! rubidium@5643: OBJS_RC := !!OBJS_RC!! rubidium@5643: OBJS := $(OBJS_C) $(OBJS_CPP) $(OBJS_M) $(OBJS_RC) rubidium@5643: SRCS := !!SRCS!! rubidium@5643: rubidium@5643: # All C-files depend on those 3 files rubidium@5643: FILE_DEP := $(CONFIG_CACHE_COMPILER) $(LANG_OBJS_DIR)/table/strings.h endian_target.h rubidium@5643: # Create all dirs and subdirs rubidium@5643: RES := $(shell mkdir -p $(BIN_DIR) $(sort $(dir $(OBJS)))) rubidium@5643: rubidium@5643: # Make sure endian_target.h is reasable as if it was in the src/ dir rubidium@5643: CFLAGS += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) rubidium@5643: rubidium@5643: ENDIAN_TARGETS := endian_target.h $(ENDIAN_CHECK) rubidium@5643: rubidium@5643: # Check if we want to show what we are doing rubidium@5643: ifdef VERBOSE rubidium@5643: Q = rubidium@5643: E = @true rubidium@5643: else rubidium@5643: Q = @ rubidium@5643: E = @echo rubidium@5643: endif rubidium@5643: rubidium@5643: # Our default target rubidium@5643: all: $(TTD) rubidium@5643: rubidium@5643: # This are 2 rules that are pointing back to STRGEN stuff. rubidium@5643: # There is not really a need to have them here, but in case rubidium@5643: # some weirdo wants to run 'make' in the 'src' dir and expects rubidium@5643: # the languages to be recompiled, this catches that case and rubidium@5643: # takes care of it nicely. rubidium@5643: $(LANG_OBJS_DIR)/$(STRGEN): rubidium@5643: $(MAKE) -C $(LANG_OBJS_DIR) $(STRGEN) rubidium@5643: rubidium@5643: $(LANG_OBJS_DIR)/table/strings.h: $(LANG_DIR)/english.txt $(LANG_OBJS_DIR)/$(STRGEN) rubidium@5643: $(MAKE) -C $(LANG_OBJS_DIR) table/strings.h rubidium@5643: rubidium@5643: # Make the revision number rubidium@5643: ifdef REVISION rubidium@5643: REV := $(REVISION) rubidium@5643: else rubidium@5643: # Are we a SVN dir? rubidium@5643: ifeq ($(shell if test -d $(SRC_DIR)/.svn; then echo 1; fi), 1) rubidium@5643: # Find if the local source if modified rubidium@5643: REV_MODIFIED := $(shell svnversion $(SRC_DIR) | sed -n 's/.*\(M\).*/\1/p' ) rubidium@5643: # Find the revision like: rXXXX-branch rubidium@5643: REV := $(shell LC_ALL=C svn info $(SRC_DIR) | awk '/^URL:.*branch/ { split($$2, a, "/"); BRANCH="-"a[5] } /^Last Changed Rev:/ { REV="r"$$4"$(REV_MODIFIED)" } END { print REV BRANCH }') rubidium@5643: endif rubidium@5643: endif rubidium@5643: # Make sure we have something in REV rubidium@5643: ifeq ($(REV),) rubidium@5643: REV := norev000 rubidium@5643: endif rubidium@5643: rubidium@5643: # This helps to recompile if flags change rubidium@5643: RES := $(shell if [ "`cat $(CONFIG_CACHE_COMPILER) 2>/dev/null`" != "$(CC_CFLAGS) $(CFLAGS)" ]; then echo "$(CC_CFLAGS) $(CFLAGS)" > $(CONFIG_CACHE_COMPILER); fi ) rubidium@5643: RES := $(shell if [ "`cat $(CONFIG_CACHE_LINKER) 2>/dev/null`" != "$(LDFLAGS) $(LIBS)" ]; then echo "$(LDFLAGS) $(LIBS)" > $(CONFIG_CACHE_LINKER); fi ) rubidium@5643: RES := $(shell if [ "`cat $(CONFIG_CACHE_ENDIAN) 2>/dev/null`" != "$(ENDIAN_FORCE)" ]; then echo "$(ENDIAN_FORCE)" > $(CONFIG_CACHE_ENDIAN); fi ) rubidium@5643: rubidium@5643: # If there is a change in the source-file-list, make sure we recheck the deps rubidium@5643: RES := $(shell if [ "`cat $(CONFIG_CACHE_SOURCE) 2>/dev/null`" != "$(SRCS)" ]; then echo "$(SRCS)" > $(CONFIG_CACHE_SOURCE); fi ) celestar@5650: # If there is a change in the revision, make sure we recompile rev.cpp rubidium@5643: RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(REV)" ]; then echo "$(REV)" > $(CONFIG_CACHE_VERSION); fi ) rubidium@5643: rubidium@5643: ifndef MAKEDEPEND rubidium@5643: # The slow, but always correct, dep-check rubidium@5643: DEP_MASK := %.d rubidium@5643: DEPS := $(OBJS:%.o=%.d) rubidium@5643: rubidium@5643: # Only include the deps if we are compiling everything rubidium@5643: ifeq ($(filter $(ENDIAN_TARGETS) %.o clean mrproper, $(MAKECMDGOALS)),) rubidium@5643: -include $(DEPS) rubidium@5643: else rubidium@5643: # In case we want to compile a single target, include the .d file for it rubidium@5643: ifneq ($(filter %.o, $(MAKECMDGOALS)),) rubidium@5643: SINGLE_DEP := $(filter %.o, $(MAKECMDGOALS)) rubidium@5643: -include $(SINGLE_DEP:%.o=%.d) rubidium@5643: endif rubidium@5643: endif rubidium@5643: rubidium@5643: # Find the deps via GCC. Rarely wrong, but a bit slow rubidium@5643: rubidium@5643: $(OBJS_C:%.o=%.d): %.d: $(SRC_DIR)/%.c $(FILE_DEP) rubidium@5643: $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.c=%.c)' rubidium@5643: $(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -MM $< | sed 's#^$(@F:%.d=%.o):#$@ $(@:%.d=%.o):#' > $@ rubidium@5643: rubidium@5643: $(OBJS_CPP:%.o=%.d): %.d: $(SRC_DIR)/%.cpp $(FILE_DEP) rubidium@5643: $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.cpp=%.cpp)' rubidium@5643: $(Q)$(CXX_HOST) $(CFLAGS) -MM $< | sed 's#^$(@F:%.d=%.o):#$@ $(@:%.d=%.o):#' > $@ rubidium@5643: rubidium@5643: $(OBJS_M:%.o=%.d): %.d: $(SRC_DIR)/%.m $(FILE_DEP) rubidium@5643: $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.m=%.m)' rubidium@5643: $(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -MM $< | sed 's#^$(@F:%.d=%.o):#$@ $(@:%.d=%.o):#' > $@ rubidium@5643: rubidium@5645: $(OBJS_RC:%.o=%.d): %.d: $(SRC_DIR)/%.rc $(FILE_DEP) rubidium@5645: $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.m=%.m)' rubidium@5645: $(Q)touch $@ rubidium@5645: rubidium@5643: else rubidium@5643: # The much faster, but can be wrong, dep-check rubidium@5643: DEP_MASK := rubidium@5643: DEPS := Makefile.dep rubidium@5643: rubidium@5643: # Only include the deps if we are not cleaning rubidium@5643: ifeq ($(filter $(ENDIAN_TARGETS) depend clean mrproper, $(MAKECMDGOALS)),) rubidium@5643: -include Makefile.dep rubidium@5643: endif rubidium@5643: rubidium@5643: # Make sure that only 'make depend' ALWAYS triggers a recheck rubidium@5643: ifeq ($(filter depend, $(MAKECMDGOALS)),) rubidium@5643: Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(CONFIG_CACHE_SOURCE) rubidium@5643: else rubidium@5643: Makefile.dep: FORCE rubidium@5643: endif rubidium@5643: $(E) '$(STAGE) DEP CHECK (all files)' rubidium@5643: $(Q)rm -f Makefile.dep.tmp rubidium@5643: $(Q)touch Makefile.dep.tmp rubidium@5643: rubidium@5643: # Calculate the deps via makedepend rubidium@5643: $(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -- $(CFLAGS_MAKEDEP) -- $(SRCS:%=$(SRC_DIR)/%) 2>/dev/null rubidium@5643: rubidium@5643: # Convert x:/... paths to /x/... for mingw rubidium@5643: ifeq ($(OS), MINGW) rubidium@5643: @cat Makefile.dep.tmp | sed 's@\([a-zA-Z]\):/@/\1/@g' > Makefile.dep.tmp.mingw rubidium@5643: @cp Makefile.dep.tmp.mingw Makefile.dep.tmp rubidium@5643: @rm -f Makefile.dep.tmp.mingw rubidium@5643: endif rubidium@5643: rubidium@5643: # Remove all comments and includes that don't start with $(SRC_DIR) rubidium@5643: # Remove $(SRC_DIR) from object-file-name rubidium@5643: @awk ' \ rubidium@5643: /^# DO NOT/ { print $$0 ; next} \ rubidium@5643: /^#/ {next} \ rubidium@5643: /:/ { \ rubidium@5643: left = NF - 1; \ rubidium@5643: for (n = 2; n <= NF; n++) { \ rubidium@5643: if (match($$n, "^$(SRC_DIR)") == 0) { \ rubidium@5643: $$n = ""; \ rubidium@5643: left--; \ rubidium@5643: } \ rubidium@5643: } \ rubidium@5643: gsub("$(SRC_DIR)/", "", $$1); \ rubidium@5643: if (left > 0) { \ rubidium@5643: print $$0; \ rubidium@5643: $$1 = "Makefile.dep:"; \ rubidium@5643: print $$0; \ rubidium@5643: } \ rubidium@5643: next \ rubidium@5643: } \ rubidium@5643: { \ rubidium@5643: print $$0 \ rubidium@5643: } \ rubidium@5643: ' < Makefile.dep.tmp | sed 's/ */ /g;s/ $$//' | $(SORT) > Makefile.dep rubidium@5643: rubidium@5643: $(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak rubidium@5643: rubidium@5643: endif rubidium@5643: rubidium@5643: # Avoid problems with deps if a .h file is deleted without the deps rubidium@5643: # being updated. Now the Makefile continues, the deps are recreated rubidium@5643: # and all will be fine. rubidium@5643: %.h: rubidium@5643: @true rubidium@5643: rubidium@5643: rubidium@5643: # Compile all the files according to the targets rubidium@5643: rubidium@5643: $(OBJS_C): %.o: $(SRC_DIR)/%.c $(DEP_MASK) $(FILE_DEP) rubidium@5643: $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.c=%.c)' rubidium@5643: $(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -c -o $@ $< rubidium@5643: rubidium@5643: $(OBJS_CPP): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) rubidium@5643: $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' rubidium@5643: $(Q)$(CXX_HOST) $(CFLAGS) -c -o $@ $< rubidium@5643: rubidium@5643: $(OBJS_M): %.o: $(SRC_DIR)/%.m $(DEP_MASK) $(FILE_DEP) rubidium@5643: $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.m=%.m)' rubidium@5643: $(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -c -o $@ $< rubidium@5643: rubidium@5643: $(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP) rubidium@5643: $(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)' rubidium@5643: $(Q)$(WINDRES) -o $@ -I $(MEDIA_DIR) $< rubidium@5643: rubidium@5643: $(TTD): rev.o $(OBJS) $(CONFIG_CACHE_LINKER) rubidium@5643: $(E) '$(STAGE) Linking $@' rubidium@5645: $(Q)$(CXX_HOST) $(LDFLAGS) rev.o $(OBJS) $(LIBS) -o $@ rubidium@5643: ifdef STRIP rubidium@5643: $(Q)$(STRIP) $@ rubidium@5643: endif rubidium@5645: $(Q)cp $@ $(BIN_DIR)/ rubidium@5643: rubidium@5643: # The targets to compile the endian-code rubidium@5643: rubidium@5643: endian_target.h: $(ENDIAN_CHECK) $(CONFIG_CACHE_ENDIAN) rubidium@5643: $(E) '$(STAGE) Testing endianness for target' rubidium@5643: $(Q)./$(ENDIAN_CHECK) $(ENDIAN_FORCE) > $@ rubidium@5643: celestar@5650: $(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp rubidium@5643: $(E) '$(STAGE) Compiling and Linking $@' celestar@5650: $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $< -o $@ rubidium@5643: rubidium@5643: # Revision files rubidium@5643: celestar@5650: rev.cpp: $(CONFIG_CACHE_VERSION) rubidium@5643: # setting the revision number in a place, there the binary can read it celestar@5650: @echo 'extern const char _openttd_revision[] = "$(REV)";' > rev.cpp rubidium@5643: # Some additions for MorphOS versions tag rubidium@5643: ifeq ($(OS),MORPHOS) celestar@5650: @echo '#ifdef __MORPHOS__' >> rev.cpp celestar@5650: @echo 'extern const char morphos_versions_tag[] = "\\0$$VER: OpenTTD $(REV) ('`date +%d.%m.%y`') (C) OpenTTD Team [MorphOS, PowerPC]";' >> rev.cpp celestar@5650: @echo '#endif' >> rev.cpp rubidium@5643: endif rubidium@5643: celestar@5650: rev.o: rev.cpp $(FILE_DEP) celestar@5650: $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' celestar@5650: $(Q)$(CXX_HOST) $(CFLAGS) -c -o $@ $< rubidium@5643: rubidium@5643: FORCE: rubidium@5643: rubidium@5643: depend: $(DEPS) rubidium@5643: rubidium@5643: clean: rubidium@5643: $(E) '$(STAGE) Cleaning up object files' rubidium@5643: $(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS) rev.o rubidium@5643: rubidium@5643: mrproper: clean celestar@5650: $(Q)rm -f rev.cpp rubidium@5643: rubidium@5643: %.o: rubidium@5643: @echo '$(STAGE) No such source-file: $(@:%.o=%).[c|cpp|m|rc]' rubidium@5643: rubidium@5643: .PHONY: all mrproper depend clean FORCE