[CMake] Find Vulkan on 32 bit builds

Matthäus G. Chajdas cmake at anteru.net
Sat Jan 14 05:11:17 EST 2017


Hi,

I've filed a bug report with LunarG. The issue is here:
https://vulkan.lunarg.com/issue/view/587509589ab0fa2af19621ca

In the meantime, I'll prepare an update which can handle /lib, /lib32
and adds the NO_DEFAULT_PATH in case of 32-bit Windows. Thanks for the
report!

Cheers,
  Matthäus

Am 10.01.2017 um 17:11 schrieb Saad Khattak:
> That makes sense! Removing the variable from PATH does indeed fix the issue.
> 
> It is not a blocking issue for me.  
> 
> I agree that this is a Vulkan packaging issue. However, since you are
> looking for $ENV{VULKAN_SDK} in the find module and assuming it exists,
> then it 'should' override the other path? I do see what you are saying
> in that this now becomes a special case just because Vulkan SDK didn't
> package the libs properly.
> 
> Thanks Matthäus and Andreas for your help!
> 
> On Tue, Jan 10, 2017 at 10:38 AM Matthäus G. Chajdas <cmake at anteru.net
> <mailto:cmake at anteru.net>> wrote:
> 
>     Hi,
> 
>     the problem here is that the Vulkan SDK helpfully adds
>     D:/VulkanSDK/1.0.37.0/Bin <http://1.0.37.0/Bin> into PATH, while the
>     Vulkan module dutifully
>     searches Bin on x64 and Bin32 on x86. However, because /Bin is in the
>     PATH, and because the libraries for both architectures are named the
>     same, it will pick up the one from /Bin first (as the search order for
>     find_library is system paths first, and PATHS/HINTS variable second).
> 
>     There's a couple of ways to fix this; for instance, on Windows I could
>     use NO_DEFAULT_PATH on the find_library call and that would resolve the
>     issue. The main reason why I haven't done this yet is because I think
>     that's a packaging bug in the Vulkan SDK side which I was going to
>     report there (I want to ask them to move the libraries into a lib/
>     subfolder, and ideally use different names for different architectures.)
> 
>     For now the easiest workaround is to remove the path to the Vulkan SDK
>     from PATH; and I'll try to report this with the LunarG SDK and see how
>     far I get there. If this doesn't work out, I'll guess I'll have to
>     special-case the find_library call to ignore default paths on Windows &
>     32-bit only.
> 
>     If this is a blocker for you, please file an issue and I'll fix it on
>     the CMake end before even starting the discussion with LunarG.
> 
>     Cheers,
>       Matthäus
> 
>     Am 08.01.2017 um 14:36 schrieb Andreas Naumann:
>     > Hello,
>     > Am 08.01.2017 um 07:22 schrieb Saad Khattak:
>     >> Hello,
>     >>
>     >> When I run "find_package(VULKAN)" in a CMakeLists for a Visual Studio
>     >> 2015 32-bit project, the ${Vulkan_LIBRARY} and ${Vulkan_LIBRARIES}
>     >> variables both point to the "Bin" folder for the Vulkan installation
>     >> instead of the "Bin32" folder.
>     >>
>     >> I looked at the FindVulkan.cmake module and even put MESSAGE(STATUS
>     >> ...) on the "elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)" to see if I made a
>     >> mistake setting up. The message does indeed print confirming that my
>     >> pointer size is 4 and thus the current toolchain selected is 32 bit.
>     >>
>     >> What's perplexing is that when I do a MESSAGE(STATUS
>     >> ${Vulkan_LIBRARY}) the path is:
>     >>
>     >>
>     >> D:/VulkanSDK/1.0.37.0/Bin/vulkan-1.lib
>     <http://1.0.37.0/Bin/vulkan-1.lib> <http://1.0.37.0/Bin/vulkan-1.lib>
>     >>
>     >>
>     >> instead of
>     >>
>     >>
>     >> D:/VulkanSDK/1.0.37.0/Bin32/vulkan-1.lib
>     <http://1.0.37.0/Bin32/vulkan-1.lib>
>     >> <http://1.0.37.0/Bin32/vulkan-1.lib>
>     >>
>     >>
>     >> It makes no sense. Line 47 of FindVulkan.cmake has Bin32. Why is
>     CMake
>     >> ignoring 32?
>     >>
>     > You should think the other way around: Why should cmake look in a
>     > special directory, when it finds a library with an appropriate name
>     > before this one?
>     > This decision should be in the corresponding FindVulkan.cmake,
>     i.e. the
>     > corresponding find_library call should be constrained to
>     > ${VULKAN_DIR}/Bin32 in the 32bit case.
>     >>
>     >>
>     >
>     > Regards,
>     > Andreas
> 



More information about the CMake mailing list