Makefile 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. # This is the Makefile of China Set: Trains, combining WenSim's and Planetmaker's together.
  2. # This makes it possible to do voxel rendering and file compilation by simply typing "make".
  3. # Under GPL v2.
  4. # The displayed name and the filename of the bundled grf shall look like:
  5. # mynewgrf-a.b.c.d
  6. # Where d is the REPO_REVISION which never decreases per compilation,
  7. # c is the MINOR_VERSION which increases by 1 each release and decreases to 0 once b increases by 1,
  8. # b is the MAJOR_VERSION which increases by 1 each "major" release and decreases to 0 once a increases by 1,
  9. # a is the BREAKING_VERSION which increases by 1 only if something breakground happens to this NewGRF.
  10. SHELL := /bin/bash
  11. -include ./Makefile.config
  12. -include ./Makefile.dist
  13. FILE_NAME ?= mynewgrf
  14. VOX_DIR ?= gfx
  15. DOC_FILES ?= docs/changelog.txt docs/readme.txt docs/license.txt
  16. LNG_SCRIPTS ?= str-csv.py
  17. PALETTE ?= ttd_palette.json
  18. GORENDER ?= renderobject -overwrite
  19. NMLC ?= nmlc -c
  20. PYTHON ?= python
  21. GCC := gcc
  22. MANIFEST := manifest.json
  23. .PHONY: all sprites code bundle_tar clean clean_grf clean_png copy
  24. # default rule
  25. all: sprites code bundle_tar
  26. # voxel paths
  27. VOX_FILES = $(wildcard $(VOX_DIR)/*.vox wildcard $(VOX_DIR)/*/*.vox)
  28. VOX_8BPP_FILES = $(addsuffix _8bpp.png, $(basename $(VOX_FILES)))
  29. VOX_32BPP_FILES = $(addsuffix _32bpp.png, $(basename $(VOX_FILES)))
  30. VOX_MASK_FILES = $(addsuffix _mask.png, $(basename $(VOX_FILES)))
  31. VOX_GENREATED_FILES = $(VOX_8BPP_FILES) $(VOX_32BPP_FILES) $(VOX_MASK_FILES)
  32. %_8bpp.png %_32bpp.png %_mask.png: %.vox
  33. @echo "Rendering, manifest = $(dir $<)/$(MANIFEST), palette = $(dir $<)/$(PALETTE), $<"
  34. @$(GORENDER) -m $(dir $<)/$(MANIFEST) --palette $(dir $<)/$(PALETTE) $<
  35. # sprites
  36. sprites: $(VOX_GENREATED_FILES)
  37. # code
  38. NML_FILE ?= $(FILE_NAME).nml
  39. INDEX_FILE ?= $(FILE_NAME).pnml
  40. GRF_FILE ?= $(FILE_NAME).grf
  41. CODE_FILES ?= $(INDEX_FILE)
  42. CUSTOM_TAGS ?= custom_tags.txt
  43. TEMP_DIR ?= temp
  44. lng_files: $(LNG_SCRIPTS)
  45. $(PYTHON) $<
  46. $(CUSTOM_TAGS): ./Makefile.dist
  47. $(GCC) -E -x c -o $@ $<
  48. $(_V) echo VERSION_STRING :$(REPO_VERSION_STRING) >> $@
  49. #$(NML_FILE): $(CUSTOM_TAGS) $(CODE_FILES) $(VOX_GENREATED_FILES)
  50. # $(GCC) -E -x c -D REPO_REVISION=$(REPO_REVISION) -D VERSION_STRING=$(REPO_VERSION_STRING) -o $@ $(INDEX_FILE)
  51. .PHONY: regenerate_nml
  52. regenerate_nml:
  53. $(GCC) -E -x c -D REPO_REVISION=$(REPO_REVISION) -D VERSION_STRING=$(REPO_VERSION_STRING) -o $(NML_FILE) $(INDEX_FILE)
  54. $(NML_FILE): regenerate_nml
  55. $(GRF_FILE): $(NML_FILE) $(CUSTOM_TAGS) lng_files
  56. $(NMLC) $<
  57. if [ ! -d $(TEMP_DIR) ]; then mkdir $(TEMP_DIR); fi
  58. # mv -f $(NML_FILE) $(TEMP_DIR)/$(NML_FILE)
  59. # mv -f $(CUSTOM_TAGS) $(TEMP_DIR)/$(CUSTOM_TAGS)
  60. # Rule to run nmlc when the NML file changes
  61. code: $(GRF_FILE)
  62. # clean
  63. clean: clean_grf clean_png clean_bundle clean_bundle_src
  64. clean_grf:
  65. @echo "Cleaning GRF and NML files"
  66. @echo "Warning: clean grf won't work when using powershell, please use bash instead."
  67. @rm -f *.grf
  68. @rm -f *.nml
  69. @rm -f $(CUSTOM_TAGS)
  70. clean_png:
  71. @echo "Cleaning PNG files"
  72. @echo "Warning: clean png won't work when using powershell, please use bash instead."
  73. @find $(VOX_DIR)/ -name '*.png' -type f -delete
  74. clean_bundle:
  75. @echo "Warning: clean bundle won't work when using powershell, please use bash instead."
  76. $(_V) -rm -rf $(DIR_NAME)
  77. $(_V) -rm -rf $(DIR_NAME).tar
  78. $(_V) -rm -rf $(DIR_NAME).tar.zip
  79. $(_V) -rm -rf $(DIR_NAME).tar.gz
  80. $(_V) -rm -rf $(DIR_NAME).tar.bz2
  81. $(_V) -rm -rf $(DIR_NAME).tar.xz
  82. clean_bundle_src:
  83. $(_V) -rm -rf $(DIR_NAME_SRC)
  84. $(_V) -rm -rf $(DIR_NAME_SRC).tar
  85. $(_V) -rm -rf Makefile.fordist
  86. BUNDLE_FILES ?= $(GRF_FILE) $(DOC_FILES)
  87. TAR ?= tar
  88. TAR_FLAGS ?= -cf
  89. ZIP ?= zip
  90. ZIP_FLAGS ?= -9rq
  91. GZIP ?= gzip
  92. GZIP_FLAGS ?= -9f
  93. BZIP ?= bzip2
  94. BZIP_FLAGS ?= -9fk
  95. XZ ?= xz
  96. XZ_FLAGS ?= -efk
  97. # OSX has nice extended file attributes which create their own file within tars. We don't want those, thus don't copy them
  98. CP_FLAGS ?= $(shell [ "$(OSTYPE)" = "Darwin" ] && echo "-rfX" || echo "-rf")
  99. # Use the grfID programme to find the checksum which OpenTTD checks
  100. GRFID ?= grfid
  101. GRFID_FLAGS ?= -m
  102. # Common to all filenames
  103. DIR_NAME := $(FILE_NAME)-$(REPO_VERSION_STRING)
  104. DIR_NAME_SRC := $(DIR_NAME)-source
  105. TAR_FILENAME := $(DIR_NAME).tar
  106. BZIP_FILENAME := $(TAR_FILENAME).bz2
  107. GZIP_FILENAME := $(TAR_FILENAME).gz
  108. XZ_FILENAME := $(TAR_FILENAME).xz
  109. ZIP_FILENAME := $(DIR_NAME).zip
  110. MD5_FILENAME := $(DIR_NAME).md5
  111. MD5_SRC_FILENAME ?= $(DIR_NAME).check.md5
  112. # Creating file with checksum
  113. %.md5: $(GRF_FILE)
  114. $(_V) $(GRFID) $(GRFID_FLAGS) $< > $@
  115. # Bundle directory
  116. $(DIR_NAME): $(BUNDLE_FILES)
  117. $(_V) if [ -e $@ ]; then rm -rf $@; fi
  118. $(_V) mkdir "$@"
  119. $(_V) for i in $(BUNDLE_FILES); do cp $(CP_FLAGS) $$i $@; done
  120. $(DIR_NAME).tar: $(DIR_NAME)
  121. $(_V) $(TAR) $(TAR_FLAGS) $@ $<
  122. bundle_tar: $(DIR_NAME).tar
  123. bundle_zip: $(ZIP_FILENAME)
  124. %.zip: $(DIR_NAME).tar
  125. $(_V) $(ZIP) $(ZIP_FLAGS) $@ $< >/dev/null
  126. bundle_bzip: $(DIR_NAME).tar.bz2
  127. %.tar.bz2: %.tar
  128. $(_V) $(BZIP) $(BZIP_FLAGS) $^
  129. bundle_gzip: $(DIR_NAME).tar.gz
  130. # gzip has no option -k, so we cat the tar to keep it
  131. %.tar.gz: %.tar
  132. $(_V) cat $^ | $(GZIP) $(GZIP_FLAGS) > $@
  133. bundle_xz: $(DIR_NAME).tar.xz
  134. %.tar.xz: %.tar
  135. $(_V) $(XZ) $(XZ_FLAGS) $^
  136. ################################################################
  137. # Bundle source targets
  138. # target 'bundle_src which builds source bundle
  139. ################################################################
  140. bundle_src: $(DIR_NAME_SRC).tar
  141. bundle_bsrc: $(DIR_NAME_SRC).tar.bz2
  142. bundle_gsrc: $(DIR_NAME_SRC).tar.gz
  143. bundle_xsrc: $(DIR_NAME_SRC).tar.xz
  144. bundle_zsrc: $(DIR_NAME_SRC).tar.zip
  145. maintainer-clean::
  146. $(_V) -rm -rf $(MD5_SRC_FILENAME)
  147. help::
  148. $(_E) "Default targets:"
  149. $(_E)
  150. $(_E) "all: Build the entire NewGRF and its documentation"