Bug 2008090 - Review Request: libzdnn - IBM Z specific hardware exploitation library
Summary: Review Request: libzdnn - IBM Z specific hardware exploitation library
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: s390
OS: Linux
unspecified
medium
Target Milestone: ---
Assignee: Dan Horák
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: ZedoraTracker
TreeView+ depends on / blocked
 
Reported: 2021-09-27 08:56 UTC by Andreas Krebbel
Modified: 2022-12-10 16:54 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2022-12-10 16:54:00 UTC
Type: Bug
Embargoed:
dan: fedora-review+


Attachments (Terms of Use)

Description Andreas Krebbel 2021-09-27 08:56:35 UTC
Description: The zDNN library provide a user space API for exploitation of the
Neural Network Processing Assist Facility.  All applications which
intend to use that facility on IBM Z are supposed to do this via this
library.

Fedora Account System Username: ankr

Open source repo: https://github.com/IBM/zDNN

I've prepared an srpm which I've tested on Fedora 33 so far.

I'm not allowed to set up public space on fedorapeople.org yet. I'll upload the files and provide the links as soon as I got the permissions. Alternatively I could attach it to this BZ.

Comment 2 Dan Horák 2021-09-29 08:44:22 UTC
some initial comments
- the Source0 value should be an URL, see the Git Hosting Services section in https://docs.fedoraproject.org/en-US/packaging-guidelines/SourceURL/
- it's better to use %{build_cflags} / %{build_cxxflags} instead of ${RPM_OPT_FLAGS}
- the %post/%postun scriptlets calling ldconfig are not required any more, it's handled by system-wide triggers
- you shouldn't package the static library unless really needed and if needed, then it belongs to a "static" subpackage, see https://docs.fedoraproject.org/en-US/packaging-guidelines/#packaging-static-libraries
- we can't move the baseline arch for Fedora to z >= 14 any time soon, can the library gracefully shutdown the app when run on z < 14? We should avoid a situation when an app will suddenly crash with a SIGILL.

