Sorry to rephrase this, we would like a single binary to work on both macOS 10.15 and macOS 11 as well as on both iOS 13 and iOS 14 while ALSO supporting preadv/pwritev when running on the newer OS.
-j On Sat, Jan 23, 2021 at 12:00 PM Joelle van Dyne <j...@getutm.app> wrote: > > The problem here is that we would like to compile on macOS 11 and be > able to run the built binaries on macOS 10.15 or lower. Without the > runtime checks, you'll have a crash when calling preadv/pwritev. > > -j > > On Sat, Jan 23, 2021 at 5:53 AM Peter Maydell <peter.mayd...@linaro.org> > wrote: > > > > On Sat, 23 Jan 2021 at 05:03, Joelle van Dyne <j...@getutm.app> wrote: > > > > > > macOS 11/iOS 14 added preadv/pwritev APIs. Due to weak linking, configure > > > will succeed with CONFIG_PREADV even when targeting a lower OS version. > > > We therefore need to check at run time if we can actually use these APIs. > > > > If you make the preadv check be a meson.build has_function() > > test, I think (but have not tested) that it ought to correctly > > fail the link in the targeting-lower-OS-version case, because > > meson.build's has_function() implementation for clang > > https://github.com/mesonbuild/meson/blob/bad0e95caec4cf49165572df3cf2edc4832280fa/mesonbuild/compilers/mixins/clang.py#L89 > > adds -Wl,-no-weak-imports when it's building the test-case > > exactly to force that linker visibility obeys the minimum > > version targets for OSX. > > > > If that works I think it would be neater than delaying the > > check to runtime (and it would also mean another test moved > > out of configure and into meson.build, which is the direction > > we're heading anyway). > > > > thanks > > -- PMM