[PATCH vkd3d 5/5] build: Allow building without libvulkan.
Zebediah Figura
zfigura at codeweavers.com
Fri Apr 1 16:01:14 CDT 2022
Disable tests in this case, and do not attempt to load libvulkan from within
vkd3d itself.
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
Should libvulkan support be explicitly disabled with a configure argument
instead?
configure.ac | 15 ++++++++------
include/vkd3d.h | 5 ++++-
libs/vkd3d/device.c | 6 ++++++
m4/check-vulkan.m4 | 3 +--
m4/notice.m4 | 49 +++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 69 insertions(+), 9 deletions(-)
create mode 100644 m4/notice.m4
diff --git a/configure.ac b/configure.ac
index a58e453f3..33098951a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -13,11 +13,9 @@ AC_ARG_WITH([spirv-tools], AS_HELP_STRING([--with-spirv-tools],
[Build with SPIRV-Tools library (default: disabled)]))
AC_ARG_WITH([xcb], AS_HELP_STRING([--with-xcb], [Build with XCB library (default: test)]))
AC_ARG_ENABLE([demos],
- AS_HELP_STRING([--enable-demos], [Build demo programs (default: disabled)]),,
- [enable_demos=no])
+ AS_HELP_STRING([--enable-demos], [Build demo programs (default: disabled)]))
AC_ARG_ENABLE([tests],
- AS_HELP_STRING([--enable-tests], [Build tests (default: enabled)]),,
- [enable_tests=yes])
+ AS_HELP_STRING([--enable-tests], [Build tests (default: enabled)]))
AC_USE_SYSTEM_EXTENSIONS
@@ -114,6 +112,9 @@ esac
AC_ARG_VAR([VULKAN_LIBS], [linker flags for the Vulkan library])
VKD3D_CHECK_VULKAN
+AS_IF([test "x$VULKAN_LIBS" = "x" -a "x$enable_demos" = "xyes"],
+ [AC_MSG_ERROR([No Vulkan library found. This is an error since --enable-demos was requested.])])
+VKD3D_WARNING_ENABLE(tests,[test "x$VULKAN_LIBS" = "x"],[No Vulkan library found, tests will be disabled.],[enable_tests])
AS_IF([test "x$with_ncurses" != "xno"],
[PKG_CHECK_MODULES([NCURSES], [ncurses],
@@ -176,8 +177,8 @@ AS_ECHO(["
Have SPIRV-Tools: ${with_spirv_tools}
Have xcb: ${HAVE_XCB}
- Building demos: ${enable_demos}
- Building tests: ${enable_tests}
+ Building demos: ${enable_demos:-no}
+ Building tests: ${enable_tests:-yes}
Building documentation: ${HAVE_DOCS}
"])
@@ -186,3 +187,5 @@ AS_IF([test "x$enable_tests" != "xno"], [AS_ECHO([" Cross-compiling tests: ${HA
AS_IF([test "x$CROSSTARGET32" != "xno"], [AS_ECHO([" Using 32-bit cross compiler: $CROSSCC32"])])
AS_IF([test "x$CROSSTARGET64" != "xno"], [AS_ECHO([" Using 64-bit cross compiler: $CROSSCC64"])])
AS_ECHO([])
+
+VKD3D_PRINT_MESSAGES
diff --git a/include/vkd3d.h b/include/vkd3d.h
index bce3c6e4b..b7f49835b 100644
--- a/include/vkd3d.h
+++ b/include/vkd3d.h
@@ -81,7 +81,10 @@ struct vkd3d_instance_create_info
PFN_vkd3d_join_thread pfn_join_thread;
size_t wchar_size;
- /* If set to NULL, libvkd3d loads libvulkan. */
+ /**
+ * If set to NULL, and libvulkan was available at build time, libvkd3d will
+ * attempt to load libvulkan.
+ */
PFN_vkGetInstanceProcAddr pfn_vkGetInstanceProcAddr;
const char * const *instance_extensions;
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index d23062d09..985fb3f80 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -477,6 +477,7 @@ static HRESULT vkd3d_init_vk_global_procs(struct vkd3d_instance *instance,
if (!vkGetInstanceProcAddr)
{
+#ifdef SONAME_LIBVULKAN
if (!(instance->libvulkan = vkd3d_dlopen(SONAME_LIBVULKAN)))
{
ERR("Failed to load libvulkan: %s.\n", vkd3d_dlerror());
@@ -490,6 +491,11 @@ static HRESULT vkd3d_init_vk_global_procs(struct vkd3d_instance *instance,
instance->libvulkan = NULL;
return E_FAIL;
}
+#else
+ ERR("No function pointer for vkGetInstanceProcAddr was provided,\n");
+ ERR("and libvulkan was not available at build time.\n");
+ return E_FAIL;
+#endif
}
else
{
diff --git a/m4/check-vulkan.m4 b/m4/check-vulkan.m4
index 756f61a0e..fa6f9dbc3 100644
--- a/m4/check-vulkan.m4
+++ b/m4/check-vulkan.m4
@@ -8,8 +8,7 @@ VKD3D_CHECK_SONAME([vulkan], [vkGetInstanceProcAddr],
[VKD3D_CHECK_SONAME([MoltenVK], [vkGetInstanceProcAddr],
[VULKAN_LIBS="$VULKAN_LIBS -lMoltenVK"
AC_DEFINE_UNQUOTED([SONAME_LIBVULKAN],
- ["$ac_cv_lib_soname_MoltenVK"])],
- [AC_MSG_ERROR([libvulkan and libMoltenVK not found.])],
+ ["$ac_cv_lib_soname_MoltenVK"])],,
[$VULKAN_LIBS])],
[$VULKAN_LIBS])],
[$VULKAN_LIBS])
diff --git a/m4/notice.m4 b/m4/notice.m4
new file mode 100644
index 000000000..4e788902b
--- /dev/null
+++ b/m4/notice.m4
@@ -0,0 +1,49 @@
+dnl
+dnl Copyright 2002 Alexandre Julliard
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+dnl
+dnl As a special exception to the GNU Lesser General Public License,
+dnl if you distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it
+dnl under the same distribution terms that you use for the rest of
+dnl that program.
+
+
+
+dnl **** Add a message to the list displayed at the end ****
+dnl
+dnl Usage: VKD3D_WARNING(warning)
+dnl Usage: VKD3D_WARNING_ENABLE(enable_flag, test, warning, enable)
+dnl Usage: VKD3D_PRINT_MESSAGES
+dnl
+AC_DEFUN([VKD3D_WARNING],[AS_VAR_APPEND([vkd3d_warnings],["|$1"])])
+
+AC_DEFUN([VKD3D_WARNING_ENABLE],[AS_IF([$2],[case "x$enable_$1" in
+ x) VKD3D_WARNING([$3]) ;;
+ xno) ;;
+ *) AC_MSG_ERROR([$3
+This is an error since --enable-$1 was requested.]) ;;
+esac
+m4_ifval([$4],[$4=${$4:-no}])])])
+
+AC_DEFUN([VKD3D_PRINT_MESSAGES],[ac_save_IFS="$IFS"
+IFS="|"
+for msg in $vkd3d_warnings; do
+ IFS="$ac_save_IFS"
+ AS_VAR_IF([msg],[],,[echo >&2
+ AC_MSG_WARN([$msg])])
+done
+IFS="$ac_save_IFS"])
--
2.35.1
More information about the wine-devel
mailing list