Re: OpenSSL 3.0 for 14.0-RELEASE: issues with 1.x/3.x symbol clashing, ports linking against base OpenSSL, ports that don't compile/link against OpenSSL 3, etc

From: Kyle Evans <kevans_at_freebsd.org>
Date: Thu, 11 May 2023 15:45:18 UTC
On Thu, May 11, 2023 at 9:54 AM Enji Cooper <yaneurabeya@gmail.com> wrote:
>
>
> > On May 11, 2023, at 00:23, Antoine Brodin <antoine@freebsd.org> wrote:
> >
> > On Thu, May 11, 2023 at 6:31 AM Pierre Pronchery
> > <pierre@freebsdfoundation.org> wrote:
> >>
> >>                Hi everyone,
> >>
> >> It's been a long and tough fight, but I finally managed to complete a
> >> `make buildworld` on amd64 with the latest state of my work on OpenSSL
> >> 3; see https://github.com/freebsd/freebsd-src/pull/740 for a first draft
> >> of a pull-request via GitHub.
> >>
> >> I will probably not be able to work on this again until the DevSummit at
> >> BSDCan, so feel free to take it from there until then.
> >>
> >> HTH!
> >> -- khorben
> >
> > Thanks,  I have this error during buildworld:
> >
> > ===> secure/lib/libcrypto/modules/fips (all)
> > make[6]: /usr/obj/poudriere/data/src-openssl3/amd64.amd64/secure/lib/libcrypto/modules/fips/.depend,
> > 1: ignoring stale .depend for
> > /usr/obj/poudriere/data/src-openssl3/amd64.amd64/tmp/usr/lib/libcrypto.a
> > building shared library fips.so
> > cc -target x86_64-unknown-freebsd14.0
> > --sysroot=/usr/obj/poudriere/data/src-openssl3/amd64.amd64/tmp
> > -B/usr/obj/poudriere/data/src-openssl3/amd64.amd64/tmp/usr/bin
> > -Wl,-zrelro   -fstack-protector-strong -shared -Wl,-x
> > -Wl,--fatal-warnings -Wl,--warn-shared-textrel  -o fips.so.full
> > -Wl,-soname,fips.so fips_entry.pico fipsprov.pico self_test.pico
> > self_test_kats.pico  -lcrypto
> > ld: error: unable to find library -lcrypto
> > cc: error: linker command failed with exit code 1 (use -v to see invocation)
> > *** Error code 1
>
> Good find!
>
> The modules directory will likely need to be built in a later stage of world (after libcrypto has been installed). That, or LDFLAGS needs to be adjusted to find libcrypto in the build tree.
>

I suspect it's a fairly simple one, actually: move all of the parts
that actually build libcrypto into a subdir of secure/lib/libcrypto
and make sure there's a proper SUBDIR_DEPENDS_modules= libcrypto. The
module is built in secure/lib/libcrypto/Makefile, but I would guess
either it's racing the build of modules/ (SUBDIR) against the build of
the module in the parent Makefile, or it's just going to build the
SUBDIR first every time. I don't recall the exact behavior of make
here.

libcrypto is in _prebuild_libs, but I don't think we have any way you
can actually tell we're in the prebuild phase to avoid SUBDIR'ing in
the modules/ while we're doing the earlier build. If we did, the later
all pass should descend back into libcrypto/ and do nothing for the
lib itself but build the modules.

Thanks,

Kyle Evans