vkd3d: Use WIDL_C_INLINE_WRAPPERS.
[vkd3d.git] / configure.ac
blob10dd71571a25a5ac619c10e2faf2d026ca5d109b
1 AC_PREREQ([2.69])
2 AC_INIT([vkd3d],[1.11])
4 AC_CONFIG_AUX_DIR([bin])
5 AC_CONFIG_MACRO_DIR([m4])
6 AC_CONFIG_HEADERS(include/config.h)
8 AC_ARG_VAR([WIDL], [widl IDL compiler])
9 AC_ARG_VAR([CROSSCC32], [32-bit Windows cross compiler])
10 AC_ARG_VAR([CROSSCC64], [64-bit Windows cross compiler])
11 AC_ARG_WITH([ncurses], AS_HELP_STRING([--with-ncurses], [Build with the ncurses library (default: test)]))
12 AC_ARG_WITH([opengl], AS_HELP_STRING([--with-opengl], [Build with the OpenGL library (default: test)]))
13 AC_ARG_WITH([spirv-tools], AS_HELP_STRING([--with-spirv-tools],
14                                           [Build with SPIRV-Tools library (default: disabled)]))
15 AC_ARG_WITH([xcb], AS_HELP_STRING([--with-xcb], [Build with XCB library (default: test)]))
16 AC_ARG_ENABLE([demos],
17               AS_HELP_STRING([--enable-demos], [Build demo programs (default: disabled)]),,
18               [enable_demos=no])
19 AC_ARG_ENABLE([tests],
20               AS_HELP_STRING([--enable-tests], [Build tests (default: enabled)]),,
21               [enable_tests=yes])
23 AC_USE_SYSTEM_EXTENSIONS
25 dnl Check for progs
26 AM_PROG_AR
27 AC_PROG_CC
28 AM_PROG_CC_C_O
29 AC_PROG_SED
30 AC_PROG_MKDIR_P
31 VKD3D_PROG_WIDL(3, 21)
32 AS_IF([test "x$WIDL" = "xno"], [AC_MSG_WARN([widl is required to build header files.])])
34 AC_CHECK_PROGS([FLEX], [flex], [none])
35 AS_IF([test "$FLEX" = "none"], [AC_MSG_ERROR([no suitable flex found. Please install the 'flex' package.])])
36 AC_ARG_VAR([LFLAGS], [extra flags for flex])
38 AC_CHECK_PROGS([BISON], [bison], [none])
39 AS_IF([test "$BISON" = "none"], [AC_MSG_ERROR([no suitable bison found. Please install the 'bison' package.])])
40 AC_ARG_VAR([YFLAGS], [extra flags for bison])
42 DX_PS_FEATURE([OFF])
43 DX_INIT_DOXYGEN([vkd3d], [Doxyfile], [doc])
44 AC_CONFIG_FILES([Doxyfile])
46 AM_INIT_AUTOMAKE([1.11 foreign silent-rules subdir-objects no-dist-gzip dist-xz -Wall -Werror])
47 AM_MAINTAINER_MODE([enable])
48 AM_SILENT_RULES([yes])
50 LT_PREREQ([2.4.2])
51 LT_INIT([win32-dll])
53 gl_LD_VERSION_SCRIPT
55 dnl Check compiler specific flags
56 AC_SUBST([VKD3D_CFLAGS])
57 AS_IF([test "x${GCC}" = "xyes"],
58       [VKD3D_CFLAGS="-Wall -pipe -D_WIN32_WINNT=0x0600"
59       VKD3D_CHECK_CFLAGS([-std=c99])
60       VKD3D_CHECK_CFLAGS([-fvisibility=hidden])
61       VKD3D_CHECK_CFLAGS([-Wdeclaration-after-statement])
62       VKD3D_CHECK_CFLAGS([-Wempty-body])
63       VKD3D_CHECK_CFLAGS([-Wenum-conversion])
64       VKD3D_CHECK_CFLAGS([-Wimplicit-fallthrough])
65       VKD3D_CHECK_CFLAGS([-Winit-self])
66       VKD3D_CHECK_CFLAGS([-Wmissing-prototypes])
67       VKD3D_CHECK_CFLAGS([-Wpointer-arith])
68       VKD3D_CHECK_CFLAGS([-Wshadow])
69       VKD3D_CHECK_CFLAGS([-Wshift-overflow=2])
70       VKD3D_CHECK_CFLAGS([-Wtype-limits])
71       VKD3D_CHECK_CFLAGS([-Wunused-but-set-parameter])
72       VKD3D_CHECK_CFLAGS([-Wvla])
73       VKD3D_CHECK_CFLAGS([-Wwrite-strings])
74       VKD3D_CHECK_CFLAGS([-Wl,--no-undefined])])
76 dnl Check for cross compilers
77 VKD3D_CHECK_MINGW32_PROG([CROSSCC32], [CROSSTARGET32], [no])
78 VKD3D_CHECK_MINGW64_PROG([CROSSCC64], [CROSSTARGET64], [no])
80 dnl Check for headers
81 AC_CHECK_HEADERS([dlfcn.h \
82                   vulkan/vulkan.h \
83                   vulkan/spirv.h vulkan/GLSL.std.450.h \
84                   spirv/unified1/spirv.h spirv/unified1/GLSL.std.450.h])
85 AS_IF([test "x$ac_cv_header_vulkan_vulkan_h" != "xyes"], [AC_MSG_ERROR([vulkan.h not found.])])
86 AS_IF([test "x$ac_cv_header_spirv_unified1_spirv_h" != "xyes" \
87        -a "x$ac_cv_header_vulkan_spirv_h" != "xyes"],
88       [AC_MSG_ERROR([spirv.h not found.])])
89 AS_IF([test "x$ac_cv_header_spirv_unified1_GLSL_std_450_h" != "xyes" \
90        -a "x$ac_cv_header_vulkan_GLSL_std_450_h" != "xyes"],
91       [AC_MSG_ERROR([GLSL.std.450.h not found.])])
93 VKD3D_CHECK_VULKAN_HEADER_VERSION([228], [AC_MSG_ERROR([Vulkan headers are too old, 1.3.228 is required.])])
95 AC_CHECK_DECL([SpvCapabilityDemoteToHelperInvocationEXT],, [AC_MSG_ERROR([SPIR-V headers are too old.])], [
96 #ifdef HAVE_SPIRV_UNIFIED1_SPIRV_H
97 # include "spirv/unified1/spirv.h"
98 #else
99 # include "vulkan/spirv.h"
100 #endif])
102 AC_CHECK_DECLS([program_invocation_name],,,[#include <errno.h>])
104 dnl Check for libraries
105 m4_ifdef([PKG_PROG_PKG_CONFIG], [PKG_PROG_PKG_CONFIG], [m4_fatal([pkg-config autoconf macros not found.])])
107 AC_CHECK_LIB([m], [ceilf])
109 AC_SUBST([DL_LIBS])
110 AC_CHECK_LIB([dl], [dlopen],
111              [DL_LIBS="-ldl"],
112              [AS_IF([test "$ac_cv_header_dlfnc_h" = "xyes"], [AC_MSG_ERROR([libdl not found.])])])
114 case $host_os in
115   mingw32*) ;;
116   *) AC_CHECK_HEADERS([pthread.h])
117      AS_IF([test "x$ac_cv_header_pthread_h" != "xyes"], [AC_MSG_ERROR([pthread.h not found.])])
118      AC_ARG_VAR([PTHREAD_LIBS], [linker flags for pthreads])
119      VKD3D_CHECK_PTHREAD
120      VKD3D_CHECK_PTHREAD_SETNAME_NP
121      ;;
122 esac
124 AC_ARG_VAR([SONAME_LIBVULKAN], [shared object name for the Vulkan library])
125 AC_ARG_VAR([VULKAN_LIBS], [linker flags for the Vulkan library])
126 AS_IF([test "x$SONAME_LIBVULKAN" = "x"],
127       [VKD3D_CHECK_VULKAN],
128       [AC_DEFINE_UNQUOTED([SONAME_LIBVULKAN],["$SONAME_LIBVULKAN"],[Define to the shared object name of the Vulkan library.])])
130 AC_ARG_VAR([SONAME_LIBDXCOMPILER], [shared object name for the dxcompiler library])
131 AC_ARG_VAR([DXCOMPILER_LIBS], [linker flags for the dxcompiler library])
132 AS_IF([test "x$SONAME_LIBDXCOMPILER" = "x"],
133       [VKD3D_CHECK_SONAME([dxcompiler], [DxcCreateInstance], [HAVE_DXCOMPILER=yes], [HAVE_DXCOMPILER=no], [$DXCOMPILER_LIBS])],
134       [AC_DEFINE_UNQUOTED([SONAME_LIBDXCOMPILER],["$SONAME_LIBDXCOMPILER"],[Define to the shared object name of the dxcompiler library.])])
136 AS_IF([test "x$with_ncurses" != "xno"],
137       [PKG_CHECK_MODULES([NCURSES], [ncurses],
138                          [AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if you have ncurses.]) with_ncurses=yes],
139                          [with_ncurses=no])])
140 AS_IF([test "x$with_opengl" != "xno"],
141       [PKG_CHECK_MODULES([OPENGL], [egl opengl],
142                          [AC_DEFINE([HAVE_OPENGL], [1], [Define to 1 if you have OpenGL.]) with_opengl=yes],
143                          [with_opengl=no])])
144 AS_IF([test "x$with_spirv_tools" = "xyes"],
145       [PKG_CHECK_MODULES([SPIRV_TOOLS], [SPIRV-Tools-shared],
146       [AC_DEFINE([HAVE_SPIRV_TOOLS], [1], [Define to 1 if you have SPIRV-Tools.])])],
147       [with_spirv_tools=no])
149 HAVE_XCB=no
150 AS_IF([test "x$with_xcb" != "xno"],
151       [PKG_CHECK_MODULES([XCB], [xcb xcb-event xcb-icccm xcb-keysyms],
152                                 [AC_DEFINE([HAVE_XCB], [1], [Define to 1 if you have libxcb.])
153                                 HAVE_XCB=yes],
154                                 [HAVE_XCB=no])])
156 dnl Check for functions
157 VKD3D_CHECK_FUNC([HAVE_BUILTIN_CLZ], [__builtin_clz], [__builtin_clz(0)])
158 VKD3D_CHECK_FUNC([HAVE_BUILTIN_POPCOUNT], [__builtin_popcount], [__builtin_popcount(0)])
159 VKD3D_CHECK_FUNC([HAVE_BUILTIN_ADD_OVERFLOW], [__builtin_add_overflow], [__builtin_add_overflow(0, 0, (int *)0)])
160 VKD3D_CHECK_FUNC([HAVE_SYNC_ADD_AND_FETCH], [__sync_add_and_fetch], [__sync_add_and_fetch((int *)0, 0)])
161 VKD3D_CHECK_FUNC([HAVE_SYNC_BOOL_COMPARE_AND_SWAP], [__sync_bool_compare_and_swap], [__sync_bool_compare_and_swap((int *)0, 0, 0)])
162 VKD3D_CHECK_FUNC([HAVE_ATOMIC_EXCHANGE_N], [__atomic_exchange_n], [__atomic_exchange_n((int *)0, 0, 0)])
163 AC_CHECK_FUNCS([gettid])
165 dnl Makefiles
166 case $host_os in
167   mingw32*)
168       AC_SUBST([DEMO_LIBS],["-ld3d12 -ldxgi -lgdi32"])
169       AC_SUBST([DEMO_CFLAGS],["-municode"])
170       ;;
171   *) AS_IF([test "x$enable_demos" = "xyes" -a "x$HAVE_XCB" != "xyes"],
172       [AC_MSG_ERROR([libxcb is required for demos.])])
173       AC_SUBST([DEMO_LIBS],[$XCB_LIBS])
174       AC_SUBST([DEMO_CFLAGS],[$XCB_CFLAGS])
175       ;;
176 esac
177 AM_CONDITIONAL([BUILD_DEMOS], [test "x$enable_demos" = "xyes"])
178 AM_CONDITIONAL([BUILD_DOC], [test $DX_FLAG_doc = 1])
179 AM_CONDITIONAL([BUILD_TESTS], [test "x$enable_tests" != "xno"])
180 AM_CONDITIONAL([HAVE_WIDL], [test "x$WIDL" != "xno"])
181 AM_CONDITIONAL([HAVE_CROSSTARGET32], [test "x$CROSSTARGET32" != "xno"])
182 AM_CONDITIONAL([HAVE_CROSSTARGET64], [test "x$CROSSTARGET64" != "xno"])
184 AC_CONFIG_FILES([Makefile])
185 AC_OUTPUT
187 dnl Output configuration summary
188 AS_IF([test "x$CROSSTARGET32" != "xno" -o "x$CROSSTARGET64" != "xno"],
189       [HAVE_CROSSTARGET=yes], [HAVE_CROSSTARGET=no])
190 AS_IF([test $DX_FLAG_doc = 1], [HAVE_DOCS=yes], [HAVE_DOCS=no])
192 AS_IF([test "x$enable_demos" != "xyes" -a "x$enable_tests" = "xno"], [CROSSTARGET64=no CROSSTARGET32=no])
194 AS_ECHO(["
195   Configuration summary for $PACKAGE $VERSION
197   widl: ${WIDL}
199   Have ncurses: ${with_ncurses}
200   Have OpenGL: ${with_opengl}
201   Have SPIRV-Tools: ${with_spirv_tools}
202   Have xcb: ${HAVE_XCB}
203   Have dxcompiler: ${HAVE_DXCOMPILER}
205   Building demos: ${enable_demos}
206   Building tests: ${enable_tests}
207   Building documentation: ${HAVE_DOCS}
210 AS_IF([test "x$enable_demos" = "xyes"], [AS_ECHO(["  Cross-compiling demos: ${HAVE_CROSSTARGET}"])])
211 AS_IF([test "x$enable_tests" != "xno"], [AS_ECHO(["  Cross-compiling tests: ${HAVE_CROSSTARGET}"])])
212 AS_IF([test "x$CROSSTARGET32" != "xno"], [AS_ECHO(["    Using 32-bit cross compiler: $CROSSCC32"])])
213 AS_IF([test "x$CROSSTARGET64" != "xno"], [AS_ECHO(["    Using 64-bit cross compiler: $CROSSCC64"])])
214 AS_ECHO([])