Makefile 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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.top
  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=/usr
  13. INSTALL_BIN_DIR=$(INSTALL_DIR)/bin
  14. INSTALL_LIB_DIR=$(INSTALL_DIR)/lib/haxe
  15. OUTPUT=haxe
  16. EXTENSION=
  17. OCAMLOPT=ocamlopt
  18. OCAMLC=ocamlc
  19. 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
  20. CC_CMD = $(OCAMLOPT) $(CFLAGS) -c $<
  21. CC_PARSER_CMD = $(OCAMLOPT) -pp camlp4o $(CFLAGS) -c parser.ml
  22. LIBS=unix.cmxa str.cmxa libs/extlib/extLib.cmxa libs/xml-light/xml-light.cmxa libs/swflib/swflib.cmxa \
  23. libs/extc/extc.cmxa libs/neko/neko.cmxa libs/javalib/java.cmxa libs/ziplib/zip.cmxa \
  24. libs/ttflib/ttf.cmxa libs/ilib/il.cmxa libs/objsize/objsize.cmxa
  25. NATIVE_LIBS=-cclib libs/extc/extc_stubs.o -cclib -lz -cclib libs/objsize/c_objsize.o
  26. RELDIR=../../..
  27. MODULES=ast type lexer common genxml parser typecore optimizer typeload \
  28. codegen gencommon genas3 gencpp genjs genneko genphp genswf8 \
  29. genswf9 genswf genjava gencs interp dce filters typer matcher version main
  30. ADD_REVISION=0
  31. # using $(CURDIR) on Windows will not work since it might be a Cygwin path
  32. ifdef SYSTEMROOT
  33. EXTENSION=.exe
  34. else
  35. export HAXE_STD_PATH=$(CURDIR)/std
  36. endif
  37. ifneq ($(ADD_REVISION),0)
  38. VERSION_EXTRA="let version_extra = Some \" (git build $(shell git rev-parse --abbrev-ref HEAD) @ $(shell git describe --always)) \""
  39. else
  40. VERSION_EXTRA="let version_extra = None"
  41. endif
  42. all: libs haxe
  43. version.cmx:
  44. echo $(VERSION_EXTRA) > version.ml
  45. $(OCAMLOPT) $(CFLAGS) -c version.ml
  46. libs:
  47. make -C libs/extlib opt OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  48. make -C libs/extc native OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  49. make -C libs/neko OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  50. make -C libs/javalib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  51. make -C libs/ilib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  52. make -C libs/ziplib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  53. make -C libs/swflib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  54. make -C libs/xml-light xml-light.cmxa OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  55. make -C libs/ttflib OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  56. make -C libs/objsize OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC)
  57. haxe: $(MODULES:=.cmx)
  58. $(OCAMLOPT) -o $(OUTPUT) $(NATIVE_LIBS) $(LIBS) $(MODULES:=.cmx)
  59. haxelib:
  60. (cd $(CURDIR)/extra/haxelib_src && $(CURDIR)/$(OUTPUT) haxelib.hxml && nekotools boot bin/haxelib.n)
  61. cp extra/haxelib_src/bin/haxelib$(EXTENSION) haxelib$(EXTENSION)
  62. tools: haxelib
  63. install:
  64. -rm -f $(INSTALL_LIB_DIR)
  65. -mkdir -p $(INSTALL_LIB_DIR)
  66. rm -rf $(INSTALL_LIB_DIR)/std
  67. cp -rf std $(INSTALL_LIB_DIR)/std
  68. cp -rf extra $(INSTALL_LIB_DIR)
  69. -mkdir -p $(INSTALL_LIB_DIR)/lib
  70. rm -f $(INSTALL_BIN_DIR)/haxe
  71. cp haxe $(INSTALL_LIB_DIR)
  72. ln -s $(INSTALL_LIB_DIR)/haxe $(INSTALL_BIN_DIR)/haxe
  73. chmod -R a+rx $(INSTALL_LIB_DIR)
  74. chmod 777 $(INSTALL_LIB_DIR)/lib
  75. # cp extra/haxelib_src/haxelib_script.sh $(INSTALL_DIR)/bin/haxelib
  76. echo "#!/bin/sh" > $(INSTALL_BIN_DIR)/haxelib
  77. echo "exec haxe -cp $(INSTALL_LIB_DIR)/extra/haxelib_src/src --run tools.haxelib.Main \"\$$@\"" >> $(INSTALL_BIN_DIR)/haxelib
  78. chmod a+rx $(INSTALL_BIN_DIR)/haxe $(INSTALL_BIN_DIR)/haxelib
  79. # will install native version of the tools instead of script ones
  80. install_tools: tools
  81. cp haxelib ${INSTALL_BIN_DIR}/haxelib
  82. chmod a+rx $(INSTALL_BIN_DIR)/haxelib
  83. uninstall:
  84. rm -rf $(INSTALL_BIN_DIR)/haxe $(INSTALL_BIN_DIR)/haxelib $(INSTALL_LIB_DIR)
  85. codegen.cmx: optimizer.cmx typeload.cmx typecore.cmx type.cmx genxml.cmx common.cmx ast.cmx
  86. common.cmx: type.cmx ast.cmx
  87. dce.cmx: ast.cmx common.cmx codegen.cmx type.cmx
  88. filters.cmx: ast.cmx common.cmx type.cmx dce.cmx codegen.cmx typecore.cmx
  89. genas3.cmx: type.cmx common.cmx codegen.cmx ast.cmx
  90. gencommon.cmx: type.cmx common.cmx codegen.cmx ast.cmx
  91. gencpp.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
  92. gencs.cmx: type.cmx lexer.cmx gencommon.cmx common.cmx codegen.cmx ast.cmx
  93. genjava.cmx: type.cmx gencommon.cmx common.cmx codegen.cmx ast.cmx
  94. genjs.cmx: type.cmx optimizer.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
  95. genneko.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
  96. genphp.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
  97. genswf.cmx: type.cmx genswf9.cmx genswf8.cmx common.cmx ast.cmx
  98. genswf8.cmx: type.cmx lexer.cmx common.cmx codegen.cmx ast.cmx
  99. genswf9.cmx: type.cmx lexer.cmx genswf8.cmx common.cmx codegen.cmx ast.cmx
  100. genxml.cmx: type.cmx lexer.cmx common.cmx ast.cmx
  101. interp.cmx: typecore.cmx type.cmx lexer.cmx genneko.cmx common.cmx codegen.cmx ast.cmx genswf.cmx genjava.cmx parser.cmx
  102. matcher.cmx: optimizer.cmx codegen.cmx typecore.cmx type.cmx typer.cmx common.cmx ast.cmx
  103. main.cmx: filters.cmx matcher.cmx typer.cmx typeload.cmx typecore.cmx type.cmx parser.cmx optimizer.cmx lexer.cmx interp.cmx genxml.cmx genswf.cmx genphp.cmx genneko.cmx genjs.cmx gencpp.cmx genas3.cmx common.cmx codegen.cmx ast.cmx gencommon.cmx genjava.cmx gencs.cmx version.cmx
  104. optimizer.cmx: typecore.cmx type.cmx parser.cmx common.cmx ast.cmx
  105. parser.cmx: parser.ml lexer.cmx common.cmx ast.cmx
  106. $(CC_PARSER_CMD)
  107. type.cmx: ast.cmx
  108. typecore.cmx: type.cmx common.cmx ast.cmx
  109. typeload.cmx: typecore.cmx type.cmx parser.cmx optimizer.cmx lexer.cmx common.cmx ast.cmx
  110. typer.cmx: typeload.cmx typecore.cmx type.cmx parser.cmx optimizer.cmx lexer.cmx interp.cmx genneko.cmx genjs.cmx common.cmx codegen.cmx ast.cmx filters.cmx
  111. lexer.cmx: lexer.ml
  112. lexer.cmx: ast.cmx
  113. clean: clean_libs clean_haxe clean_tools
  114. clean_libs:
  115. make -C libs/extlib clean
  116. make -C libs/extc clean
  117. make -C libs/neko clean
  118. make -C libs/ziplib clean
  119. make -C libs/javalib clean
  120. make -C libs/ilib clean
  121. make -C libs/swflib clean
  122. make -C libs/xml-light clean
  123. make -C libs/ttflib clean
  124. clean_haxe:
  125. rm -f $(MODULES:=.obj) $(MODULES:=.o) $(MODULES:=.cmx) $(MODULES:=.cmi) lexer.ml $(OUTPUT)
  126. clean_tools:
  127. rm -f $(OUTPUT) haxelib
  128. # SUFFIXES
  129. .ml.cmx:
  130. $(CC_CMD)
  131. .mli.cmi:
  132. $(CC_CMD)
  133. .mll.ml:
  134. ocamllex $<
  135. .PHONY: haxe libs version.cmx haxelib