Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

shared library soname is poor #120

Closed
loveshack opened this issue Dec 2, 2016 · 2 comments
Closed

shared library soname is poor #120

loveshack opened this issue Dec 2, 2016 · 2 comments
Assignees

Comments

@loveshack
Copy link

I haven't had a chance to look into this more and try to fix it, but there's a problem with how the shared library is named. The version in the soname should reflect the ABI, not the software release numer, as it seems to. The ABI has changed incompatibly, but the .so.1.6 library gets linked to .so.1, the same as for the incompatible .so.1.5. It needs to be .so.2.something instead.

(Looking at the ABI differences between rpms of 1.5 and 1.6, I see differences in some specific ...avx2... and ...avx512... functions and wonder whether they're mean to be exported, but haven't tried to check.)

@hfp hfp self-assigned this Dec 2, 2016
@hfp
Copy link
Collaborator

hfp commented Dec 2, 2016

Hi Dave,

I think we only adhere softly to ABI/binary compatibility from version to version. This is still an emerging and fast moving project. I have to say this since it's also not tested. In turn, claiming such conformance really requires at least some tests that cover this claim.

We of course have the intention to only break deployed integration, when the Major version is incremented (this will also be noted in the release notes). For recently introduced code, we may also break compatibility when the Minor version number is incremented (it is very likely that this will be noted in the release notes). Version 1.6 is an example for the latter (minor version incremented, but ABI breaks [only for the new DNN API!]). The "Update" and "Patch" part of our version components are supposedly binary compatible.

We also do not mark functions as "noexport" (or similar) right now. So we have a larger "ABI" then what we actually document and support. The functions that you mention belong to our internal ABI (src folder), and we may break it any time. As I said, we have an "internal" interface, and an "external" interface. The latter should not only be documented but basically consists of "publicly exposed" header files (include folder).

We also support "header-only" for C and C++, which I believe is pretty unique and rare technology given that our code may contain Intrinsics that require to instruct the compiler to enable such code path. You can read about how we love "header-only" (https://github.com/hfp/libxsmm/blob/master/scripts/libxsmm_source.sh#L58). The header-only support requires the user to avoid using any internal/undocumented function (or to request official support for it).

Anyhow, I will look into the soname issue, and see if it can be improved.

Hans

@hfp
Copy link
Collaborator

hfp commented Dec 2, 2016

@hfp hfp closed this as completed Jan 17, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants