On Sat, Dec 26, 2020 at 11:41:13AM +0100, Sebastien Marie wrote:
> > > 
> > > does usd has already been ported to OpenBSD ? it seems that this build
> > > assumes a Darwin option to be present (which is not and so fail).
> > > 
> > > you might want to found from where the option "-Wl,-force_load" comes
> > > from.
> > > 
> > I'm porting it. The build goes fine when I allow for separate shared libs
> > but that is not in accordance with how blender wants it. It expects a 
> > single monolith library which is enabled with PXR_BUILD_MONOLITH.
> > 
> > If required can this option be enabled in the ports llvm? I'll see if I can
> > do without it.
> 
> no. the option exists only on Darwin (MacOS).
> 
> > I'm attaching the port below, if any one wants to take a look. The part
> > which contains that option is:
> 
> thanks. I took a look at it.
> 
> for others, we are speaking of https://github.com/PixarAnimationStudios/USD/ 
> (v20.11, the latest).
> 
> I looked at the commit which introduced "-force_load". it is commit
> 3598908bcd 
> (https://github.com/PixarAnimationStudios/USD/commit/3598908bcd6307cb0a6ca0f78657bf4563152b33):
> 
> For citing a part of the commit message:
> 
>   Each platform has a different way to link the entire contents of
>   an archive library.  On Linux it's "--whole-archive <lib>
>   --no-whole-archive"; on Darwin it's "-force_load <lib>"; and on
>   Windows it's "/WHOLEARCHIVE:<lib>".  
> 
> From the CMake snippet you included, it seems that USD assumes that if
> the software is build with clang, it means it is Darwin, which is
> slightly inexact :)
> 
> You should patch the CMake file to use '--whole-archive' stuff on
> OpenBSD (even if built with clang).
> 
Worked quiet fine for me, blender picks the static lib.  I'm currently
building blender lets see how it goes, this foreboding is because a
part of the code expected to get a file Name from a file Pointer
through ArchGetFileName defined in pxr/base/arch/fileSystem.cpp which
is referenced only once in pxr/usd/usd/crateFile.cpp, turns out not
possible in OpenBSD so I've patched it with little understanding.

Anyway thanks for all the help!

--- cmake/macros/Public.cmake.orig
--- cmake/macros/Public.cmake
@@ -970,10 +970,10 @@ function(pxr_toplevel_epilogue)
                 PRIVATE
                     -Wl,--whole-archive $<TARGET_FILE:usd_m> 
-Wl,--no-whole-archive
             )
-        elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+       elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
             target_link_libraries(usd_ms
                 PRIVATE
-                    -Wl,-force_load $<TARGET_FILE:usd_m>
+                    -Wl,--whole-archive $<TARGET_FILE:usd_m> 
-Wl,--no-whole-archive
             )
         endif()

regards,
  Dimitri

Reply via email to