Comment 3 Andreas Krebbel 2021-09-30 21:43:21 UTC
(In reply to Dan Horák from comment #2)
> some initial comments
Thanks! I've just uploaded a new version addressing most of your comments.

> - the Source0 value should be an URL, see the Git Hosting Services section
> in https://docs.fedoraproject.org/en-US/packaging-guidelines/SourceURL/
Ok. I'll fix it once we have a release tag in the github repo. We will have that within the next couple of days.

> - it's better to use %{build_cflags} / %{build_cxxflags} instead of
> ${RPM_OPT_FLAGS}
Done

> - the %post/%postun scriptlets calling ldconfig are not required any more,
> it's handled by system-wide triggers
Done

> - you shouldn't package the static library unless really needed and if
> needed, then it belongs to a "static" subpackage, see
> https://docs.fedoraproject.org/en-US/packaging-guidelines/#packaging-static-
> libraries
Some scenarios might require a static version of the lib. I've moved it into a separate package.

> - we can't move the baseline arch for Fedora to z >= 14 any time soon, can
> the library gracefully shutdown the app when run on z < 14? We should avoid
> a situation when an app will suddenly crash with a SIGILL.
The library has some init routines which aren't build with z14 and allow to check whether the specific feature is present or not. It is described in the API that every application has to use these functions before invoking anything else.

Comment 4 Dan Horák 2021-10-01 08:31:51 UTC
Thanks for the update, please increase the release number for every iteration during the review. It makes easier to track the actual changes in the spec file.

one more nitpick

%files devel
%{_includedir}/*

I would probably be more specific with the headers (as %{_includedir}/zdnn.h), but it's my preference :-)

Comment 5 Dan Horák 2021-10-01 09:17:32 UTC
I think the passing of -march=z14 will need some thinking, because I see 2 kinds of gcc command lines

gcc -O3 -march=z14 -mzvector -Wall -std=gnu99 -fstack-protector-all -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=zEC12 -mtune=z13 -fasynchronous-unwind-tables -fstack-clash-protection -march=z14 -funroll-loops "-Wall" -I ../zdnn -I . -fPIC  -c init_ztensor.c -o obj/init_ztensor.o

and 

gcc -O3 -mzvector -Wall -std=gnu99 -fstack-protector-all -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=zEC12 -mtune=z13 -fasynchronous-unwind-tables -fstack-clash-protection -march=z14 "-Wall" -fPIC  -c zdnn_init.c -o obj/zdnn_init.o

The first one has -march=z14 twice, the second has one occurrence. The "appended" -march overrides the distro wide flags, which is OK in the first case,  I think, but not in the second ...

Comment 6 Andreas Krebbel 2021-10-02 06:41:59 UTC
I've uploaded new versions. We have created a release on github.com and I've adjusted the Source0 line accordingly. I've also followed your suggestions about explicitly listing the header files.

SPEC: https://ankr.fedorapeople.org/libzdnn.spec
SRPM: https://ankr.fedorapeople.org/libzdnn-0.3.0-2.fc33.src.rpm

Comment 7 Andreas Krebbel 2021-10-02 07:19:56 UTC
(In reply to Dan Horák from comment #5)
> I think the passing of -march=z14 will need some thinking, because I see 2
> kinds of gcc command lines
> 
> gcc -O3 -march=z14 -mzvector -Wall -std=gnu99 -fstack-protector-all -O2
> -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe
> -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2
> -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
> -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64
> -march=zEC12 -mtune=z13 -fasynchronous-unwind-tables
> -fstack-clash-protection -march=z14 -funroll-loops "-Wall" -I ../zdnn -I .
> -fPIC  -c init_ztensor.c -o obj/init_ztensor.o
> 
> and 
> 
> gcc -O3 -mzvector -Wall -std=gnu99 -fstack-protector-all -O2 -flto=auto
> -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall
> -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS
> -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong
> -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=zEC12 -mtune=z13
> -fasynchronous-unwind-tables -fstack-clash-protection -march=z14 "-Wall"
> -fPIC  -c zdnn_init.c -o obj/zdnn_init.o
> 
> The first one has -march=z14 twice, the second has one occurrence. The
> "appended" -march overrides the distro wide flags, which is OK in the first
> case,  I think, but not in the second ...

Good catch. The second must not have an -march=z14. I've added a patch to the srpm and pass CFLAGS_INIT to configure as well now. There I do not append -march=z14. The build command lines look ok with that change. Thanks!

Comment 8 Dan Horák 2021-10-07 08:09:09 UTC
Thanks, the 0.3.1-2 looks good to me. One minor nitpick - please add a new line between the %changelog entries.

Regarding the -march flags, I think that one option could be removing the distro values from %optflags and then relying on the upstream mechanism to set the -march=z14. Something like

%global optflags $(echo %optflags | sed -e 's/-march=z[[:alnum:]]\+//g' -e 's/-mtune=z[[:alnum:]]\+//g')

In the current revision you likely end up with -march=z14 -mtune=z13 combination, which might be suboptimal.

Comment 9 Andreas Krebbel 2021-10-07 16:29:05 UTC
(In reply to Dan Horák from comment #8)
> Thanks, the 0.3.1-2 looks good to me. One minor nitpick - please add a new
> line between the %changelog entries.

Done

> Regarding the -march flags, I think that one option could be removing the
> distro values from %optflags and then relying on the upstream mechanism to
> set the -march=z14. Something like
> 
> %global optflags $(echo %optflags | sed -e 's/-march=z[[:alnum:]]\+//g' -e
> 's/-mtune=z[[:alnum:]]\+//g')
> 
> In the current revision you likely end up with -march=z14 -mtune=z13
> combination, which might be suboptimal.

Right, but for the init routines I still want the distro defaults and once the distro defaults are z14 or higher we always want the distro default to overwrite the upstream options. So for now I've just added also -mtune=z14 to the override options.

Here are the updated versions of the files. Thanks for your feedback!

SPEC: https://ankr.fedorapeople.org/libzdnn.spec
SRPM: https://ankr.fedorapeople.org/libzdnn-0.3.1-3.fc33.src.rpm

Comment 10 Dan Horák 2021-10-18 09:15:56 UTC
one last thing - won't the -mzvector cause any troubles with the distro-wide -march/-mtune settings?

gcc -O3 -mzvector -Wall -std=gnu99 -fstack-protector-all -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=zEC12 -mtune=z13 -fasynchronous-unwind-tables -fstack-clash-protection "-Wall" -fPIC  -c zdnn_init.c -o obj/zdnn_init.o

Comment 11 Andreas Krebbel 2021-10-18 10:25:19 UTC
(In reply to Dan Horák from comment #10)
> one last thing - won't the -mzvector cause any troubles with the distro-wide
> -march/-mtune settings?
> 
> gcc -O3 -mzvector -Wall -std=gnu99 -fstack-protector-all -O2 -flto=auto
> -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall
> -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS
> -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong
> -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -march=zEC12 -mtune=z13
> -fasynchronous-unwind-tables -fstack-clash-protection "-Wall" -fPIC  -c
> zdnn_init.c -o obj/zdnn_init.o

-mzvector does not influence code generation. It only enables language extensions which are used by the zDNN library. With that option the "vector" keyword is available which allows to define vector data types more easily. For code not using these extensions it doesn't make a difference.

Comment 12 Dan Horák 2021-10-19 11:33:51 UTC
I have tried to rebuild libzdnn rpm in mock and found that g++ is missing, but needed for the initializer.cpp file. Easiest fix would be to add BR: g++ (in addition to BR: gcc), unless there is a way to implement the initialization with gcc/C only.

Comment 13 Dan Horák 2021-10-19 11:52:38 UTC
And few more comments from working on the formal review:
- seems there is a space missing in the %description for the static subpackage - ... of%{name} -> ... of %{name}
- the Requires for the main package in "devel" needs to be "arched" - see https://docs.fedoraproject.org/en-US/packaging-guidelines/#_requiring_base_package
- the "static" subpackage needs to Require the "devel" subpackage, arched again, see https://docs.fedoraproject.org/en-US/packaging-guidelines/#packaging-static-libraries (the "1. Static libraries and shared libraries" subsection)

Comment 14 Andreas Krebbel 2021-10-19 16:19:54 UTC
(In reply to Dan Horák from comment #12)
> I have tried to rebuild libzdnn rpm in mock and found that g++ is missing,
> but needed for the initializer.cpp file. Easiest fix would be to add BR: g++
> (in addition to BR: gcc), unless there is a way to implement the
> initialization with gcc/C only.

Oh, right. I'll add g++ as build dependency. With GCC this could be implemented without C++ support but the library also needs to build on z/OS.

Comment 15 Andreas Krebbel 2021-10-19 16:20:55 UTC
(In reply to Dan Horák from comment #13)
> And few more comments from working on the formal review:
> - seems there is a space missing in the %description for the static
> subpackage - ... of%{name} -> ... of %{name}
> - the Requires for the main package in "devel" needs to be "arched" - see
> https://docs.fedoraproject.org/en-US/packaging-guidelines/
> #_requiring_base_package
> - the "static" subpackage needs to Require the "devel" subpackage, arched
> again, see
> https://docs.fedoraproject.org/en-US/packaging-guidelines/#packaging-static-
> libraries (the "1. Static libraries and shared libraries" subsection)

Thanks for the review. I've fixed these issues and have uploaded a new version.

SPEC: https://ankr.fedorapeople.org/libzdnn.spec
SRPM: https://ankr.fedorapeople.org/libzdnn-0.3.1-4.fc33.src.rpm

Comment 16 Dan Horák 2021-10-21 10:39:17 UTC
we are getting closer, but I see a problem when building in F-35 or rawhide (no problem in F-34), perhaps some change in the toolchain ...

...
g++ -shared -Wl,-Bsymbolic-functions -Wl,-soname,libzdnn.so.0 -Wl,--version-script=zdnn.map -lm  -o lib/libzdnn.so obj/zdnn_init.o obj/aiu_lstm_gru.o obj/aiu_ops.o obj/allochelper.o obj/convert_hw.o obj/get.o obj/init_ztensor.o obj/logger.o obj/malloc4k.o obj/operations.o obj/query.o obj/reshape_ztensor.o obj/status.o obj/stickify.o obj/tensor_desc.o obj/tensor_dump.o obj/tensor_verify.o obj/utils.o obj/version.o obj/zdnn.o obj/initializer.o
make[1]: Leaving directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
make[1]: Entering directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
gcc -E -c ../zdnn/zdnn.h -o zdnn_preprocessed.h
readelf -W --dyn-syms lib/libzdnn.so > zdnn.dynsyms
awk -f sym_checker.awk zdnn_preprocessed.h ../zdnn/zdnn.map zdnn.dynsyms
#0.0: BEGIN of sym_checker.awk
#1.1: Processing file zdnn_preprocessed.h => zdnn.h
#2.1: Processing file ../zdnn/zdnn.map => zdnn.map
#3.1: Processing file zdnn.dynsyms => .dynsym-symbol-table
ERROR #1 in .dynsym-symbol-table:5: Found unversioned symbol in .dynsym-symbol-table: .init
#4.0: Processing END of sym_checker.awk

Please also have a look at the tasks described in zdnn.map:
13: # Task: Introduce a new symbol in a new library version.
25: # Task: Provide a second symbol after making an incompatible change of a symbol.
54: # Task: Remove a symbol and only provide an old version for usage by existing programs.

#4.3: END of sym_checker.awk: 1 ERRORs
make[1]: Leaving directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
make[1]: *** [t-symcheck:30: symcheck] Error 1
make[1]: *** Waiting for unfinished jobs....

please see the complete log at https://koji.fedoraproject.org/koji/taskinfo?taskID=77604382

You should be able to check it yourself locally with "mock -r fedora-35-s390x libzdnn-0.3.1-4.fc33.src.rpm" (or use fedora-rawhide-s390x for the -r option), "mock -r ... shell" puts you into the build's chroot.

Comment 18 Dan Horák 2021-10-27 09:24:34 UTC
formal review is here

OK	source files match upstream:
	    8d0028a5ad2267de06bc59d5d81a1df5452c9978  libzdnn-0.3.1.tar.gz
OK	package meets naming and versioning guidelines.
OK	specfile is properly named, is cleanly written and uses macros consistently.
OK	dist tag is present.
OK	license field matches the actual license (ASL 2.0)
OK	license is open source-compatible. License text included in package.
OK	latest version is being packaged.
OK	BuildRequires are proper.
OK	compiler flags are appropriate.
OK	package builds in mock (Rawhide/s390x).
OK	debuginfo package looks complete.
OK	rpmlint is silent.
OK	final provides and requires look sane.
N/A	%check is present and all tests pass.
OK	shared libraries are installed correctly.
OK	owns the directories it creates.
OK	doesn't own any directories it shouldn't.
OK	no duplicates in %files.
OK	file permissions are appropriate.
OK	no scriptlets present.
OK	code, not content.
OK	documentation is small, so no -docs subpackage is necessary.
OK	%docs are not necessary for the proper functioning of the package.
OK	headers in -devel
OK	no pkgconfig files.
OK	no libtool .la droppings.
OK	not a GUI app.

the package is APPROVED.

Comment 19 Dan Horák 2021-10-27 09:29:50 UTC
But there still something slightly wrong with the dependencies in the Makefile, because it's processing the symbols twice in the %install section (during "make install"), see bellow. It does "make all", whioch should be a no-op, then the actual "make install".

...
make[1]: Entering directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
ar -rc lib/libzdnn.a obj/zdnn_init.nonshared.o obj/aiu_lstm_gru.nonshared.o obj/aiu_ops.nonshared.o obj/allochelper.nonshared.o obj/convert_hw.nonshared.o obj/get.nonshared.o obj/init_ztensor.nonshared.o obj/logger.nonshared.o obj/malloc4k.nonshared.o obj/operations.nonshared.o obj/query.nonshared.o obj/reshape_ztensor.nonshared.o obj/status.nonshared.o obj/stickify.nonshared.o obj/tensor_desc.nonshared.o obj/tensor_dump.nonshared.o obj/tensor_verify.nonshared.o obj/utils.nonshared.o obj/version.nonshared.o obj/zdnn.nonshared.o obj/initializer.nonshared.o
make[1]: Leaving directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
make[1]: Entering directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
g++ -shared -Wl,-Bsymbolic-functions -Wl,-soname,libzdnn.so.0 -Wl,--version-script=zdnn.map -lm  -o lib/libzdnn.so obj/zdnn_init.o obj/aiu_lstm_gru.o obj/aiu_ops.o obj/allochelper.o obj/convert_hw.o obj/get.o obj/init_ztensor.o obj/logger.o obj/malloc4k.o obj/operations.o obj/query.o obj/reshape_ztensor.o obj/status.o obj/stickify.o obj/tensor_desc.o obj/tensor_dump.o obj/tensor_verify.o obj/utils.o obj/version.o obj/zdnn.o obj/initializer.o
make[1]: Leaving directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
make[1]: Entering directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
gcc -E -c ../zdnn/zdnn.h -o zdnn_preprocessed.h
readelf -W --dyn-syms lib/libzdnn.so > zdnn.dynsyms
awk -f sym_checker.awk zdnn_preprocessed.h ../zdnn/zdnn.map zdnn.dynsyms
#0.0: BEGIN of sym_checker.awk
#1.1: Processing file zdnn_preprocessed.h => zdnn.h
#2.1: Processing file ../zdnn/zdnn.map => zdnn.map
#3.1: Processing file zdnn.dynsyms => .dynsym-symbol-table
#4.0: Processing END of sym_checker.awk
#4.3: END of sym_checker.awk: SUCCESS
make[1]: Leaving directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
make[1]: Entering directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
g++ -shared -Wl,-Bsymbolic-functions -Wl,-soname,libzdnn-private.so.0 -Wl,--version-script=zdnn_exportall.map -lm  -o lib/libzdnn-private.so obj/zdnn_init.o obj/aiu_lstm_gru.o obj/aiu_ops.o obj/allochelper.o obj/convert_hw.o obj/get.o obj/init_ztensor.o obj/logger.o obj/malloc4k.o obj/operations.o obj/query.o obj/reshape_ztensor.o obj/status.o obj/stickify.o obj/tensor_desc.o obj/tensor_dump.o obj/tensor_verify.o obj/utils.o obj/version.o obj/zdnn.o obj/initializer.o
make[1]: Leaving directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
+ RPM_EC=0
++ jobs -p
+ exit 0


Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.eMSys6
+ umask 022
+ cd /builddir/build/BUILD
+ '[' /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x '!=' / ']'
+ rm -rf /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x
++ dirname /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x
+ mkdir -p /builddir/build/BUILDROOT
+ mkdir /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x
+ cd zDNN-0.3.1
+ /usr/bin/make install DESTDIR=/builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x 'INSTALL=/usr/bin/install -p'
/usr/bin/make all -C zdnn
make[1]: Entering directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
g++ -shared -Wl,-Bsymbolic-functions -Wl,-soname,libzdnn.so.0 -Wl,--version-script=zdnn.map -lm  -o lib/libzdnn.so obj/zdnn_init.o obj/aiu_lstm_gru.o obj/aiu_ops.o obj/allochelper.o obj/convert_hw.o obj/get.o obj/init_ztensor.o obj/logger.o obj/malloc4k.o obj/operations.o obj/query.o obj/reshape_ztensor.o obj/status.o obj/stickify.o obj/tensor_desc.o obj/tensor_dump.o obj/tensor_verify.o obj/utils.o obj/version.o obj/zdnn.o obj/initializer.o
ln -f -s libzdnn.so lib/libzdnn.so.0
ln -f -s libzdnn-private.so lib/libzdnn-private.so.0
gcc -E -c ../zdnn/zdnn.h -o zdnn_preprocessed.h
readelf -W --dyn-syms lib/libzdnn.so > zdnn.dynsyms
awk -f sym_checker.awk zdnn_preprocessed.h ../zdnn/zdnn.map zdnn.dynsyms
#0.0: BEGIN of sym_checker.awk
#1.1: Processing file zdnn_preprocessed.h => zdnn.h
#2.1: Processing file ../zdnn/zdnn.map => zdnn.map
#3.1: Processing file zdnn.dynsyms => .dynsym-symbol-table
#4.0: Processing END of sym_checker.awk
#4.3: END of sym_checker.awk: SUCCESS
make[1]: Leaving directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
/usr/bin/make install -C zdnn
make[1]: Entering directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
g++ -shared -Wl,-Bsymbolic-functions -Wl,-soname,libzdnn.so.0 -Wl,--version-script=zdnn.map -lm  -o lib/libzdnn.so obj/zdnn_init.o obj/aiu_lstm_gru.o obj/aiu_ops.o obj/allochelper.o obj/convert_hw.o obj/get.o obj/init_ztensor.o obj/logger.o obj/malloc4k.o obj/operations.o obj/query.o obj/reshape_ztensor.o obj/status.o obj/stickify.o obj/tensor_desc.o obj/tensor_dump.o obj/tensor_verify.o obj/utils.o obj/version.o obj/zdnn.o obj/initializer.o
g++ -shared -Wl,-Bsymbolic-functions -Wl,-soname,libzdnn-private.so.0 -Wl,--version-script=zdnn_exportall.map -lm  -o lib/libzdnn-private.so obj/zdnn_init.o obj/aiu_lstm_gru.o obj/aiu_ops.o obj/allochelper.o obj/convert_hw.o obj/get.o obj/init_ztensor.o obj/logger.o obj/malloc4k.o obj/operations.o obj/query.o obj/reshape_ztensor.o obj/status.o obj/stickify.o obj/tensor_desc.o obj/tensor_dump.o obj/tensor_verify.o obj/utils.o obj/version.o obj/zdnn.o obj/initializer.o
ln -f -s libzdnn.so lib/libzdnn.so.0
ln -f -s libzdnn-private.so lib/libzdnn-private.so.0
gcc -E -c ../zdnn/zdnn.h -o zdnn_preprocessed.h
readelf -W --dyn-syms lib/libzdnn.so > zdnn.dynsyms
awk -f sym_checker.awk zdnn_preprocessed.h ../zdnn/zdnn.map zdnn.dynsyms
#0.0: BEGIN of sym_checker.awk
#1.1: Processing file zdnn_preprocessed.h => zdnn.h
#2.1: Processing file ../zdnn/zdnn.map => zdnn.map
#3.1: Processing file zdnn.dynsyms => .dynsym-symbol-table
#4.0: Processing END of sym_checker.awk
#4.3: END of sym_checker.awk: SUCCESS
/usr/bin/install -p -d /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64
/usr/bin/install -p -d /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/include
/usr/bin/install -p -t /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64 lib/libzdnn.so
/usr/bin/install -p -m 644 -t /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/include zdnn.h
mv /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so.0
ln -f -s libzdnn.so.0 /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so
/usr/bin/install -p -m 644 -t /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64 lib/libzdnn.a
make[1]: Leaving directory '/builddir/build/BUILD/zDNN-0.3.1/zdnn'
+ mv /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so.0 /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so.0.3.1
+ ln -s -r /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so.0.3.1 /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so.0
+ rm -f /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so
+ ln -s -r /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so.0.3.1 /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so
+ /usr/bin/find-debuginfo -j8 --strict-build-id -m -i --build-id-seed 0.3.1-5.fc36 --unique-debug-suffix -0.3.1-5.fc36.s390x --unique-debug-src-base libzdnn-0.3.1-5.fc36.s390x --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 50000000 -S debugsourcefiles.list /builddir/build/BUILD/zDNN-0.3.1
extracting debug info from /builddir/build/BUILDROOT/libzdnn-0.3.1-5.fc36.s390x/usr/lib64/libzdnn.so.0.3.1
original debug info size: 304kB, size after compression: 280kB
/usr/bin/sepdebugcrcfix: Updated 1 CRC32s, 0 CRC32s did match.
...

Comment 20 Andreas Krebbel 2021-10-29 07:54:03 UTC
Yes, there is a problem with the makefile rules for the symbol checker and the symlink creation. I've fixed this with:
https://github.com/IBM/zDNN/pull/4

Here is the updated package including the change from the PR as patch:

SPEC: https://ankr.fedorapeople.org/libzdnn.spec
SRPM: https://ankr.fedorapeople.org/libzdnn-0.3.0-6.fc33.src.rpm

Comment 21 Andreas Krebbel 2021-10-29 07:55:23 UTC
(In reply to Andreas Krebbel from comment #20)
> Yes, there is a problem with the makefile rules for the symbol checker and
> the symlink creation. I've fixed this with:
> https://github.com/IBM/zDNN/pull/4
> 
> Here is the updated package including the change from the PR as patch:
> 
> SPEC: https://ankr.fedorapeople.org/libzdnn.spec
> SRPM: https://ankr.fedorapeople.org/libzdnn-0.3.0-6.fc33.src.rpm

This should have been:
SRPM: https://ankr.fedorapeople.org/libzdnn-0.3.1-6.fc33.src.rpm

Comment 22 Gwyn Ciesla 2021-11-08 15:40:14 UTC
(fedscm-admin):  The Pagure repository was created at https://src.fedoraproject.org/rpms/libzdnn

Comment 23 Andreas Krebbel 2021-12-10 18:49:36 UTC
libzdnn is now available as a package for Fedora rawhide:
https://src.fedoraproject.org/rpms/libzdnn

Upstream libzdnn got a new release - 0.4.0 which is already part of the fedora package above.

Comment 24 Package Review 2022-12-10 16:54:00 UTC
Package is now in repositories, closing review.


Note You need to log in before you can comment on or make changes to this bug.