All of lore.kernel.org
 help / color / mirror / Atom feed
* Using meson unittest in OE SDK environment
@ 2019-08-02 10:21 Lei YU
  2019-08-02 18:41 ` William Kennington
  0 siblings, 1 reply; 3+ messages in thread
From: Lei YU @ 2019-08-02 10:21 UTC (permalink / raw)
  To: OpenBMC Maillist

It looks like more and more OpenBMC repos are going to use meson to replace
autotools.
I tried to use meson in a new repo, it works fine for builds, but I got some
problems on running tests in OE SDK environment.

I tried to pass rpath to link_args, but meson seems a bit weird on using this.
(If interested) Please check the details in
https://github.com/mine260309/phosphor-psu-code-mgmt/blob/cc35c10b5416dbcec0dfd6eaaa7d096d9ec4e733/test/meson.build#L45

I was gathering correct `-Wl,-rpath,` options, save it in `testcase_flags`, and
pass it to `link_args`.
It is expected to work, and it's really close...

However, meson passes the `testcase_flags` to the link command, but with an
extra single-quote `'`, and unfortunately, it does not work as expected.

See below detailed command meson executes:

```
x86_64-openbmc-linux-g++ -m64 -march=core2 -mtune=core2 -msse3
-mfpmath=sse --sysroot=/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux
 -o test/utest 'test/9f86d08@@utest@exe/.._src_ut
ils.cpp.o' 'test/9f86d08@@utest@exe/test_utils.cpp.o'
-Wl,--no-undefined -Wl,--as-needed -Wl,--start-group -lstdc++fs
-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -flto
'-Wl,-rpath,/usr/local/oecore
-x86_64/sysroots/core2-64-openbmc-linux/lib
-Wl,-rpath,/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib
-Wl,-dynamic-linker,/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/l
ib/ld-2.29.so' /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgtest_main.a
-pthread /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgtest.a
/usr/local/oecore
-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgmock.a
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libphosphor_logging.so
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-
linux/usr/lib/libsdbusplus.so
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libsystemd.so
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libphosphor_dbus.so
-Wl,--en
d-group

$ ldd ./x86-build/test/utest
./x86-build/test/utest: /usr/lib/x86_64-linux-gnu/libstdc++.so.6:
version `GLIBCXX_3.4.26' not found (required by
./x86-build/test/utest)
        linux-vdso.so.1 (0x00007ffd569f9000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(0x00007ff67df87000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
(0x00007ff67dd6f000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
(0x00007ff67db50000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff67d75f000)
        libsdbusplus.so.1 => not found
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0
(0x00007ff67d4db000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff67d13d000)
        /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/ld-2.29.so
=> /lib64/ld-linux-x86-64.so.2 (0x00007ff67e310000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff67cf35000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007ff67cd0f000)
        liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1
(0x00007ff67caf3000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20
(0x00007ff67c7d8000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff67c5d4000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0
(0x00007ff67c3bf000)
```

If I manually remove the extra single-quote `'`, it works just fine:

```
x86_64-openbmc-linux-g++ -m64 -march=core2 -mtune=core2 -msse3
-mfpmath=sse --sysroot=/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux
 -o test/utest 'test/9f86d08@@utest@exe/.._src_ut
ils.cpp.o' 'test/9f86d08@@utest@exe/test_utils.cpp.o'
-Wl,--no-undefined -Wl,--as-needed -Wl,--start-group -lstdc++fs
-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -flto
-Wl,-rpath,/usr/local/oecore
-x86_64/sysroots/core2-64-openbmc-linux/lib
-Wl,-rpath,/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib
-Wl,-dynamic-linker,/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/l
ib/ld-2.29.so /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgtest_main.a
-pthread /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgtest.a
/usr/local/oecore
-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgmock.a
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libphosphor_logging.so
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-
linux/usr/lib/libsdbusplus.so
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libsystemd.so
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libphosphor_dbus.so
-Wl,--en
d-group

$ ldd ./x86-build/test/utest
        linux-vdso.so.1 (0x00007ffe3fdef000)
        libstdc++.so.6 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libstdc++.so.6
(0x00007fde0340d000)
        libgcc_s.so.1 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libgcc_s.so.1
(0x00007fde033f4000)
        libpthread.so.0 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libpthread.so.0
(0x00007fde033a0000)
        libc.so.6 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libc.so.6
(0x00007fde031e8000)
        libsdbusplus.so.1 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libsdbusplus.so.1
(0x00007fde033ea000)
        libsystemd.so.0 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libsystemd.so.0
(0x00007fde03131000)
        libm.so.6 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libm.so.6
(0x00007fde02fee000)
        /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/ld-2.29.so
=> /lib64/ld-linux-x86-64.so.2 (0x00007fde033c0000)
        librt.so.1 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/librt.so.1
(0x00007fde02fe3000)
        liblzma.so.5 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/liblzma.so.5
(0x00007fde02fbb000)
        libcap.so.2 =>
/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libcap.so.2
(0x00007fde02fb3000)

```

So my question is, has anyone successfully run a unit test case in OE SDK
environment? And if yes, how it is done?

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Using meson unittest in OE SDK environment
  2019-08-02 10:21 Using meson unittest in OE SDK environment Lei YU
@ 2019-08-02 18:41 ` William Kennington
  2019-08-05  2:47   ` Lei YU
  0 siblings, 1 reply; 3+ messages in thread
From: William Kennington @ 2019-08-02 18:41 UTC (permalink / raw)
  To: Lei YU; +Cc: OpenBMC Maillist

It seems like a complete misuse of the SDK if you have to hardcode
that much of the toolchain information into the build scripts. This
should all be handled outside of your meson build.

On Fri, Aug 2, 2019 at 3:22 AM Lei YU <mine260309@gmail.com> wrote:
>
> It looks like more and more OpenBMC repos are going to use meson to replace
> autotools.
> I tried to use meson in a new repo, it works fine for builds, but I got some
> problems on running tests in OE SDK environment.
>
> I tried to pass rpath to link_args, but meson seems a bit weird on using this.
> (If interested) Please check the details in
> https://github.com/mine260309/phosphor-psu-code-mgmt/blob/cc35c10b5416dbcec0dfd6eaaa7d096d9ec4e733/test/meson.build#L45
>
> I was gathering correct `-Wl,-rpath,` options, save it in `testcase_flags`, and
> pass it to `link_args`.
> It is expected to work, and it's really close...
>
> However, meson passes the `testcase_flags` to the link command, but with an
> extra single-quote `'`, and unfortunately, it does not work as expected.
>
> See below detailed command meson executes:
>
> ```
> x86_64-openbmc-linux-g++ -m64 -march=core2 -mtune=core2 -msse3
> -mfpmath=sse --sysroot=/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux
>  -o test/utest 'test/9f86d08@@utest@exe/.._src_ut
> ils.cpp.o' 'test/9f86d08@@utest@exe/test_utils.cpp.o'
> -Wl,--no-undefined -Wl,--as-needed -Wl,--start-group -lstdc++fs
> -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -flto
> '-Wl,-rpath,/usr/local/oecore
> -x86_64/sysroots/core2-64-openbmc-linux/lib
> -Wl,-rpath,/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib
> -Wl,-dynamic-linker,/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/l
> ib/ld-2.29.so' /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgtest_main.a
> -pthread /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgtest.a
> /usr/local/oecore
> -x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgmock.a
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libphosphor_logging.so
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-
> linux/usr/lib/libsdbusplus.so
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libsystemd.so
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libphosphor_dbus.so
> -Wl,--en
> d-group
>
> $ ldd ./x86-build/test/utest
> ./x86-build/test/utest: /usr/lib/x86_64-linux-gnu/libstdc++.so.6:
> version `GLIBCXX_3.4.26' not found (required by
> ./x86-build/test/utest)
>         linux-vdso.so.1 (0x00007ffd569f9000)
>         libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
> (0x00007ff67df87000)
>         libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
> (0x00007ff67dd6f000)
>         libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
> (0x00007ff67db50000)
>         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff67d75f000)
>         libsdbusplus.so.1 => not found
>         libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0
> (0x00007ff67d4db000)
>         libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff67d13d000)
>         /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/ld-2.29.so
> => /lib64/ld-linux-x86-64.so.2 (0x00007ff67e310000)
>         librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff67cf35000)
>         liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007ff67cd0f000)
>         liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1
> (0x00007ff67caf3000)
>         libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20
> (0x00007ff67c7d8000)
>         libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff67c5d4000)
>         libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0
> (0x00007ff67c3bf000)
> ```
>
> If I manually remove the extra single-quote `'`, it works just fine:
>
> ```
> x86_64-openbmc-linux-g++ -m64 -march=core2 -mtune=core2 -msse3
> -mfpmath=sse --sysroot=/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux
>  -o test/utest 'test/9f86d08@@utest@exe/.._src_ut
> ils.cpp.o' 'test/9f86d08@@utest@exe/test_utils.cpp.o'
> -Wl,--no-undefined -Wl,--as-needed -Wl,--start-group -lstdc++fs
> -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -flto
> -Wl,-rpath,/usr/local/oecore
> -x86_64/sysroots/core2-64-openbmc-linux/lib
> -Wl,-rpath,/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib
> -Wl,-dynamic-linker,/usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/l
> ib/ld-2.29.so /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgtest_main.a
> -pthread /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgtest.a
> /usr/local/oecore
> -x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libgmock.a
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libphosphor_logging.so
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-
> linux/usr/lib/libsdbusplus.so
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libsystemd.so
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libphosphor_dbus.so
> -Wl,--en
> d-group
>
> $ ldd ./x86-build/test/utest
>         linux-vdso.so.1 (0x00007ffe3fdef000)
>         libstdc++.so.6 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libstdc++.so.6
> (0x00007fde0340d000)
>         libgcc_s.so.1 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libgcc_s.so.1
> (0x00007fde033f4000)
>         libpthread.so.0 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libpthread.so.0
> (0x00007fde033a0000)
>         libc.so.6 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libc.so.6
> (0x00007fde031e8000)
>         libsdbusplus.so.1 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/libsdbusplus.so.1
> (0x00007fde033ea000)
>         libsystemd.so.0 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libsystemd.so.0
> (0x00007fde03131000)
>         libm.so.6 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libm.so.6
> (0x00007fde02fee000)
>         /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/ld-2.29.so
> => /lib64/ld-linux-x86-64.so.2 (0x00007fde033c0000)
>         librt.so.1 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/librt.so.1
> (0x00007fde02fe3000)
>         liblzma.so.5 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/usr/lib/liblzma.so.5
> (0x00007fde02fbb000)
>         libcap.so.2 =>
> /usr/local/oecore-x86_64/sysroots/core2-64-openbmc-linux/lib/libcap.so.2
> (0x00007fde02fb3000)
>
> ```
>
> So my question is, has anyone successfully run a unit test case in OE SDK
> environment? And if yes, how it is done?

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Using meson unittest in OE SDK environment
  2019-08-02 18:41 ` William Kennington
@ 2019-08-05  2:47   ` Lei YU
  0 siblings, 0 replies; 3+ messages in thread
From: Lei YU @ 2019-08-05  2:47 UTC (permalink / raw)
  To: William Kennington; +Cc: OpenBMC Maillist

On Sat, Aug 3, 2019 at 2:41 AM William Kennington <wak@google.com> wrote:
>
> It seems like a complete misuse of the SDK if you have to hardcode
> that much of the toolchain information into the build scripts.

This is typical use in all the repos with autotool, see example in
https://github.com/openbmc/phosphor-hwmon/blob/2227bd52c5bb8d62dcfe33b58d65515d21e9be17/configure.ac#L149-L162

> This should all be handled outside of your meson build.

Could you kindly share how to configure this outside of meson?
The goal is to tell the linker to use the OE-SDK's ld.

Btw, I managed to config meson to specify the rpath and ld correct, by
splitting my previous linker args into two parts:
* Put dynamic-linker in `link_args`
* Put rpath in `build_rpath`

And it works as expected, see example in:
https://github.com/mine260309/phosphor-psu-code-mgmt/blob/cff6d1b02d43f3f7e4946e778dcfca388cec77e4/test/meson.build#L44-L45

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-08-05  2:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-02 10:21 Using meson unittest in OE SDK environment Lei YU
2019-08-02 18:41 ` William Kennington
2019-08-05  2:47   ` Lei YU

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.