Makefile 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. # Haxe compiler Makefile
  2. #
  3. # - use 'make' to build all
  4. # - use 'make haxe' to build only the compiler (not the libraries)
  5. # - if you want to build quickly, install 'ocamlopt.opt' and change OCAMLOPT=ocamlopt.opt
  6. #
  7. # Windows users :
  8. # - use 'make -f Makefile.win' to build for Windows
  9. # - use 'make MSVC=1 -f Makefile.win' to build for Windows with OCaml/MSVC
  10. #
  11. .SUFFIXES : .ml .mli .cmo .cmi .cmx .mll .mly
  12. INSTALL_DIR=$(DESTDIR)/usr
  13. INSTALL_BIN_DIR=$(INSTALL_DIR)/bin
  14. INSTALL_LIB_DIR=$(INSTALL_DIR)/lib/haxe
  15. INSTALL_STD_DIR=$(INSTALL_LIB_DIR)/std
  16. PACKAGE_OUT_DIR=out
  17. PACKAGE_SRC_EXTENSION=.tar.gz
  18. OUTPUT=haxe
  19. EXTENSION=
  20. OCAMLOPT?=ocamlopt
  21. OCAMLC?=ocamlc
  22. LFLAGS=
  23. CFLAGS= -g -I libs/extlib -I libs/extc -I libs/neko -I libs/javalib -I libs/ziplib -I libs/swflib -I libs/xml-light -I libs/ttflib -I libs/ilib -I libs/objsize
  24. LIBS=unix str libs/extlib/extLib libs/xml-light/xml-light libs/swflib/swflib \
  25. libs/extc/extc libs/neko/neko libs/javalib/java libs/ziplib/zip \
  26. libs/ttflib/ttf libs/ilib/il libs/objsize/objsize
  27. NATIVE_LIBS=-cclib libs/extc/extc_stubs.o -cclib libs/extc/process_stubs.o -cclib -lz -cclib libs/objsize/c_objsize.o
  28. ifeq ($(BYTECODE),1)
  29. TARGET_FLAG = bytecode
  30. COMPILER = $(OCAMLC)
  31. LIB_EXT = cma
  32. MODULE_EXT = cmo
  33. NATIVE_LIB_FLAG = -custom
  34. else
  35. TARGET_FLAG = native
  36. COMPILER = $(OCAMLOPT)
  37. LIB_EXT = cmxa
  38. MODULE_EXT = cmx
  39. endif
  40. CC_CMD = $(COMPILER) $(CFLAGS) -c $<
  41. CC_PARSER_CMD = $(COMPILER) -pp camlp4o $(CFLAGS) -c parser.ml
  42. RELDIR=../../..
  43. MODULES=ast type lexer common genxml parser typecore optimizer typeload \
  44. codegen gencommon genas3 gencpp genjs genneko genphp \
  45. genswf9 genswf genjava gencs genpy interp dce analyzer filters typer matcher version main
  46. ADD_REVISION?=0
  47. BRANCH=$(shell echo $$APPVEYOR_REPO_NAME | grep -q /haxe && echo $$APPVEYOR_REPO_BRANCH || echo $$TRAVIS_REPO_SLUG | grep -q /haxe && echo $$TRAVIS_BRANCH || git rev-parse --abbrev-ref HEAD)
  48. COMMIT_SHA=$(shell git rev-parse --short HEAD)
  49. COMMIT_DATE=$(shell \
  50. if [ "$$(uname)" = "Darwin" ]; then \
  51. date -u -r $$(git show -s --format=%ct HEAD) +%Y%m%d%H%M%S; \
  52. else \
  53. date -u -d @$$(git show -s --format=%ct HEAD) +%Y%m%d%H%M%S; \
  54. fi \
  55. )
  56. PACKAGE_FILE_NAME=haxe_$(COMMIT_DATE)_$(COMMIT_SHA)
  57. # using $(CURDIR) on Windows will not work since it might be a Cygwin path
  58. ifdef SYSTEMROOT
  59. EXTENSION=.exe
  60. else
  61. export HAXE_STD_PATH=$(CURDIR)/std
  62. endif
  63. all: libs haxe
  64. libs:
  65. make -C libs/extlib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  66. make -C libs/extc OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  67. make -C libs/neko OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  68. make -C libs/javalib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  69. make -C libs/ilib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  70. make -C libs/ziplib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  71. make -C libs/swflib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  72. make -C libs/xml-light OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  73. make -C libs/ttflib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  74. make -C libs/objsize OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG)
  75. haxe: $(MODULES:=.$(MODULE_EXT))
  76. $(COMPILER) -o $(OUTPUT) $(NATIVE_LIBS) $(NATIVE_LIB_FLAG) $(LFLAGS) $(LIBS:=.$(LIB_EXT)) $(MODULES:=.$(MODULE_EXT))
  77. haxelib:
  78. (cd $(CURDIR)/extra/haxelib_src && $(CURDIR)/$(OUTPUT) haxelib.hxml && nekotools boot bin/haxelib.n)
  79. cp extra/haxelib_src/bin/haxelib$(EXTENSION) haxelib$(EXTENSION)
  80. tools: haxelib
  81. install:
  82. rm -rf $(INSTALL_LIB_DIR)
  83. mkdir -p $(INSTALL_BIN_DIR)
  84. mkdir -p $(INSTALL_LIB_DIR)/lib
  85. rm -rf $(INSTALL_STD_DIR)
  86. cp -rf std $(INSTALL_STD_DIR)
  87. cp -rf extra $(INSTALL_LIB_DIR)
  88. rm -f $(INSTALL_BIN_DIR)/haxe
  89. cp haxe $(INSTALL_LIB_DIR)
  90. ln -s $(INSTALL_LIB_DIR)/haxe $(INSTALL_BIN_DIR)/haxe
  91. chmod -R a+rx $(INSTALL_LIB_DIR)
  92. chmod 777 $(INSTALL_LIB_DIR)/lib
  93. # cp extra/haxelib_src/haxelib_script.sh $(INSTALL_DIR)/bin/haxelib
  94. echo "#!/bin/sh" > $(INSTALL_BIN_DIR)/haxelib
  95. echo "exec haxe -cp $(INSTALL_LIB_DIR)/extra/haxelib_src/src --run haxelib.client.Main \"\$$@\"" >> $(INSTALL_BIN_DIR)/haxelib
  96. chmod a+rx $(INSTALL_BIN_DIR)/haxe $(INSTALL_BIN_DIR)/haxelib
  97. # will install native version of the tools instead of script ones
  98. install_tools: tools
  99. cp haxelib ${INSTALL_BIN_DIR}/haxelib
  100. chmod a+rx $(INSTALL_BIN_DIR)/haxelib
  101. uninstall:
  102. rm -rf $(INSTALL_BIN_DIR)/haxe $(INSTALL_BIN_DIR)/haxelib $(INSTALL_LIB_DIR)
  103. # Modules
  104. analyzer.$(MODULE_EXT): ast.$(MODULE_EXT) type.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT)
  105. codegen.$(MODULE_EXT): optimizer.$(MODULE_EXT) typeload.$(MODULE_EXT) typecore.$(MODULE_EXT) type.$(MODULE_EXT) genxml.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
  106. common.$(MODULE_EXT): type.$(MODULE_EXT) ast.$(MODULE_EXT) libs/ilib/il.$(LIB_EXT)
  107. dce.$(MODULE_EXT): ast.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) type.$(MODULE_EXT)
  108. filters.$(MODULE_EXT): ast.$(MODULE_EXT) analyzer.$(MODULE_EXT) common.$(MODULE_EXT) type.$(MODULE_EXT) dce.$(MODULE_EXT) codegen.$(MODULE_EXT) typecore.$(MODULE_EXT)
  109. genas3.$(MODULE_EXT): type.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)
  110. gencommon.$(MODULE_EXT): type.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) libs/ilib/il.$(LIB_EXT)
  111. gencpp.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) gencommon.$(MODULE_EXT)
  112. gencs.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) gencommon.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) libs/ilib/il.$(LIB_EXT)
  113. genjava.$(MODULE_EXT): type.$(MODULE_EXT) gencommon.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)
  114. genjs.$(MODULE_EXT): type.$(MODULE_EXT) optimizer.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)
  115. genneko.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)
  116. genphp.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)
  117. genpy.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)
  118. genswf.$(MODULE_EXT): type.$(MODULE_EXT) genswf9.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
  119. genswf9.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT)
  120. genxml.$(MODULE_EXT): type.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
  121. interp.$(MODULE_EXT): typecore.$(MODULE_EXT) type.$(MODULE_EXT) lexer.$(MODULE_EXT) genneko.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) genswf.$(MODULE_EXT) genjava.$(MODULE_EXT) gencs.$(MODULE_EXT) parser.$(MODULE_EXT) libs/ilib/il.$(LIB_EXT)
  122. matcher.$(MODULE_EXT): optimizer.$(MODULE_EXT) codegen.$(MODULE_EXT) typecore.$(MODULE_EXT) type.$(MODULE_EXT) typer.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
  123. main.$(MODULE_EXT): filters.$(MODULE_EXT) matcher.$(MODULE_EXT) typer.$(MODULE_EXT) typeload.$(MODULE_EXT) typecore.$(MODULE_EXT) type.$(MODULE_EXT) parser.$(MODULE_EXT) optimizer.$(MODULE_EXT) lexer.$(MODULE_EXT) interp.$(MODULE_EXT) genxml.$(MODULE_EXT) genswf.$(MODULE_EXT) genphp.$(MODULE_EXT) genneko.$(MODULE_EXT) genjs.$(MODULE_EXT) gencpp.$(MODULE_EXT) genas3.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) gencommon.$(MODULE_EXT) genjava.$(MODULE_EXT) gencs.$(MODULE_EXT) genpy.$(MODULE_EXT) version.$(MODULE_EXT) libs/ilib/il.$(LIB_EXT)
  124. optimizer.$(MODULE_EXT): typecore.$(MODULE_EXT) type.$(MODULE_EXT) parser.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
  125. parser.$(MODULE_EXT): parser.ml lexer.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
  126. $(CC_PARSER_CMD)
  127. type.$(MODULE_EXT): ast.$(MODULE_EXT)
  128. typecore.$(MODULE_EXT): type.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
  129. typeload.$(MODULE_EXT): typecore.$(MODULE_EXT) type.$(MODULE_EXT) parser.$(MODULE_EXT) optimizer.$(MODULE_EXT) lexer.$(MODULE_EXT) common.$(MODULE_EXT) ast.$(MODULE_EXT)
  130. typer.$(MODULE_EXT): typeload.$(MODULE_EXT) typecore.$(MODULE_EXT) type.$(MODULE_EXT) parser.$(MODULE_EXT) optimizer.$(MODULE_EXT) lexer.$(MODULE_EXT) interp.$(MODULE_EXT) genneko.$(MODULE_EXT) genjs.$(MODULE_EXT) common.$(MODULE_EXT) codegen.$(MODULE_EXT) ast.$(MODULE_EXT) filters.$(MODULE_EXT) gencommon.$(MODULE_EXT)
  131. lexer.$(MODULE_EXT): lexer.ml
  132. lexer.$(MODULE_EXT): ast.$(MODULE_EXT)
  133. ast.$(MODULE_EXT):
  134. version.$(MODULE_EXT):
  135. $(MAKE) -f Makefile.version_extra -s --no-print-directory ADD_REVISION=$(ADD_REVISION) BRANCH=$(BRANCH) COMMIT_SHA=$(COMMIT_SHA) COMMIT_DATE=$(COMMIT_DATE) > version.ml
  136. $(COMPILER) $(CFLAGS) -c version.ml
  137. # Package
  138. package_src:
  139. mkdir -p $(PACKAGE_OUT_DIR)
  140. # use git-archive-all since we have submodules
  141. # https://github.com/Kentzo/git-archive-all
  142. curl -s https://raw.githubusercontent.com/Kentzo/git-archive-all/1.12/git-archive-all -o extra/git-archive-all
  143. python extra/git-archive-all $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_src$(PACKAGE_SRC_EXTENSION)
  144. package_bin:
  145. mkdir -p $(PACKAGE_OUT_DIR)
  146. rm -rf $(PACKAGE_FILE_NAME) $(PACKAGE_FILE_NAME).tar.gz
  147. # Copy the package contents to $(PACKAGE_FILE_NAME)
  148. mkdir -p $(PACKAGE_FILE_NAME)
  149. cp -r $(OUTPUT) haxelib$(EXTENSION) std extra/LICENSE.txt extra/CONTRIB.txt extra/CHANGES.txt $(PACKAGE_FILE_NAME)
  150. # archive
  151. tar -zcf $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_bin.tar.gz $(PACKAGE_FILE_NAME)
  152. rm -r $(PACKAGE_FILE_NAME)
  153. install_dox:
  154. haxelib git hxparse https://github.com/Simn/hxparse development src
  155. haxelib git hxtemplo https://github.com/Simn/hxtemplo
  156. haxelib git hxargs https://github.com/Simn/hxargs
  157. haxelib git markdown https://github.com/dpeek/haxe-markdown master src
  158. haxelib git hxcpp https://github.com/HaxeFoundation/hxcpp
  159. haxelib git hxjava https://github.com/HaxeFoundation/hxjava
  160. haxelib git hxcs https://github.com/HaxeFoundation/hxcs
  161. haxelib git dox https://github.com/dpeek/dox
  162. package_doc:
  163. cd $$(haxelib path dox | head -n 1) && haxe run.hxml && haxe gen.hxml
  164. haxelib run dox --title "Haxe API" -o $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_doc.zip -D version "$$(haxe -version 2>&1)" -i $$(haxelib path dox | head -n 1)bin/xml -ex microsoft -ex javax -ex cs.internal -D source-path https://github.com/HaxeFoundation/haxe/blob/$(BRANCH)/std/
  165. # Clean
  166. clean: clean_libs clean_haxe clean_tools clean_package
  167. clean_libs:
  168. make -C libs/extlib clean
  169. make -C libs/extc clean
  170. make -C libs/neko clean
  171. make -C libs/ziplib clean
  172. make -C libs/javalib clean
  173. make -C libs/ilib clean
  174. make -C libs/swflib clean
  175. make -C libs/xml-light clean
  176. make -C libs/ttflib clean
  177. make -C libs/objsize clean
  178. clean_haxe:
  179. rm -f $(MODULES:=.obj) $(MODULES:=.o) $(MODULES:=.cmx) $(MODULES:=.cmi) $(MODULES:=.cmo) lexer.ml version.ml $(OUTPUT)
  180. clean_tools:
  181. rm -f $(OUTPUT) haxelib
  182. rm -f extra/haxelib_src/bin/haxelib.n
  183. rm -f extra/haxelib_src/bin/haxelib
  184. clean_package:
  185. rm -rf $(PACKAGE_OUT_DIR)
  186. # SUFFIXES
  187. .ml.cmx:
  188. $(CC_CMD)
  189. .ml.cmo:
  190. $(CC_CMD)
  191. .mll.ml:
  192. ocamllex $<
  193. .PHONY: haxe libs version.cmx version.cmo haxelib