Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

276 linhas
9.3 KiB

  1. dnl
  2. dnl Lol Engine
  3. dnl
  4. dnl Copyright © 2010—2020 Sam Hocevar <sam@hocevar.net>
  5. dnl
  6. dnl Lol Engine is free software. It comes without any warranty, to
  7. dnl the extent permitted by applicable law. You can redistribute it
  8. dnl and/or modify it under the terms of the Do What the Fuck You Want
  9. dnl to Public License, Version 2, as published by the WTFPL Task Force.
  10. dnl See http://www.wtfpl.net/ for more details.
  11. dnl
  12. # LOL_AC_INIT()
  13. # ---------------------
  14. AC_DEFUN([LOL_AC_INIT], [
  15. dnl Silent rules by default
  16. AM_SILENT_RULES([yes])
  17. dnl C++11 and later mode. Checked early so that we don't run into surprises.
  18. version_flag=''
  19. LOL_TRY_CXXFLAGS(-std=c++0x, [version_flag='-std=c++0x'])
  20. LOL_TRY_CXXFLAGS(-std=c++11, [version_flag='-std=c++11'])
  21. LOL_TRY_CXXFLAGS(-std=c++14, [version_flag='-std=c++14'])
  22. LOL_TRY_CXXFLAGS(-std=c++17, [version_flag='-std=c++17'])
  23. AM_CXXFLAGS="${AM_CXXFLAGS} ${version_flag}"
  24. CXXFLAGS="${CXXFLAGS} ${version_flag}"
  25. AC_LANG_PUSH(C++)
  26. AC_MSG_CHECKING(for C++11 enum class support)
  27. AC_TRY_LINK([], [enum class Foo : int { Bar, Baz };],
  28. [AC_MSG_RESULT(yes)],
  29. [AC_MSG_RESULT(no)
  30. AC_MSG_ERROR([[C++ compiler does not support C++11 enum classes]])])
  31. AC_LANG_POP(C++)
  32. ]) # LOL_AC_INIT
  33. # LOL_AC_CHECK()
  34. # ---------------------
  35. AC_DEFUN([LOL_AC_CHECK], [
  36. dnl Check that the C++ compiler really works
  37. AC_LANG_PUSH(C++)
  38. AC_MSG_CHECKING(for a fully working C++ compiler)
  39. AC_TRY_LINK([], [],
  40. [AC_MSG_RESULT(yes)],
  41. [AC_MSG_RESULT(no)
  42. AC_MSG_ERROR([[C++ compiler cannot link executables]])])
  43. AC_LANG_POP(C++)
  44. AC_C_CONST
  45. AC_C_INLINE
  46. dnl
  47. dnl Common libraries
  48. dnl
  49. AC_CHECK_LIB(m, sin, LIBS="${LIBS} -lm")
  50. AC_CHECK_LIB(pthread, main, LIBS="${LIBS} -lpthread")
  51. dnl
  52. dnl Activate some header-only libraries
  53. dnl
  54. LOL_CFLAGS="$LOL_CFLAGS -I\$(lol_srcdir)/src/3rdparty/cpp-httplib"
  55. LOL_CFLAGS="$LOL_CFLAGS -I\$(lol_srcdir)/src/3rdparty/imgui"
  56. dnl Use OpenSSL?
  57. ac_cv_have_openssl=no
  58. AC_CHECK_LIB(ssl, OPENSSL_init_ssl,
  59. [ac_cv_have_openssl=yes
  60. AC_DEFINE(LOL_USE_OPENSSL, 1, Define to 1 to use OpenSSL)
  61. LOL_LIBS="${LOL_LIBS} -lssl -lcrypto"])
  62. AM_CONDITIONAL(LOL_USE_OPENSSL, test "${ac_cv_have_openssl}" = "yes")
  63. dnl Use Bullet Physics?
  64. ac_cv_my_have_bullet="no"
  65. if test "${enable_bullet}" != "no"; then
  66. PKG_CHECK_MODULES(BULLET, bullet, [ac_cv_my_have_bullet="yes"], [:])
  67. if test "${ac_cv_my_have_bullet}" != "no"; then
  68. AC_DEFINE(LOL_USE_BULLET, 1, Define to 1 to use Bullet Physics)
  69. LOL_CFLAGS="${LOL_CFLAGS} ${BULLET_CFLAGS}"
  70. LOL_LIBS="${LOL_LIBS} ${BULLET_LIBS}"
  71. fi
  72. fi
  73. AM_CONDITIONAL(LOL_USE_BULLET, test "${ac_cv_my_have_bullet}" = "yes")
  74. dnl Use Android? FIXME: super hacks!
  75. ac_cv_my_have_android="no"
  76. AC_CHECK_LIB(log, __android_log_vprint,
  77. [ac_cv_my_have_android="yes"
  78. LOL_LIBS="${LOL_LIBS} -llog -landroid -module -lEGL -lGLESv2"])
  79. AM_CONDITIONAL(LOL_USE_ANDROID, test "${ac_cv_my_have_android}" != "no")
  80. dnl Use EGL? (autodetect unless GL is disabled)
  81. ac_cv_my_have_egl="no"
  82. if test "${enable_gl}" != "no"; then
  83. PKG_CHECK_MODULES(EGL, egl, [ac_cv_my_have_egl="yes"], [:])
  84. if test "${ac_cv_my_have_egl}" != "no"; then
  85. AC_DEFINE(LOL_USE_EGL, 1, Define to 1 to use libegl)
  86. EGL_LIBS="${EGL_LIBS} -lX11"
  87. fi
  88. AC_CHECK_HEADERS(EGL/egl.h,
  89. [AC_CHECK_LIB(EGL, eglInitialize,
  90. [ac_cv_my_have_egl="yes"
  91. AC_DEFINE(LOL_USE_EGL, 1, Define to 1 to use libegl)
  92. EGL_LIBS="-lEGL"])
  93. dnl Raspberry Pi is different, check for it with extra libs; also we
  94. dnl look for a different function to bypass autoconf caching
  95. AC_CHECK_LIB(EGL, eglGetDisplay,
  96. [ac_cv_my_have_egl="yes"
  97. AC_DEFINE(LOL_USE_EGL, 1, Define to 1 to use libegl)
  98. EGL_LIBS="-lEGL -lvcos -lvchiq_arm -lbcm_host -lGLESv2"],
  99. [:],
  100. [-lvcos -lvchiq_arm -lbcm_host -lGLESv2])])
  101. fi
  102. AM_CONDITIONAL(LOL_USE_EGL, test "${ac_cv_my_have_egl}" != "no")
  103. dnl Use libpng? (replacement for SDL_image)
  104. ac_cv_my_have_libpng="no"
  105. if test "${enable_png}" != "no"; then
  106. PKG_CHECK_MODULES(LIBPNG, libpng, [ac_cv_my_have_libpng="yes"], [:])
  107. if test "${ac_cv_my_have_libpng}" != "no"; then
  108. AC_DEFINE(LOL_USE_LIBPNG, 1, Define to 1 to use libpng)
  109. fi
  110. fi
  111. AM_CONDITIONAL(LOL_USE_LIBPNG, test "${ac_cv_my_have_libpng}" != "no")
  112. dnl Use Imlib2?
  113. ac_cv_my_have_imlib2="no"
  114. if test "${enable_imlib2}" != "no"; then
  115. PKG_CHECK_MODULES(IMLIB2, imlib2, [ac_cv_my_have_imlib2="yes"], [:])
  116. if test "${ac_cv_my_have_imlib2}" != "no"; then
  117. AC_DEFINE(LOL_USE_IMLIB2, 1, Define to 1 to use Imlib2)
  118. LOL_CFLAGS="${LOL_CFLAGS} ${IMLIB2_CFLAGS}"
  119. LOL_LIBS="${LOL_LIBS} ${IMLIB2_LIBS}"
  120. fi
  121. fi
  122. AM_CONDITIONAL(LOL_USE_IMLIB2, test "${ac_cv_my_have_imlib2}" = "yes")
  123. dnl Use Windows GDI+?
  124. ac_cv_my_have_gdiplus="no"
  125. AC_LANG_PUSH(C++)
  126. AC_CHECK_HEADERS(gdiplus.h,
  127. [ac_cv_my_have_gdiplus="yes"
  128. LOL_LIBS="${LOL_LIBS} -lgdiplus"],
  129. [ac_cv_my_have_gdiplus="no"],
  130. [#include <algorithm>
  131. using std::min;
  132. using std::max;
  133. #include <windows.h>])
  134. AC_LANG_POP(C++)
  135. if test "${ac_cv_my_have_gdiplus}" != "no"; then
  136. AC_DEFINE(LOL_USE_GDIPLUS, 1, Define to 1 to use GDI+)
  137. fi
  138. AM_CONDITIONAL(LOL_USE_GDIPLUS, test "${ac_cv_my_have_gdiplus}" = "yes")
  139. dnl Are we building using MinGW?
  140. LOL_TRY_CXXFLAGS(-mwindows -mwin32,
  141. [AM_CXXFLAGS="${AM_CXXFLAGS} -mwindows -mwin32"
  142. LOL_CFLAGS="${LOL_CFLAGS} -I\$(lol_srcdir)/src/3rdparty/mingw-std-threads"
  143. LOL_CFLAGS="${LOL_CFLAGS} -D__STDC_FORMAT_MACROS"
  144. LOL_LIBS="${LOL_LIBS} -uWinMain -u_WinMain@16"])
  145. dnl Are we building using Emscripten?
  146. ac_cv_my_have_emscripten="no"
  147. AC_CHECK_HEADERS(emscripten.h,
  148. [ac_cv_my_have_emscripten="yes"
  149. AC_CHECK_HEADERS(emscripten/html5.h)
  150. dnl XXX: activate this if memory heap is too small
  151. #AM_CXXFLAGS="${AM_CXXFLAGS} -s ALLOW_MEMORY_GROWTH=1"
  152. dnl See https://github.com/emscripten-core/emscripten/pull/7977 for more details
  153. CPPFLAGS="${CPPFLAGS} -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1"
  154. dnl HACK: until emcc properly adds these to EMSDK_OPTS
  155. CPPFLAGS="${CPPFLAGS} -U__i386__ -U__x86_64__ -U__i386 -U__x86_64 -Ui386 -Ux86_64"
  156. CPPFLAGS="${CPPFLAGS} -U__SSE__ -U__SSE2__ -U__MMX__ -UX87_DOUBLE_ROUNDING"
  157. CPPFLAGS="${CPPFLAGS} -UHAVE_GCC_ASM_FOR_X87 -U__STRICT_ANSI__ -U__CYGWIN__"])
  158. AM_CONDITIONAL(LOL_USE_EMSCRIPTEN, test "${ac_cv_my_have_emscripten}" != "no")
  159. dnl Are we on an OS X or iOS platform?
  160. LOL_TRY_LDFLAGS(-framework Foundation,
  161. [LOL_LIBS="${LOL_LIBS} -framework Foundation"])
  162. LOL_TRY_LDFLAGS(-framework CoreGraphics,
  163. [LOL_LIBS="${LOL_LIBS} -framework CoreGraphics"])
  164. LOL_TRY_LDFLAGS(-framework CoreData,
  165. [LOL_LIBS="${LOL_LIBS} -framework CoreData"])
  166. LOL_TRY_LDFLAGS(-framework UIKit,
  167. [LOL_LIBS="${LOL_LIBS} -framework UIKit"])
  168. dnl Other complex checks
  169. LOL_AC_CHECK_OPENGL()
  170. LOL_AC_CHECK_SDL()
  171. LOL_AC_CHECK_FFMPEG()
  172. dnl Debug symbols
  173. dnl We use --export-dynamic instead of -rdynamic because the latter causes
  174. dnl emscripten to emit wasm even when html is asked…
  175. LOL_TRY_LDFLAGS(--export-dynamic, [AM_LDFLAGS="${AM_LDFLAGS} --export-dynamic"])
  176. dnl Code qui fait des warnings == code de porc == deux baffes dans ta gueule
  177. LOL_TRY_CXXFLAGS(-Wall, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wall"])
  178. LOL_TRY_CXXFLAGS(-Wextra, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wextra"])
  179. LOL_TRY_CXXFLAGS(-Wpointer-arith, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wpointer-arith"])
  180. LOL_TRY_CXXFLAGS(-Wcast-align, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wcast-align"])
  181. LOL_TRY_CXXFLAGS(-Wcast-qual, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wcast-qual"])
  182. LOL_TRY_CXXFLAGS(-Wshadow, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wshadow"])
  183. LOL_TRY_CXXFLAGS(-Wsign-compare, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wsign-compare"])
  184. LOL_TRY_CXXFLAGS(-Wstrict-overflow=1, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wstrict-overflow=1"])
  185. dnl Add these even though they're implicitly set, so that we can safely
  186. dnl remove them from within a Makefile.
  187. LOL_TRY_CXXFLAGS(-Wuninitialized, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wuninitialized"])
  188. LOL_TRY_CXXFLAGS(-Wnarrowing, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wnarrowing"])
  189. LOL_TRY_CXXFLAGS(-Wunused, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wunused"])
  190. LOL_TRY_CXXFLAGS(-Wcast-align, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wcast-align"])
  191. LOL_TRY_CXXFLAGS(-Wunused-parameter, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wunused-parameter"])
  192. LOL_TRY_CXXFLAGS(-Wstrict-aliasing, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wstrict-aliasing"])
  193. LOL_TRY_CXXFLAGS(-Wparentheses, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wparentheses"])
  194. LOL_TRY_CXXFLAGS(-Wreorder, [AM_CXXFLAGS="${AM_CXXFLAGS} -Wreorder"])
  195. dnl Disable these warnings because they're annoyingly verbose
  196. LOL_TRY_CXXFLAGS(-Wno-psabi, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wno-psabi"])
  197. ]) # LOL_AC_CHECK
  198. # LOL_AC_FINI()
  199. # ---------------------
  200. AC_DEFUN([LOL_AC_FINI], [
  201. dnl How to use the Lol Engine outside this tree
  202. LOL_CFLAGS="$LOL_CFLAGS $SDL_CFLAGS $GL_CFLAGS $EGL_CFLAGS $LIBPNG_CFLAGS"
  203. LOL_LIBS="$LOL_LIBS $SDL_LIBS $GL_LIBS $EGL_LIBS $LIBPNG_LIBS $D3D_LIBS"
  204. LOL_DEPS="${LOL_DEPS} \$(lol_builddir)/src/liblol-core.a"
  205. LOL_LUA_DEPS="${LOL_LUA_DEPS} \$(lol_builddir)/src/3rdparty/liblol-lua.a"
  206. dnl How to use the Lol Engine inside this tree
  207. AM_CPPFLAGS="${AM_CPPFLAGS} -I\$(lol_srcdir)/lol-core/include"
  208. AM_CPPFLAGS="${AM_CPPFLAGS} -I\$(lol_srcdir)/src"
  209. AM_CPPFLAGS="${AM_CPPFLAGS} -DLOL_CONFIG_SOURCESUBDIR=\\\"\$(subdir)\\\""
  210. AM_CPPFLAGS="${AM_CPPFLAGS} ${LOL_CFLAGS}"
  211. AM_LDFLAGS="${AM_LDFLAGS} ${LOL_DEPS}"
  212. AM_LDFLAGS="${AM_LDFLAGS} ${LOL_LIBS}"
  213. dnl Extra flags
  214. AC_SUBST(LOL_CFLAGS)
  215. AC_SUBST(LOL_LIBS)
  216. AC_SUBST(LOL_DEPS)
  217. AC_SUBST(LOL_LUA_DEPS)
  218. AC_SUBST(AM_CFLAGS)
  219. AC_SUBST(AM_CPPFLAGS)
  220. AC_SUBST(AM_CXXFLAGS)
  221. AC_SUBST(AM_LDFLAGS)
  222. ]) # LOL_AC_FINI