Как мне настроить Vulkan для сидра? - emacs


1

Я работаю над недавно выпущенным Vulkan Tutorial в Clojure с CIDER, и я немного ударил. Пример проекта makefile работает отлично, но мне трудно перевести его в Clojure.

Мой файл build.boot просто задает пути :source-paths и добавляет LWJGL в зависимость:

(set-env!
 :source-paths #{"src"}
 :dependencies
 (let [lwjgl-version "3.0.0"]
   [[org.lwjgl/lwjgl lwjgl-version]
    [org.lwjgl/lwjgl-platform lwjgl-version :classifier "natives-linux"]]))

Затем в src/example/core.clj меня есть функция extension-count, использующая vkEnumerateInstanceExtensionProperties как показано в исходном примере:

(ns example.core
  (:import (org.lwjgl.vulkan VK10)))

(defn extension-count []
  (let [^String layer-name nil
        property-count (int-array 1)]
    (VK10/vkEnumerateInstanceExtensionProperties layer-name property-count nil)
    (first property-count)))

Теперь, из Bash, я могу установить соответствующие переменные среды LD_LIBRARY_PATH и VK_LAYER_PATH при запуске REPL:

$ VULKAN_SDK_PATH=~/VulkanSDK/1.0.21.1/x86_64 LD_LIBRARY_PATH=$VULKAN_SDK_PATH/lib VK_LAYER_PATH=$VULKAN_SDK_PATH/etc/explicit_layer.d boot repl
boot.user=> (require [example.core :refer [extension-count]])
nil
boot.user=> (extension-count)
4

Как вы можете видеть, все работает правильно. Но, конечно, когда я использую cider-jack-in на C-c M-j вместо этого, я получаю UnsatisfiedLinkError потому CIDER не устанавливает эти переменные:

boot.user> (import (java.util.function Consumer)
                   (org.lwjgl.system Configuration))
org.lwjgl.system.Configuration
boot.user> (Configuration/setDebugStreamConsumer
            (reify Consumer
              (accept [_ message]
                (println message))))
nil
boot.user> (require [example.core :refer [extension-count]])
nil
boot.user> (extension-count)
[LWJGL] Failed to load a library. Possible solutions:
    a) Set -Djava.library.path or -Dorg.lwjgl.librarypath to the directory that contains the shared libraries.
    b) Add the JAR(s) containing the shared libraries to the classpath.
[LWJGL] Enable debug mode with -Dorg.lwjgl.util.Debug=true for better diagnostics.
java.lang.UnsatisfiedLinkError: Failed to locate library: libvulkan.so.1

Должен ли я устанавливать java.library.path или org.lwjgl.librarypath, как это предложено в приведенном выше сообщении об ошибке, вместо LD_LIBRARY_PATH? Я могу установить любую из этих переменных из profile.boot:

(System/setProperty
 "java.library.path"
 (str (System/getProperty "user.home") "/VulkanSDK/1.0.21.1/x86_64/lib"))

Теперь, когда я снова попробую C-c M-j, он работает:

boot.user> (require [example.core :refer [extension-count]])
nil
boot.user> (extension-count)
4

Однако это все еще не позволяет мне установить VK_LAYER_PATH, что будет довольно важно в будущем:

Мы начнем использовать уровни проверки в Vulkan, и вам нужно сообщить библиотеке Vulkan, где загрузить их с помощью переменной VK_LAYER_PATH:

test: VulkanTest
    LD_LIBRARY_PATH=$(VULKAN_SDK_PATH)/lib VK_LAYER_PATH=$(VULKAN_SDK_PATH)/etc/explicit_layer.d ./VulkanTest

Как установить эти переменные среды для cider-jack-in? Я бы предпочел не иметь необходимости вручную настраивать зависимости CIDER для автономной замены в отдельном терминале, а затем подключаться к нему с помощью cider-connect, но если здесь нет другой опции, я предполагаю, что мне придется это делать.

Источник
  •  35
  •  0
  • 16 мар 2020 2020-03-16 06:14:48

Ответов пока нет