Makefile 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. LBITS := $(shell getconf LONG_BIT)
  2. ARCH ?= $(LBITS)
  3. PREFIX ?= /usr/local
  4. INSTALL_DIR ?= $(PREFIX)
  5. LIBS=fmt sdl ssl openal ui uv mysql
  6. CFLAGS = -Wall -O3 -I src -msse2 -mfpmath=sse -std=c11 -I include/pcre -I include/mikktspace -D LIBHL_EXPORTS
  7. LFLAGS = -L. -lhl
  8. LIBFLAGS =
  9. HLFLAGS = -ldl
  10. LIBEXT = so
  11. LIBTURBOJPEG = -lturbojpeg
  12. PCRE = include/pcre/pcre_chartables.o include/pcre/pcre_compile.o include/pcre/pcre_dfa_exec.o \
  13. include/pcre/pcre_exec.o include/pcre/pcre_fullinfo.o include/pcre/pcre_globals.o \
  14. include/pcre/pcre_newline.o include/pcre/pcre_string_utils.o include/pcre/pcre_tables.o include/pcre/pcre_xclass.o \
  15. include/pcre/pcre16_ord2utf16.o include/pcre/pcre16_valid_utf16.o include/pcre/pcre_ucd.o
  16. RUNTIME = src/alloc.o
  17. STD = src/std/array.o src/std/buffer.o src/std/bytes.o src/std/cast.o src/std/date.o src/std/error.o src/std/debug.o \
  18. src/std/file.o src/std/fun.o src/std/maps.o src/std/math.o src/std/obj.o src/std/random.o src/std/regexp.o \
  19. src/std/socket.o src/std/string.o src/std/sys.o src/std/types.o src/std/ucs2.o src/std/thread.o src/std/process.o \
  20. src/std/track.o
  21. HL = src/code.o src/jit.o src/main.o src/module.o src/debugger.o
  22. FMT = libs/fmt/fmt.o libs/fmt/sha1.o include/mikktspace/mikktspace.o libs/fmt/mikkt.o
  23. SDL = libs/sdl/sdl.o libs/sdl/gl.o
  24. OPENAL = libs/openal/openal.o
  25. SSL = libs/ssl/ssl.o
  26. UV = libs/uv/uv.o
  27. UI = libs/ui/ui_stub.o
  28. MYSQL = libs/mysql/socket.o libs/mysql/sha1.o libs/mysql/my_proto.o libs/mysql/my_api.o libs/mysql/mysql.o
  29. LIB = ${PCRE} ${RUNTIME} ${STD}
  30. BOOT = src/_main.o
  31. UNAME := $(shell uname)
  32. # Cygwin
  33. ifeq ($(OS),Windows_NT)
  34. LIBFLAGS += -Wl,--export-all-symbols
  35. LIBEXT = dll
  36. RELEASE_NAME=win
  37. ifeq ($(ARCH),32)
  38. CC=i686-pc-cygwin-gcc
  39. endif
  40. else ifeq ($(UNAME),Darwin)
  41. # Mac
  42. LIBEXT=dylib
  43. CFLAGS += -m$(ARCH) -I /opt/libjpeg-turbo/include -I /usr/local/opt/jpeg-turbo/include -I /usr/local/include -I /usr/local/opt/libvorbis/include -I /usr/local/opt/openal-soft/include -Dopenal_soft
  44. LFLAGS += -Wl,-export_dynamic -L/usr/local/lib
  45. LIBFLAGS += -L/opt/libjpeg-turbo/lib -L/usr/local/opt/jpeg-turbo/lib -L/usr/local/lib -L/usr/local/opt/libvorbis/lib -L/usr/local/opt/openal-soft/lib
  46. LIBOPENGL = -framework OpenGL
  47. LIBOPENAL = -lopenal
  48. LIBSSL = -framework Security -framework CoreFoundation
  49. RELEASE_NAME = osx
  50. else
  51. # Linux
  52. CFLAGS += -m$(ARCH) -fPIC -pthread
  53. LFLAGS += -lm -Wl,--export-dynamic -Wl,--no-undefined
  54. ifeq ($(ARCH),32)
  55. CFLAGS += -I /usr/include/i386-linux-gnu
  56. LIBFLAGS += -L/opt/libjpeg-turbo/lib
  57. else
  58. LIBFLAGS += -L/opt/libjpeg-turbo/lib64
  59. endif
  60. LIBOPENAL = -lopenal
  61. RELEASE_NAME = linux
  62. endif
  63. ifdef MESA
  64. LIBS += mesa
  65. endif
  66. all: libhl hl libs
  67. install:
  68. mkdir -p $(INSTALL_DIR)
  69. mkdir -p $(INSTALL_DIR)/bin
  70. mkdir -p $(INSTALL_DIR)/lib
  71. mkdir -p $(INSTALL_DIR)/include
  72. cp hl $(INSTALL_DIR)/bin
  73. cp libhl.${LIBEXT} $(INSTALL_DIR)/lib
  74. cp *.hdll $(INSTALL_DIR)/lib
  75. cp src/hl.h src/hlc.h src/hlc_main.c $(INSTALL_DIR)/include
  76. uninstall:
  77. rm -f $(INSTALL_DIR)/bin/hl $(INSTALL_DIR)/lib/libhl.${LIBEXT} $(INSTALL_DIR)/lib/*.hdll
  78. rm -f $(INSTALL_DIR)/include/hl.h $(INSTALL_DIR)/include/hlc.h $(INSTALL_DIR)/include/hlc_main.c
  79. libs: $(LIBS)
  80. libhl: ${LIB}
  81. ${CC} -o libhl.$(LIBEXT) -m${ARCH} ${LIBFLAGS} -shared ${LIB} -lpthread -lm
  82. hlc: ${BOOT}
  83. ${CC} ${CFLAGS} -o hlc ${BOOT} ${LFLAGS}
  84. hl: ${HL} libhl
  85. ${CC} ${CFLAGS} -o hl ${HL} ${LFLAGS} ${HLFLAGS}
  86. fmt: ${FMT} libhl
  87. ${CC} ${CFLAGS} -I include/mikktspace -shared -o fmt.hdll ${FMT} ${LIBFLAGS} -L. -lhl -lpng $(LIBTURBOJPEG) -lz -lvorbisfile
  88. sdl: ${SDL} libhl
  89. ${CC} ${CFLAGS} -shared -o sdl.hdll ${SDL} ${LIBFLAGS} -L. -lhl -lSDL2 $(LIBOPENGL)
  90. openal: ${OPENAL} libhl
  91. ${CC} ${CFLAGS} -shared -o openal.hdll ${OPENAL} ${LIBFLAGS} -L. -lhl $(LIBOPENAL)
  92. ssl: ${SSL} libhl
  93. ${CC} ${CFLAGS} -shared -o ssl.hdll ${SSL} ${LIBFLAGS} -L. -lhl -lmbedtls -lmbedx509 -lmbedcrypto $(LIBSSL)
  94. ui: ${UI} libhl
  95. ${CC} ${CFLAGS} -shared -o ui.hdll ${UI} ${LIBFLAGS} -L. -lhl
  96. uv: ${UV} libhl
  97. ${CC} ${CFLAGS} -shared -o uv.hdll ${UV} ${LIBFLAGS} -L. -lhl -luv
  98. mysql: ${MYSQL} libhl
  99. ${CC} ${CFLAGS} -shared -o mysql.hdll ${MYSQL} ${LIBFLAGS} -L. -lhl
  100. mesa:
  101. (cd libs/mesa && make)
  102. release: release_version release_$(RELEASE_NAME)
  103. release_version:
  104. $(eval HL_VER := `(hl --version)`-$(RELEASE_NAME))
  105. rm -rf hl-$(HL_VER)
  106. mkdir hl-$(HL_VER)
  107. mkdir hl-$(HL_VER)/include
  108. cp src/hl.h src/hlc* hl-$(HL_VER)/include
  109. release_haxelib:
  110. make HLIB=directx release_haxelib_package
  111. make HLIB=sdl release_haxelib_package
  112. make HLIB=openal release_haxelib_package
  113. ifeq ($(HLIB),directx)
  114. HLPACK=dx
  115. else
  116. HLPACK=$(HLIB)
  117. endif
  118. release_haxelib_package:
  119. rm -rf $(HLIB)_release
  120. mkdir $(HLIB)_release
  121. (cd libs/$(HLIB) && cp -R $(HLPACK) *.h *.c* haxelib.json ../../$(HLIB)_release | true)
  122. zip -r $(HLIB).zip $(HLIB)_release
  123. haxelib submit $(HLIB).zip
  124. rm -rf $(HLIB)_release
  125. release_win:
  126. (cd ReleaseVS2013 && cp hl.exe libhl.dll *.hdll *.lib ../hl-$(HL_VER))
  127. cp c:/windows/syswow64/msvcr120.dll hl-$(HL_VER)
  128. cp `which SDL2.dll` hl-$(HL_VER)
  129. cp `which OpenAL32.dll` hl-$(HL_VER)
  130. zip -r hl-$(HL_VER).zip hl-$(HL_VER)
  131. rm -rf hl-$(HL_VER)
  132. release_linux:
  133. cp hl libhl.so *.hdll hl-$(HL_VER)
  134. tar -czf hl-$(HL_VER).tgz hl-$(HL_VER)
  135. rm -rf hl-$(HL_VER)
  136. release_osx:
  137. cp hl libhl.dylib *.hdll hl-$(HL_VER)
  138. tar -czf hl-$(HL_VER).tgz hl-$(HL_VER)
  139. rm -rf hl-$(HL_VER)
  140. .SUFFIXES : .c .o
  141. .c.o :
  142. ${CC} ${CFLAGS} -o $@ -c $<
  143. clean_o:
  144. rm -f ${STD} ${BOOT} ${RUNTIME} ${PCRE} ${HL} ${FMT} ${SDL} ${SSL} ${OPENAL} ${UI} ${UV}
  145. clean: clean_o
  146. rm -f hl hl.exe libhl.$(LIBEXT) *.hdll
  147. .PHONY: libhl hl hlc fmt sdl libs release