Makefile 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. LBITS := $(shell getconf LONG_BIT)
  2. MARCH ?= $(LBITS)
  3. PREFIX ?= /usr/local
  4. INSTALL_DIR ?= $(PREFIX)
  5. INSTALL_BIN_DIR ?= $(PREFIX)/bin
  6. INSTALL_LIB_DIR ?= $(PREFIX)/lib
  7. INSTALL_INCLUDE_DIR ?= $(PREFIX)/include
  8. LIBS=fmt sdl ssl openal ui uv mysql sqlite
  9. CFLAGS = -Wall -O3 -I src -msse2 -mfpmath=sse -std=c11 -D LIBHL_EXPORTS
  10. LFLAGS = -L. -lhl
  11. EXTRA_LFLAGS ?=
  12. LIBFLAGS =
  13. HLFLAGS = -ldl
  14. LIBEXT = so
  15. LIBTURBOJPEG = -lturbojpeg
  16. PCRE_INCLUDE = -I include/pcre
  17. PCRE = include/pcre/pcre_chartables.o include/pcre/pcre_compile.o include/pcre/pcre_dfa_exec.o \
  18. include/pcre/pcre_exec.o include/pcre/pcre_fullinfo.o include/pcre/pcre_globals.o \
  19. include/pcre/pcre_newline.o include/pcre/pcre_string_utils.o include/pcre/pcre_tables.o include/pcre/pcre_xclass.o \
  20. include/pcre/pcre16_ord2utf16.o include/pcre/pcre16_valid_utf16.o include/pcre/pcre_ucd.o
  21. RUNTIME = src/gc.o
  22. 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 \
  23. 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 \
  24. 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 \
  25. src/std/track.o
  26. HL = src/code.o src/jit.o src/main.o src/module.o src/debugger.o src/profile.o
  27. FMT_INCLUDE = -I include/mikktspace -I include/minimp3
  28. FMT = libs/fmt/fmt.o libs/fmt/sha1.o include/mikktspace/mikktspace.o libs/fmt/mikkt.o libs/fmt/dxt.o
  29. SDL = libs/sdl/sdl.o libs/sdl/gl.o
  30. OPENAL = libs/openal/openal.o
  31. SSL = libs/ssl/ssl.o
  32. UV = libs/uv/uv.o
  33. UI = libs/ui/ui_stub.o
  34. MYSQL = libs/mysql/socket.o libs/mysql/sha1.o libs/mysql/my_proto.o libs/mysql/my_api.o libs/mysql/mysql.o
  35. SQLITE = libs/sqlite/sqlite.o
  36. LIB = ${PCRE} ${RUNTIME} ${STD}
  37. BOOT = src/_main.o
  38. UNAME := $(shell uname)
  39. # Cygwin
  40. ifeq ($(OS),Windows_NT)
  41. LIBFLAGS += -Wl,--export-all-symbols
  42. LIBEXT = dll
  43. RELEASE_NAME=win
  44. ifeq ($(MARCH),32)
  45. CC=i686-pc-cygwin-gcc
  46. endif
  47. else ifeq ($(UNAME),Darwin)
  48. # Mac
  49. LIBEXT=dylib
  50. CFLAGS += -m$(MARCH) -I include -I /usr/local/include -I /usr/local/opt/libjpeg-turbo/include \
  51. -I /usr/local/opt/jpeg-turbo/include -I /usr/local/opt/sdl2/include/SDL2 -I /usr/local/opt/libvorbis/include \
  52. -I /usr/local/opt/openal-soft/include -Dopenal_soft -DGL_SILENCE_DEPRECATION
  53. LFLAGS += -Wl,-export_dynamic -L/usr/local/lib
  54. ifdef OSX_SDK
  55. ISYSROOT = $(shell xcrun --sdk macosx$(OSX_SDK) --show-sdk-path)
  56. CFLAGS += -isysroot $(ISYSROOT)
  57. LFLAGS += -isysroot $(ISYSROOT)
  58. endif
  59. LIBFLAGS += -L/usr/local/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
  60. LIBOPENGL = -framework OpenGL
  61. LIBOPENAL = -lopenal
  62. LIBSSL = -framework Security -framework CoreFoundation
  63. RELEASE_NAME = osx
  64. # Mac native debug
  65. HL_DEBUG = include/mdbg/mdbg.o include/mdbg/mach_excServer.o include/mdbg/mach_excUser.o
  66. LIB += ${HL_DEBUG}
  67. else
  68. # Linux
  69. CFLAGS += -m$(MARCH) -fPIC -pthread -fno-omit-frame-pointer
  70. LFLAGS += -lm -Wl,-rpath,.:'$$ORIGIN':$(INSTALL_LIB_DIR) -Wl,--export-dynamic -Wl,--no-undefined
  71. ifeq ($(MARCH),32)
  72. CFLAGS += -I /usr/include/i386-linux-gnu
  73. LIBFLAGS += -L/opt/libjpeg-turbo/lib
  74. else
  75. LIBFLAGS += -L/opt/libjpeg-turbo/lib64
  76. endif
  77. LIBOPENAL = -lopenal
  78. RELEASE_NAME = linux
  79. endif
  80. ifdef MESA
  81. LIBS += mesa
  82. endif
  83. ifdef DEBUG
  84. CFLAGS += -g
  85. endif
  86. all: libhl hl libs
  87. install:
  88. $(UNAME)==Darwin && make uninstall
  89. mkdir -p $(INSTALL_BIN_DIR)
  90. cp hl $(INSTALL_BIN_DIR)
  91. mkdir -p $(INSTALL_LIB_DIR)
  92. cp *.hdll $(INSTALL_LIB_DIR)
  93. cp libhl.${LIBEXT} $(INSTALL_LIB_DIR)
  94. mkdir -p $(INSTALL_INCLUDE_DIR)
  95. cp src/hl.h src/hlc.h src/hlc_main.c $(INSTALL_INCLUDE_DIR)
  96. uninstall:
  97. rm -f $(INSTALL_BIN_DIR)/hl $(INSTALL_LIB_DIR)/libhl.${LIBEXT} $(INSTALL_LIB_DIR)/*.hdll
  98. rm -f $(INSTALL_INCLUDE_DIR)/hl.h $(INSTALL_INCLUDE_DIR)/hlc.h $(INSTALL_INCLUDE_DIR)/hlc_main.c
  99. libs: $(LIBS)
  100. ./include/pcre/%.o: include/pcre/%.c
  101. ${CC} ${CFLAGS} -o $@ -c $< ${PCRE_FLAGS}
  102. src/std/regexp.o: src/std/regexp.c
  103. ${CC} ${CFLAGS} -o $@ -c $< ${PCRE_FLAGS}
  104. libhl: ${LIB}
  105. ${CC} -o libhl.$(LIBEXT) -m${MARCH} ${LIBFLAGS} -shared ${LIB} -lpthread -lm
  106. hlc: ${BOOT}
  107. ${CC} ${CFLAGS} -o hlc ${BOOT} ${LFLAGS} ${EXTRA_LFLAGS}
  108. hl: ${HL} libhl
  109. ${CC} ${CFLAGS} -o hl ${HL} ${LFLAGS} ${EXTRA_LFLAGS} ${HLFLAGS}
  110. libs/fmt/%.o: libs/fmt/%.c
  111. ${CC} ${CFLAGS} -o $@ -c $< ${FMT_INCLUDE}
  112. fmt: ${FMT} libhl
  113. ${CC} ${CFLAGS} -shared -o fmt.hdll ${FMT} ${LIBFLAGS} -L. -lhl -lpng $(LIBTURBOJPEG) -lz -lvorbisfile
  114. sdl: ${SDL} libhl
  115. ${CC} ${CFLAGS} -shared -o sdl.hdll ${SDL} ${LIBFLAGS} -L. -lhl -lSDL2 $(LIBOPENGL)
  116. openal: ${OPENAL} libhl
  117. ${CC} ${CFLAGS} -shared -o openal.hdll ${OPENAL} ${LIBFLAGS} -L. -lhl $(LIBOPENAL)
  118. ssl: ${SSL} libhl
  119. ${CC} ${CFLAGS} -shared -o ssl.hdll ${SSL} ${LIBFLAGS} -L. -lhl -lmbedtls -lmbedx509 -lmbedcrypto $(LIBSSL)
  120. ui: ${UI} libhl
  121. ${CC} ${CFLAGS} -shared -o ui.hdll ${UI} ${LIBFLAGS} -L. -lhl
  122. uv: ${UV} libhl
  123. ${CC} ${CFLAGS} -shared -o uv.hdll ${UV} ${LIBFLAGS} -L. -lhl -luv
  124. mysql: ${MYSQL} libhl
  125. ${CC} ${CFLAGS} -shared -o mysql.hdll ${MYSQL} ${LIBFLAGS} -L. -lhl
  126. sqlite: ${SQLITE} libhl
  127. ${CC} ${CFLAGS} -shared -o sqlite.hdll ${SQLITE} ${LIBFLAGS} -L. -lhl -lsqlite3
  128. mesa:
  129. (cd libs/mesa && make)
  130. release: release_version release_$(RELEASE_NAME)
  131. release_version:
  132. $(eval HL_VER := `(hl --version)`-$(RELEASE_NAME))
  133. rm -rf hl-$(HL_VER)
  134. mkdir hl-$(HL_VER)
  135. mkdir hl-$(HL_VER)/include
  136. cp src/hl.h src/hlc* hl-$(HL_VER)/include
  137. release_haxelib:
  138. make HLIB=directx release_haxelib_package
  139. make HLIB=sdl release_haxelib_package
  140. make HLIB=openal release_haxelib_package
  141. ifeq ($(HLIB),directx)
  142. HLPACK=dx
  143. else
  144. HLPACK=$(HLIB)
  145. endif
  146. release_haxelib_package:
  147. rm -rf $(HLIB)_release
  148. mkdir $(HLIB)_release
  149. (cd libs/$(HLIB) && cp -R $(HLPACK) *.h *.c* haxelib.json ../../$(HLIB)_release | true)
  150. zip -r $(HLIB).zip $(HLIB)_release
  151. haxelib submit $(HLIB).zip
  152. rm -rf $(HLIB)_release
  153. release_win:
  154. (cd x64/Release && cp hl.exe libhl.dll *.hdll *.lib ../../hl-$(HL_VER))
  155. cp c:/windows/system32/vcruntime140.dll hl-$(HL_VER)
  156. cp `which SDL2.dll` hl-$(HL_VER)
  157. cp `which OpenAL32.dll` hl-$(HL_VER)
  158. zip -r hl-$(HL_VER).zip hl-$(HL_VER)
  159. rm -rf hl-$(HL_VER)
  160. release_linux:
  161. cp hl libhl.so *.hdll hl-$(HL_VER)
  162. tar -czf hl-$(HL_VER).tgz hl-$(HL_VER)
  163. rm -rf hl-$(HL_VER)
  164. release_osx:
  165. cp hl libhl.dylib *.hdll hl-$(HL_VER)
  166. tar -czf hl-$(HL_VER).tgz hl-$(HL_VER)
  167. rm -rf hl-$(HL_VER)
  168. codesign_osx:
  169. sudo security delete-identity -c hl-cert || echo
  170. echo "[req]\ndistinguished_name=codesign_dn\n[codesign_dn]\ncommonName=hl-cert\n[v3_req]\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=critical,codeSigning" > openssl.cnf
  171. openssl req -x509 -newkey rsa:4096 -keyout key.pem -nodes -days 365 -subj '/CN=hl-cert' -outform der -out cert.cer -extensions v3_req -config openssl.cnf
  172. sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain cert.cer
  173. sudo security import key.pem -k /Library/Keychains/System.keychain -A
  174. codesign --entitlements other/osx/entitlements.xml -fs hl-cert hl
  175. rm key.pem cert.cer openssl.cnf
  176. .SUFFIXES : .c .o
  177. .c.o :
  178. ${CC} ${CFLAGS} -o $@ -c $<
  179. clean_o:
  180. rm -f ${STD} ${BOOT} ${RUNTIME} ${PCRE} ${HL} ${FMT} ${SDL} ${SSL} ${OPENAL} ${UI} ${UV} ${MYSQL} ${SQLITE} ${HL_DEBUG}
  181. clean: clean_o
  182. rm -f hl hl.exe libhl.$(LIBEXT) *.hdll
  183. .PHONY: libhl hl hlc fmt sdl libs release