From ccf086c39f734a000aa3a2fac034f0620021fbdf Mon Sep 17 00:00:00 2001 From: vimene Date: Thu, 5 Feb 2026 10:31:47 +0100 Subject: added back windows cross-compilation Makefile.am is too ugly, but I don't have a better solution right now. - fused Makefile.am and src/Makefile.am - adding back windows cross-compilation - improved README.md a lot - added configure option to enable debug, which greatly simplifies development when writing shaders - removed dependency on LunarG's Vulkan SDK by having dependency only on Vulkan headers, library and slangc - removed print C++ header because I have an old MinGW which doesn't support it. It will be restored in the future - make every assets path relative to be able to build anywhere and run elsewhere - moved stb_image.h inside source directory instead of making it a dependency, which is more aligned with stb philosophy - moved assets inside source code to make it easy to compile and run the engine - improved configure.ac by checking Vulkan headers version directly in the configure script instead of within C code, which allows us to also do theses checks when cross-compiling --- configure.ac | 103 ++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 37 deletions(-) (limited to 'configure.ac') diff --git a/configure.ac b/configure.ac index aae39c3..85c5752 100644 --- a/configure.ac +++ b/configure.ac @@ -5,62 +5,91 @@ AC_CONFIG_HEADERS([src/config.h]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([foreign subdir-objects]) -AC_CONFIG_FILES([Makefile src/Makefile]) +AC_CONFIG_FILES([Makefile]) AC_REQUIRE_AUX_FILE([tap-driver.sh]) AC_PROG_CXX +AC_PROG_AWK +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_PROG_MKDIR_P + +AC_CHECK_HEADERS([stdint.h]) + +AC_CHECK_HEADER_STDBOOL +AC_TYPE_INT16_T +AC_TYPE_INT32_T +AC_TYPE_SIZE_T +AC_TYPE_UINT16_T AC_TYPE_UINT32_T -AC_CHECK_FUNCS([floor setlocale]) +AC_TYPE_UINT64_T -dnl TODO: add check for Vulkan Utility Library +AC_CHECK_FUNCS([floor memset modf pow setlocale sqrt strtol]) -PKG_CHECK_MODULES([GLFW3], [glfw3 >= 3.3.10]) +AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], + [make every path of files not built relative to the source tree, unset NDEBUG])], + [use_debug=$enableval], + [use_debug=no]) +AM_CONDITIONAL([DEBUG], [test x"$use_debug" = xyes]) -dnl TODO: improve vulkan detection +dnl TODO: check if c++23 is supported -dnl TODO: sdk detection is too minimal -AC_MSG_CHECKING([for VULKAN_SDK]) -AS_IF([test "x$VULKAN_SDK" != x], [AC_MSG_RESULT([yes])], [ - AC_MSG_RESULT([no]) - AC_MSG_ERROR([VULKAN_SDK is not set. You have to source setup-env.sh from LunarG's Vulkan SDK before configuring.]) -]) +AC_CHECK_PROG([SLANGC], [slangc], [slangc]) +AS_VAR_IF([SLANGC], [], [AC_MSG_ERROR([slangc not found])]) +dnl TODO: check if slangc support Vulkan 1.4 + +PKG_CHECK_MODULES([GLFW3], [glfw3 >= 3.3.10]) +PKG_CHECK_MODULES([VULKAN], [vulkan]) +PKG_HAVE_DEFINE_WITH_MODULES([NCURSES], [ncurses >= 6.4.20230625]) AC_LANG([C]) CFLAGS_save="$CFLAGS" LIBS_save="$LIBS" -CFLAGS="$STB_CFLAGS" -LIBS="$LIBS $STB_LIBS" -AC_MSG_CHECKING([for STBI version 1]) -AC_RUN_IFELSE([AC_LANG_PROGRAM([ -#define STB_IMAGE_IMPLEMENTATION -#include -dnl -dnl we are not really checking for stbi version, this is to check if the header is truly included -dnl without problems -],[if (STBI_VERSION != 1) exit(1)])], [AC_MSG_RESULT([yes])], [ - AC_MSG_RESULT([no]) - AC_MSG_ERROR([STBI not found, or wrong version (1 required)]) -]) -AC_SUBST([STB_CFLAGS]) -AC_SUBST([STB_LIBS]) - +m4_define([vulkan_required_api_variant], [0]) +m4_define([vulkan_required_api_major], [1]) +m4_define([vulkan_required_api_minor], [4]) +m4_define([vulkan_required_api_patch], [313]) +m4_define([vulkan_required_api_str], + [variant ]m4_defn([vulkan_required_api_variant])[ version >= ]m4_defn([vulkan_required_api_major])[.]m4_defn([vulkan_required_api_minor])[.]m4_defn([vulkan_required_api_patch])) +AC_MSG_CHECKING([for Vulkan headers ]m4_defn([vulkan_required_api_str])) CFLAGS="$VULKAN_CFLAGS" LIBS="$LIBS $VULKAN_LIBS" -AC_MSG_CHECKING([for Vulkan version 1.4.313]) -AC_RUN_IFELSE([AC_LANG_PROGRAM([ -#include +AC_COMPUTE_INT([vulkan_api], [VK_HEADER_VERSION_COMPLETE], [ #include -],[if (VK_HEADER_VERSION_COMPLETE != VK_MAKE_API_VERSION(0, 1, 4, 313)) exit(1)])], [AC_MSG_RESULT([yes])], [ - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Vulkan not found, or wrong version (1.4.313 required)]) +], [AC_MSG_ERROR([cannot check Vulkan headers version])]) +AS_VAR_ARITH([vulkan_api_variant], [$vulkan_api \>\> 29]) +AS_VAR_ARITH([vulkan_api_major], [\( $vulkan_api \>\> 22 \) \& 127]) +AS_VAR_ARITH([vulkan_api_minor], [\( $vulkan_api \>\> 12 \) \& 1023]) +AS_VAR_ARITH([vulkan_api_patch], [$vulkan_api \& 4095]) +vulkan_version_ok=no +AS_VAR_ARITH([vulkan_version_cmp], [$vulkan_api_variant \!= ]m4_defn([vulkan_required_api_variant])) +AS_VAR_IF([vulkan_version_cmp], [0], [ + AS_VAR_ARITH([vulkan_version_cmp], [$vulkan_api_major \>= ]m4_defn([vulkan_required_api_major])) + AS_VAR_IF([vulkan_version_cmp], [1], [ + AS_VAR_ARITH([vulkan_version_cmp], [$vulkan_api_major \> ]m4_defn([vulkan_required_api_major])) + AS_VAR_IF([vulkan_version_cmp], [1], [vulkan_version_ok=yes], [ + AS_VAR_ARITH([vulkan_version_cmp], [$vulkan_api_minor \>= ]m4_defn([vulkan_required_api_minor])) + AS_VAR_IF([vulkan_version_cmp], [1], [ + AS_VAR_ARITH([vulkan_version_cmp], [$vulkan_api_minor \> ]m4_defn([vulkan_required_api_minor])) + AS_VAR_IF([vulkan_version_cmp], [1], [vulkan_version_ok=yes], [ + AS_VAR_ARITH([vulkan_version_cmp], [$vulkan_api_patch \>= ]m4_defn([vulkan_required_api_patch])) + AS_VAR_IF([vulkan_version_cmp], [1], [vulkan_version_ok=yes]) + ]) + ]) + ]) + ]) ]) -AC_SUBST([VULKAN_CFLAGS]) -AC_SUBST([VULKAN_LIBS]) +AS_VAR_IF([vulkan_version_ok], [yes], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR( + [Vulkan headers variant $vulkan_api_variant version $vulkan_api_major.$vulkan_api_minor.$vulkan_api_patch found, but ]m4_defn([vulkan_required_api_str])[ required]) + ]) CFLAGS="$CFLAGS_save" LIBS="$LIBS_save" -PKG_HAVE_DEFINE_WITH_MODULES([NCURSES], [ncurses >= 6.4.20230625]) - AC_OUTPUT -- cgit v1.2.3