Source: vulkan
Version: 1.1.73+dfsg-1
Severity: important
Tags: ftbfs, patch
User: debian-h...@lists.debian.org, debian-k...@lists.debian.org
Usertags: hurd-i386, kfreebsd-any
Hello,
Currently vulkan is not available on GNU/Hurd and GNU/kFreeBSD due to
lack of porting to these architectures. Attached is a patch,
debian_control.diff, to make the libwayland-dev dependency linux-only
and add hurd, kfreebsd to the Architecture field of the packages.
The remaining patches:
CMakeLists.txt.diff
demos_CMakeLists.txt.diff
demos_smoke_CMakeLists.txt.diff
external_glslang_External_spirv-tools_CMakeLists.txt.diff
icd_CMakeLists.txt.diff
layers_CMakeLists.txt.diff
loader_CMakeLists.txt.diff
loader_loader.c.diff
loader_vk_loader_platform.h.diff
tests_CMakeLists.txt.diff
are mainly patches for various CMakeLists.txt files. The last patch is
not tested yet since the package build does not run tests.
Vulkan has been built successfully with the attached patches on hurd-
i386 and kfreebsd-amd64 boxes.
This package is important to have available due to the build dependency
chain of wine-development:
wine-development -> libvkd3d-dev -> libvulkan-dev
Thanks!
--- a/debian/control 2018-08-22 07:52:50.000000000 +0200
+++ b/debian/control 2018-08-22 08:03:31.000000000 +0200
@@ -4,7 +4,7 @@
Uploaders: Timo Aaltonen <tjaal...@debian.org>
Build-Depends: debhelper (>= 9),
cmake,
- libwayland-dev,
+ libwayland-dev [linux-any],
libx11-dev,
libxcb1-dev,
libxrandr-dev,
@@ -20,7 +20,7 @@
Vcs-Browser: https://salsa.debian.org/xorg-team/vulkan/vulkan.git
Package: libvulkan1
-Architecture: linux-any
+Architecture: linux-any kfreebsd-any hurd-any
Depends: ${shlibs:Depends}, ${misc:Depends}
Breaks: vulkan-loader,
libvulkan-dev (<< 1.1.70+dfsg1-2),
@@ -37,7 +37,7 @@
Package: libvulkan-dev
Section: libdevel
-Architecture: linux-any
+Architecture: linux-any kfreebsd-any hurd-any
Depends:
libvulkan1 (= ${binary:Version}),
${misc:Depends},
@@ -53,7 +53,7 @@
This package includes files needed for development.
Package: vulkan-utils
-Architecture: linux-any
+Architecture: linux-any kfreebsd-any hurd-any
Section: graphics
Depends: ${shlibs:Depends}, ${misc:Depends},
libvulkan1,
Index: vulkan-1.1.73+dfsg/demos/CMakeLists.txt
===================================================================
--- vulkan-1.1.73+dfsg.orig/demos/CMakeLists.txt
+++ vulkan-1.1.73+dfsg/demos/CMakeLists.txt
@@ -73,7 +73,71 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux
include_directories ("${PROJECT_SOURCE_DIR}/icd/common")
link_libraries(${API_LOWERCASE} m)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
- add_definitions(-DVK_USE_PLATFORM_MACOS_MVK)
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD")
+ if (NOT DEMOS_WSI_SELECTION)
+ set(DEMOS_WSI_SELECTION "XCB")
+ endif()
+
+ if (DEMOS_WSI_SELECTION STREQUAL "XCB")
+ if (NOT BUILD_WSI_XCB_SUPPORT)
+ message( FATAL_ERROR "Selected XCB for demos build but not building Xcb support" )
+ endif()
+ set(DEMO_INCLUDE_DIRS
+ ${XCB_INCLUDE_DIRS}
+ ${DEMO_INCLUDE_DIRS}
+ )
+ link_libraries(${XCB_LIBRARIES})
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
+ elseif(DEMOS_WSI_SELECTION STREQUAL "XLIB")
+ if (NOT BUILD_WSI_XLIB_SUPPORT)
+ message( FATAL_ERROR "Selected XLIB for demos build but not building Xlib support" )
+ endif()
+ set(DEMO_INCLUDE_DIRS
+ ${X11_INCLUDE_DIR}
+ ${DEMO_INCLUDE_DIRS}
+ )
+ link_libraries(${X11_LIBRARIES})
+ add_definitions(-DVK_USE_PLATFORM_XLIB_KHR)
+ elseif(DEMOS_WSI_SELECTION STREQUAL "DISPLAY")
+ add_definitions(-DVK_USE_PLATFORM_DISPLAY_KHR)
+ else()
+ message( FATAL_ERROR "Unrecognized value for DEMOS_WSI_SELECTION: ${DEMOS_WSI_SELECTION}" )
+ endif()
+ include_directories ("${PROJECT_SOURCE_DIR}/icd/common")
+ link_libraries(${API_LOWERCASE} m)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "GNU")
+ if (NOT DEMOS_WSI_SELECTION)
+ set(DEMOS_WSI_SELECTION "XCB")
+ endif()
+
+ if (DEMOS_WSI_SELECTION STREQUAL "XCB")
+ if (NOT BUILD_WSI_XCB_SUPPORT)
+ message( FATAL_ERROR "Selected XCB for demos build but not building Xcb support" )
+ endif()
+ set(DEMO_INCLUDE_DIRS
+ ${XCB_INCLUDE_DIRS}
+ ${DEMO_INCLUDE_DIRS}
+ )
+ link_libraries(${XCB_LIBRARIES})
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
+ elseif(DEMOS_WSI_SELECTION STREQUAL "XLIB")
+ if (NOT BUILD_WSI_XLIB_SUPPORT)
+ message( FATAL_ERROR "Selected XLIB for demos build but not building Xlib support" )
+ endif()
+ set(DEMO_INCLUDE_DIRS
+ ${X11_INCLUDE_DIR}
+ ${DEMO_INCLUDE_DIRS}
+ )
+ link_libraries(${X11_LIBRARIES})
+ add_definitions(-DVK_USE_PLATFORM_XLIB_KHR)
+ elseif(DEMOS_WSI_SELECTION STREQUAL "DISPLAY")
+ add_definitions(-DVK_USE_PLATFORM_DISPLAY_KHR)
+ else()
+ message( FATAL_ERROR "Unrecognized value for DEMOS_WSI_SELECTION: ${DEMOS_WSI_SELECTION}" )
+ endif()
+ include_directories ("${PROJECT_SOURCE_DIR}/icd/common")
+ link_libraries(${API_LOWERCASE} m)
else()
message(FATAL_ERROR "Unsupported Platform!")
endif()
@@ -171,6 +235,10 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux"
if(INSTALL_LVL_FILES)
install(TARGETS ${API_LOWERCASE}info DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
+elseif(${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR ${CMAKE_SYSTEM_NAME} STREQUAL "GNU")
+ if(INSTALL_LVL_FILES)
+ install(TARGETS ${API_LOWERCASE}info DESTINATION ${CMAKE_INSTALL_BINDIR})
+ endif()
endif()
######################################################################################
--- a/demos/smoke/CMakeLists.txt 2018-04-27 13:24:19.000000000 +0200
+++ b/demos/smoke/CMakeLists.txt 2018-08-23 14:39:46.000432000 +0200
@@ -83,6 +83,28 @@
list(APPEND includes PRIVATE ${WAYLAND_CLIENT_INCLUDE_DIR})
list(APPEND libraries PRIVATE ${WAYLAND_CLIENT_LIBRARIES})
endif()
+elseif(${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD")
+ list(APPEND libraries PRIVATE -ldl -lrt)
+
+ if(BUILD_WSI_XCB_SUPPORT AND DEMOS_WSI_SELECTION STREQUAL "XCB")
+ find_package(XCB REQUIRED)
+
+ list(APPEND sources ShellXcb.cpp ShellXcb.h)
+ list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_XCB_KHR)
+ list(APPEND includes PRIVATE ${XCB_INCLUDES})
+ list(APPEND libraries PRIVATE ${XCB_LIBRARIES})
+ endif()
+elseif(${CMAKE_SYSTEM_NAME} STREQUAL "GNU")
+ list(APPEND libraries PRIVATE -ldl -lrt)
+
+ if(BUILD_WSI_XCB_SUPPORT AND DEMOS_WSI_SELECTION STREQUAL "XCB")
+ find_package(XCB REQUIRED)
+
+ list(APPEND sources ShellXcb.cpp ShellXcb.h)
+ list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_XCB_KHR)
+ list(APPEND includes PRIVATE ${XCB_INCLUDES})
+ list(APPEND libraries PRIVATE ${XCB_LIBRARIES})
+ endif()
elseif(APPLE)
set(LIBRARIES)
list(APPEND sources
Index: vulkan-1.1.73+dfsg/external/glslang/External/spirv-tools/CMakeLists.txt
===================================================================
--- vulkan-1.1.73+dfsg.orig/external/glslang/External/spirv-tools/CMakeLists.txt
+++ vulkan-1.1.73+dfsg/external/glslang/External/spirv-tools/CMakeLists.txt
@@ -46,6 +46,10 @@ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "
set(SPIRV_TIMER_ENABLED ON)
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
add_definitions(-DSPIRV_FREEBSD)
+elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "kFreeBSD")
+ add_definitions(-DSPIRV_KFREEBSD)
+elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "GNU")
+ add_definitions(-DSPIRV_GNU)
else()
message(FATAL_ERROR "Your platform '${CMAKE_SYSTEM_NAME}' is not supported!")
endif()
Index: vulkan-1.1.73+dfsg/icd/CMakeLists.txt
===================================================================
--- vulkan-1.1.73+dfsg.orig/icd/CMakeLists.txt
+++ vulkan-1.1.73+dfsg/icd/CMakeLists.txt
@@ -23,6 +23,22 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
add_definitions(-DVK_USE_PLATFORM_MACOS_MVK)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD")
+ if (BUILD_WSI_XCB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XCB_KHX)
+ endif()
+
+ if (BUILD_WSI_XLIB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_KHX -DVK_USE_PLATFORM_XLIB_XRANDR_EXT)
+ endif()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "GNU")
+ if (BUILD_WSI_XCB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XCB_KHX)
+ endif()
+
+ if (BUILD_WSI_XLIB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_KHX -DVK_USE_PLATFORM_XLIB_XRANDR_EXT)
+ endif()
else()
message(FATAL_ERROR "Unsupported Platform!")
endif()
Index: vulkan-1.1.73+dfsg/layers/CMakeLists.txt
===================================================================
--- vulkan-1.1.73+dfsg.orig/layers/CMakeLists.txt
+++ vulkan-1.1.73+dfsg/layers/CMakeLists.txt
@@ -26,6 +26,22 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwi
if(CMAKE_GENERATOR MATCHES "^Xcode.*")
add_custom_target(mk_layer_config_dir ALL COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
endif()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD")
+ if (BUILD_WSI_XCB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XCB_KHX)
+ endif()
+
+ if (BUILD_WSI_XLIB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_KHX -DVK_USE_PLATFORM_XLIB_XRANDR_EXT)
+ endif()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "GNU")
+ if (BUILD_WSI_XCB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XCB_KHX)
+ endif()
+
+ if (BUILD_WSI_XLIB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_KHX -DVK_USE_PLATFORM_XLIB_XRANDR_EXT)
+ endif()
else()
message(FATAL_ERROR "Unsupported Platform!")
endif()
@@ -117,6 +133,7 @@ elseif(APPLE)
endif()
endif()
# If a layer has a direct dependency on a project with the same name, use it.
+if ((NOT (CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD")) AND (NOT (CMAKE_SYSTEM_NAME STREQUAL "GNU")))
if ((Win32) OR (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)))
foreach (config_file ${LAYER_JSON_FILES_WITH_DEPENDENCIES})
add_dependencies(${config_file}-json ${config_file})
@@ -126,6 +143,7 @@ if ((Win32) OR (NOT (CMAKE_CURRENT_SOURC
add_dependencies(${config_file}-json VkLayer_utils)
endforeach(config_file)
endif()
+endif()
# Add targets for JSON file install on Linux.
# Need to remove the "./" from the library path before installing to /etc.
Index: vulkan-1.1.73+dfsg/loader/CMakeLists.txt
===================================================================
--- vulkan-1.1.73+dfsg.orig/loader/CMakeLists.txt
+++ vulkan-1.1.73+dfsg/loader/CMakeLists.txt
@@ -8,7 +8,7 @@ include_directories(
# Check for the existance of the secure_getenv or __secure_getenv commands
include(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(secure_getenv HAVE_SECURE_GETENV)
-CHECK_FUNCTION_EXISTS(__secure_getenv HAVE___SECURE_GETENV)
+#CHECK_FUNCTION_EXISTS(__secure_getenv HAVE___SECURE_GETENV)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/loader_cmake_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/loader_cmake_config.h)
# Fetch header version from vulkan_core.h
@@ -51,6 +51,22 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
add_definitions(-DVK_USE_PLATFORM_MACOS_MVK)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD")
+ if (BUILD_WSI_XCB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
+ endif()
+
+ if (BUILD_WSI_XLIB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_XRANDR_EXT)
+ endif()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "GNU")
+ if (BUILD_WSI_XCB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
+ endif()
+
+ if (BUILD_WSI_XLIB_SUPPORT)
+ add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_XRANDR_EXT)
+ endif()
else()
message(FATAL_ERROR "Unsupported Platform!")
endif()
Index: vulkan-1.1.73+dfsg/loader/loader.c
===================================================================
--- vulkan-1.1.73+dfsg.orig/loader/loader.c
+++ vulkan-1.1.73+dfsg/loader/loader.c
@@ -213,7 +213,7 @@ void *loader_device_heap_realloc(const s
}
// Environment variables
-#if defined(__linux__) || defined(__APPLE__)
+#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD_kernel__) || defined(__GNU__)
static inline char *loader_getenv(const char *name, const struct loader_instance *inst) {
// No allocation of memory necessary for Linux, but we should at least touch
--- a/loader/vk_loader_platform.h 2018-04-27 13:24:19.000000000 +0200
+++ b/loader/vk_loader_platform.h 2018-08-23 10:48:57.203057000 +0200
@@ -31,7 +31,7 @@
#include "vulkan/vk_platform.h"
#include "vulkan/vk_sdk_platform.h"
-#if defined(__linux__) || defined(__APPLE__)
+#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD_kernel__) || defined(__GNU__)
/* Linux-specific common code: */
// Headers:
--- a/tests/CMakeLists.txt 2018-04-27 13:24:19.000000000 +0200
+++ b/tests/CMakeLists.txt 2018-08-22 09:53:02.000000000 +0200
@@ -26,6 +26,8 @@
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
add_definitions(-DVK_USE_PLATFORM_MACOS_MVK)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "GNU")
+ add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
else()
message(FATAL_ERROR "Unsupported Platform!")
endif()