ovn-org / ovn

Open Virtual Network
Apache License 2.0
497 stars 244 forks source link

Building ovn-22.03.0 against openvswitch-2.17.0 fails at install stage #120

Open yousong opened 2 years ago

yousong commented 2 years ago

When building ovn-22.03.0 against openvswitch 2.17.0, I had to add -L$ovsbuilddir/lib/.libs to LDFLAGS. Otherwise the make install command will fail with the following error

  make[5]: Entering directory '/home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0'
   /usr/bin/mkdir -p '/home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0/ipkg-install/usr/lib'
   /bin/sh ./libtool   --mode=install /home/abc/git-repo/openwrt/staging_dir/host/bin/install -c   lib/libovn.la '/home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0/ipkg-install/usr/lib'
  OpenWrt-libtool: install: warning: relinking `lib/libovn.la'
  OpenWrt-libtool: install: (cd /home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0; /bin/sh /home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0/libtool  --tag CC --mode=relink x86_64-openwrt-linux-musl-gcc -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wswitch-bool -Wlogical-not-parentheses -Wsizeof-array-argument -Wbool-compare -Wshift-negative-value -Wduplicated-cond -Wshadow -Wmultistatement-macros -Wcast-align=strict -fomit-frame-pointer -Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0=ovn-22.03.0 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -flto -std=gnu99 -release 22.03 -version-info 0:0 -Wl,--version-script=./lib/libovn.sym /home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/linux-x86_64/openvswitch-2.17.0/lib/libopenvswitch.la -L/home/abc/git-repo/openwrt/staging_dir/target-x86_64_musl/usr/lib -L/home/abc/git-repo/openwrt/staging_dir/toolchain-x86_64_gcc-11.2.0_musl/usr/lib -L/home/abc/git-repo/openwrt/staging_dir/toolchain-x86_64_gcc-11.2.0_musl/lib -znow -zrelro -o lib/libovn.la -rpath /usr/lib lib/acl-log.lo lib/actions.lo lib/chassis-index.lo lib/copp.lo lib/expr.lo lib/extend-table.lo lib/features.lo lib/ovn-parallel-hmap.lo lib/ip-mcast-index.lo lib/mcast-group-index.lo lib/lex.lo lib/ovn-l7.lo lib/ovn-util.lo lib/logical-fields.lo lib/inc-proc-eng.lo lib/lb.lo lib/vif-plug-provider.lo lib/vif-plug-providers/dummy/vif-plug-dummy.lo lib/ovn-dirs.lo lib/ovn-nb-idl.lo lib/ovn-sb-idl.lo lib/ovn-ic-nb-idl.lo lib/ovn-ic-sb-idl.lo -latomic -inst-prefix-dir /home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0/ipkg-install)
  OpenWrt-libtool: relink: warning: `/home/abc/git-repo/openwrt/staging_dir/toolchain-x86_64_gcc-11.2.0_musl/lib/libatomic.la' seems to be moved
  OpenWrt-libtool: relink: x86_64-openwrt-linux-musl-gcc -shared  -fPIC -DPIC  lib/.libs/acl-log.o lib/.libs/actions.o lib/.libs/chassis-index.o lib/.libs/copp.o lib/.libs/expr.o lib/.libs/extend-table.o lib/.libs/features.o lib/.libs/ovn-parallel-hmap.o lib/.libs/ip-mcast-index.o lib/.libs/mcast-group-index.o lib/.libs/lex.o lib/.libs/ovn-l7.o lib/.libs/ovn-util.o lib/.libs/logical-fields.o lib/.libs/inc-proc-eng.o lib/.libs/lb.o lib/.libs/vif-plug-provider.o lib/vif-plug-providers/dummy/.libs/vif-plug-dummy.o lib/.libs/ovn-dirs.o lib/.libs/ovn-nb-idl.o lib/.libs/ovn-sb-idl.o lib/.libs/ovn-ic-nb-idl.o lib/.libs/ovn-ic-sb-idl.o   -Wl,-rpath -Wl,/home/abc/git-repo/openwrt/staging_dir/toolchain-x86_64_gcc-11.2.0_musl/lib -L/home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0/ipkg-install/usr/lib -lopenvswitch -L/home/abc/git-repo/openwrt/staging_dir/target-x86_64_musl/usr/lib -L/home/abc/git-repo/openwrt/staging_dir/toolchain-x86_64_gcc-11.2.0_musl/usr/lib -L/home/abc/git-repo/openwrt/staging_dir/toolchain-x86_64_gcc-11.2.0_musl/lib -lssl -lcrypto -lunbound -lunwind -L/home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0/ipkg-install/home/abc/git-repo/openwrt/staging_dir/toolchain-x86_64_gcc-11.2.0_musl/lib -latomic  -Os -fstack-protector -Wl,-z -Wl,now -Wl,-z -Wl,relro -flto -Wl,--version-script=./lib/libovn.sym   -pthread -Wl,-soname -Wl,libovn-22.03.so.0 -o lib/.libs/libovn-22.03.so.0.0.0 /home/abc/git-repo/openwrt/staging_dir/toolchain-x86_64_gcc-11.2.0_musl/lib/gcc/x86_64-openwrt-linux-musl/11.2.0/../../../../x86_64-openwrt-linux-musl/bin/ld: cannot find -lopenvswitch
  collect2: error: ld returned 1 exit status
  OpenWrt-libtool: install: error: relink `lib/libovn.la' with the above command before installing it
  make[5]: *** [Makefile:1208: install-libLTLIBRARIES] Error 1
  make[5]: Leaving directory '/home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0'
  make[4]: *** [Makefile:2467: install-am] Error 2
  make[4]: Leaving directory '/home/abc/git-repo/openwrt/build_dir/target-x86_64_musl/ovn-22.03.0'
  make[3]: *** [Makefile:2461: install] Error 2

Note that libtool --mode=install, then libtool --mode=relink, libopenvswitch.la was converted to only -lopenvswitch without -L.

Building ovn-20.12.0 against openvswitch-2.17.0 has no issue. This seems to be caused by libovn now depends on libopenvswitch: 1b587c4f ("controller: add datapath meter capability check")

yousong commented 2 years ago

Ref: https://github.com/openwrt/packages/pull/18089/files#diff-2f797583db23a1ed500b91e61a24cb7b03f0ef3c0879e237a3f419c3cf9f2702R91-R95