On 7/15/20 1:45 PM, Van Haaren, Harry wrote: >> -----Original Message----- >> From: Ilya Maximets <i.maxim...@ovn.org> >> Sent: Wednesday, July 15, 2020 10:16 AM >> To: William Tu <u9012...@gmail.com>; Gregory Rose <gvrose8...@gmail.com>; >> Van Haaren, Harry <harry.van.haa...@intel.com>; Stokes, Ian >> <ian.sto...@intel.com> >> Cc: d...@openvswitch.org; Ilya Maximets <i.maxim...@ovn.org>; >> i.maxim...@ovn.org >> Subject: Re: [PATCH] rpm-fedora: Add missing dist library >> >> On 7/15/20 1:33 AM, William Tu wrote: >>> On Tue, Jul 14, 2020 at 03:40:39PM -0700, Gregory Rose wrote: >>>> >>>> >>>> On 7/14/2020 1:49 PM, Greg Rose wrote: >>>>> libopenvswitchavx512.a is needed for the fedora rpm spec. >>>>> >>>>> Signed-off-by: Greg Rose <gvrose8...@gmail.com> >>>>> --- >>>>> rhel/openvswitch-fedora.spec.in | 1 + >>>>> 1 file changed, 1 insertion(+) >>>>> >>>>> diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch- >> fedora.spec.in >>>>> index 7bc8c34..154b49e 100644 >>>>> --- a/rhel/openvswitch-fedora.spec.in >>>>> +++ b/rhel/openvswitch-fedora.spec.in >>>>> @@ -457,6 +457,7 @@ fi >>>>> %{_bindir}/ovs-pki >>>>> %{_bindir}/vtep-ctl >>>>> %{_libdir}/lib*.so.* >>>>> +%{_libdir}/libopenvswitchavx512.a >>> How come before the avx512 patch series, we don't need to put >> libopenvswitch.a here? >>> And now we need to add libopenvswitchavx512.a? >>> Do we need to also add other .a files such as libsflow.a, libopenvswitch.a? >> >> It seems like the real issue is that rpm build requests to build shared >> libraries only, but we're building this static library for some reason. >> >> We should not include it into the package. I think, we need to fix the >> build process and avoid building it in a first place. > > Hey folks! > > As you know the AVX512 patchset enables CPU ISA detection. ISA detection > and building is a little more complex, and indeed this is the first time that > it > is being done in OVS - so we're all on a learning curve here. > > OVS supports an --enable-shared build mode, where OVS itself is built as a > shared object. When this is enabled, components in OVS are built as .so files, > and LD handles linking them together. This is a pretty standard shared build > usage, and likely very familiar to everyone. > > When enabling CPU ISA detection in OVS, we were very careful to not build > the whole OVS code with CPU specific CFLAGS like -mavx512f. To limit scope of > these CFLAGS, it is common practice to build a static library. The resulting > .a > archive file (containing CPU specific ISA) is then static linked into the > vswitchd binary.
Isn't it better to link libopenvswitchavx512.a to libopenvswitch.{a,so} instead of linking it to the vswitchd binary? This should allow us to not distribute it separately inside the package. There are few issues here: 1. libopenvswitchavx512.a is a confusing name, because it contains only one object lib/dpif-netdev-lookup-avx512-gather.c and not the whole library. 2. vswitchd by itself doesn't use dpif-netdev-lookup-* stuff. These things are only used by libopenvswitch. So, linking of libopenvswitchavx512.a into vswitchd doesn't make much logical sense. 3. If someone will try to create a different application on top of libopenvswitch shared library, they will need to additionally statically link libopenvswitchavx512.a. Otherwise build will fail, right? > > The approach of building application as shared or static, but always > statically linking > in ISA specialized static libraries into the result is common in other packet > processing > projects. For example, DPDK's ethdev drivers take a similar approach. > > As a result, it is expected that static archive files will be linked into the > vswitchd binary, and the > above patch solves exactly that for the .spec file. Regardless of the type of > build (shared/static) of > OVS, the same .a files will require linking, so I see this as a potential fix. > > > If OVS community feels that all object files must be .so if using > --enable-shared, > then we can revert to the previous method quite easily, just removing the > -static flag > should do from lib/automake.mk. Commenting the below line achieves this: > # lib_libopenvswitchavx512_la_LDFLAGS = -static > > With that above change, the shared build of OVS links to a separate .so for > avx512. > $ ldd lib/.libs/libopenvswitch.so > libopenvswitchavx512.so.0 => > ~/path/to/ovs/lib/.libs/libopenvswitchavx512.so.0 (0x00007f2a2c55d000) > > Note in this case, the .spec file handles the .so with the > %{_libdir}/lib*.so.* glob, > so no changes would be required due to the wildcarding in place already. > > >> Harry, Ian, could you, please, take a look? > > Thanks for flagging, detailed response above. We have two solutions: > 1) Keep static linking as today, and add the proposed line in the .spec file > as per patch > 2) Remove the -static flag, doing shared builds of ISA optimized code and > linking with LD. > > I took approach 1) in the patchset, but switching to 2) is a one-line change > as above. > > Developers/testers: please run "make clean" and "boot.sh" before configure, > the build gets > confused without make clean, and will give strange linker errors on the SO > version otherwise. > > >> Best regards, Ilya Maximets. > > Regards, -Harry > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev