Hi Ross, I initially compiled on target thinking it would better to test against the installed library and headers as the user would see them. The tests just validate libffi's functionality, which works the same whether compiled at build time or on target but yes it then does makes the code more complex and hard to maintain too i agree. I'll rework this to compile the tests at build time in do_compile_ptest and just install the binaries so that run-ptest has minimalistic work to do.
Will send v5 once I've simplified and tested it. Best Regards, Pratik ________________________________________ From: Ross Burton <[email protected]> Sent: Wednesday, May 20, 2026 6:02 PM To: Pratik Farkase Cc: [email protected]; [email protected] Subject: Re: [OE-core][PATCH v4] libffi: add ptest support On 13 May 2026, at 14:27, Pratik Farkase via lists.openembedded.org <[email protected]> wrote: > > Add ptest support for libffi using all upstream test suites: bhaible, > call, closures, complex, go, and threads. > > Tests are compiled on-target against the installed libffi. Headers > (including the generated fficonfig.h) and a linker symlink are installed > in the ptest directory to avoid depending on libffi-dev. The point of ptests is to do integration testing of what we build, which this does not do. As you’re manually doing the compilation in run-ptest, why can’t this be done at build time? > +CC="gcc" > +CXX="g++" > +if ! command -v gcc >/dev/null 2>&1; then > + CC=$(find /usr/bin -name "*-gcc" | head -n 1) > + CXX=$(find /usr/bin -name "*-g++" | head -n 1) > +fi Please don’t be so overly defensive. If you were to continue with compilation on the target, then just RDEPEND on gcc-symlinks and then gcc is on PATH. > +CFLAGS="-O2 -Wall -I$PTEST_DIR/include -L$PTEST_DIR/lib" > + > +# bhaible tests validate by comparing paired output lines > +for t in test-call test-callback; do > + src="$PTEST_DIR/testsuite/libffi.bhaible/$t.c" > + if $CC $CFLAGS -o "$PTEST_DIR/$t" "$src" -lffi 2>&1; then > + "$PTEST_DIR/$t" > "$PTEST_DIR/$t.out" 2>&1 > + if ! LC_ALL=C uniq -u < "$PTEST_DIR/$t.out" | grep -q .; then > + echo "PASS: libffi.bhaible/$t" > + else > + echo "FAIL: libffi.bhaible/$t" > + cat "$PTEST_DIR/$t.out" > + fi > + else > + echo "SKIP: libffi.bhaible/$t" > + fi > + rm -f "$PTEST_DIR/$t" "$PTEST_DIR/$t.out" > +done > + > +# Individual test programs from upstream dejagnu suites > +for suite in libffi.call libffi.closures libffi.complex libffi.go > libffi.threads; do > + dir="$PTEST_DIR/testsuite/$suite" > + [ -d "$dir" ] || continue > + > + extra="" > + [ "$suite" = "libffi.threads" ] && extra="-lpthread" > + > + for src in "$dir"/*.c "$dir"/*.cc; do > + [ -f "$src" ] || continue > + grep -q "dg-do run" "$src" || continue > + > + name=$(basename "${src%.*}") > + > + # complex_int uses non-standard _Complex int, fails on some arches (riscv64) > + [ "$name" = "complex_int" ] && continue > + case "$src" in > + *.cc) cc="$CXX";; > + *) cc="$CC";; > + esac > + > + if $cc $CFLAGS -o "$PTEST_DIR/$name" "$src" -lffi $extra 2>&1; then > + if "$PTEST_DIR/$name" 2>&1; then > + echo "PASS: $suite/$name" > + else > + echo "FAIL: $suite/$name" > + fi > + else > + echo "SKIP: $suite/$name" > + fi > + rm -f "$PTEST_DIR/$name" > + done > +done This is a _lot_ of logic that we have to maintain forever to run some integration tests… Ross
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#237481): https://lists.openembedded.org/g/openembedded-core/message/237481 Mute This Topic: https://lists.openembedded.org/mt/119296973/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
