Monday, May 01, 2023

Re: graphics/glslang build shared libs

Stuart Henderson writes:

> On 2023/04/30 11:41, Thomas Frohwein wrote:
>> We have other ports that have shared libraries without version suffix;
>> games/lwjgl comes to mind for me. There are probably others, too.
>
> They aren't usually in /usr/local/lib though.
>
> If they're linked against by other ports, they should have versions.
>
> If they're just modules which are dlopen()d by the port then usually no
> versions.
>
>> > +REVISION = 1
>> > +
>> > +SHARED_LIBS += glslang 0.0 # 12.0
>> >
>
> Does it add version numbers if you add the other libs to SHARED_LIBS and
> rebuild?

Adding to SHARED_LIBS is not sufficient. I also have to substitute
LIBSPIRV_VERSION into SOVERSION for plist to pick up the versioning.

In cmake, VERSION is the "build version" and SOVERSION is the "API
version."

see:
https://cmake.org/cmake/help/latest/prop_tgt/SOVERSION.html

I see the new helpful sections regarding cmake:
https://www.openbsd.org/faq/ports/specialtopics.html#SharedLibs

Since flycast only uses glslang and SPIRV shared objects, would this be
OK? Then, the other shared objects can remain unversioned until they are
linked against in the future.

I tested all consumers.

Index: Makefile
===================================================================
RCS file: /cvs/ports/graphics/glslang/Makefile,v
retrieving revision 1.17
diff -u -p -u -p -r1.17 Makefile
--- Makefile 30 Apr 2023 19:11:57 -0000 1.17
+++ Makefile 1 May 2023 21:53:44 -0000
@@ -5,9 +5,10 @@ COMMENT = reference front-end for GLSL a
GH_TAGNAME = 12.0.0
GH_ACCOUNT = KhronosGroup
GH_PROJECT = glslang
-REVISION = 1
+REVISION = 2

SHARED_LIBS += glslang 0.0 # 12.0
+SHARED_LIBS += SPIRV 0.0 # 12.0

CATEGORIES = devel graphics

@@ -28,6 +29,9 @@ TEST_DEPENDS = graphics/spirv-tools \
shells/bash

CONFIGURE_ARGS += -DBUILD_SHARED_LIBS=ON
+
+pre-configure:
+ ${SUBST_CMD} ${WRKSRC}/SPIRV/CMakeLists.txt

do-test:
cd ${WRKSRC}/Test; exec ./runtests localResults \
Index: patches/patch-SPIRV_CMakeLists_txt
===================================================================
RCS file: patches/patch-SPIRV_CMakeLists_txt
diff -N patches/patch-SPIRV_CMakeLists_txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-SPIRV_CMakeLists_txt 1 May 2023 21:53:44 -0000
@@ -0,0 +1,21 @@
+define SOVERSION for SPIRV to provide shared library version number
+
+see:
+https://github.com/KhronosGroup/glslang/commit/fbe9a23baf2cb020fe3f80d68d972e2a97d9b954#diff-c275da269cb9eab1ad823f3e969a1070057413af288a2318397b1c9415289fa1
+Index: SPIRV/CMakeLists.txt
+--- SPIRV/CMakeLists.txt.orig
++++ SPIRV/CMakeLists.txt
+@@ -71,8 +71,11 @@ set(SPVREMAP_HEADERS
+ doc.h)
+
+ add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
+-set_property(TARGET SPIRV PROPERTY FOLDER glslang)
+-set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
++set_target_properties(SPIRV PROPERTIES
++ FOLDER glslang
++ POSITION_INDEPENDENT_CODE ON
++ VERSION "${GLSLANG_VERSION}"
++ SOVERSION "${LIBSPIRV_VERSION}")
+ target_include_directories(SPIRV PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/graphics/glslang/pkg/PLIST,v
retrieving revision 1.7
diff -u -p -u -p -r1.7 PLIST
--- pkg/PLIST 30 Apr 2023 19:11:57 -0000 1.7
+++ pkg/PLIST 1 May 2023 21:53:44 -0000
@@ -83,7 +83,7 @@ lib/cmake/glslang/glslang-targets.cmake
lib/cmake/glslangValidatorTargets.cmake
lib/cmake/spirv-remapTargets.cmake
@so lib/libHLSL.so
-@so lib/libSPIRV.so
+@lib lib/libSPIRV.so.${LIBSPIRV_VERSION}
@so lib/libSPVRemapper.so
@so lib/libglslang-default-resource-limits.so
@lib lib/libglslang.so.${LIBglslang_VERSION}

No comments:

Post a Comment