From 622bccd1fec06785bec59eb468804252b214f572 Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Wed, 8 Sep 2021 11:23:23 +0100 Subject: [PATCH] We can actually specify an old OS version perfectly well in the universal cross file, and it'll work for both slices (the ARM one will just get 11 instead). So do that, and document it. Also print out the target in the config summary. --- README.md | 20 +++++++------------- cross/macos-universal.txt | 6 +++--- cross/macos-x86_64.txt | 4 ++-- meson.build | 38 +++++++++++++++++++++++++------------- 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index a1ccc21..c017f07 100644 --- a/README.md +++ b/README.md @@ -258,17 +258,11 @@ this: $ meson build --cross-file cross/macos-universal.txt && ninja -C build ``` -However, the resulting binary will be marked as loadable on macOS 11+ -only, even for Intel, which is probably not what you want (ideally the -Intel slice would support older versions of the OS). A Makefile that -handles this explicitly is also provided: - -``` -$ make -f otherbuilds/Makefile.macos-universal -``` - -This produces only a static library, but it's a universal binary that -is compatible with macOS 10.7 onwards on the Intel side. +Note that the universal cross file also sets the minimum OS version to +the earliest supported macOS versions for both architectures. (Note +that actual compatibility will also depend on how any dependent +libraries have been compiled.) You can edit this in the +`cross/macos-universal.txt` file if you want a specific target. See "FFT and resampler selection" below for further build options. @@ -284,7 +278,7 @@ commercial terms. Ensure the Xcode command-line tools are installed, and ``` -$ meson build_ios --cross-file cross/ios.txt && ninja -C build +$ meson build_ios --cross-file cross/ios.txt && ninja -C build_ios ``` The output files will be found in the `build_ios` directory. @@ -292,7 +286,7 @@ The output files will be found in the `build_ios` directory. To build for the simulator, ``` -$ meson build_sim --cross-file cross/ios-simulator.txt && ninja -C build +$ meson build_sim --cross-file cross/ios-simulator.txt && ninja -C build_sim ``` The output files will be found in the `build_sim` directory. diff --git a/cross/macos-universal.txt b/cross/macos-universal.txt index 728980f..0242fa5 100644 --- a/cross/macos-universal.txt +++ b/cross/macos-universal.txt @@ -14,8 +14,8 @@ strip = 'strip' pkgconfig = 'pkg-config' [built-in options] -c_args = ['-arch', 'arm64', '-arch', 'x86_64'] -cpp_args = ['-arch', 'arm64', '-arch', 'x86_64'] -cpp_link_args = ['-arch', 'arm64', '-arch', 'x86_64'] +c_args = ['-arch', 'arm64', '-arch', 'x86_64', '-mmacosx-version-min=10.7'] +cpp_args = ['-arch', 'arm64', '-arch', 'x86_64', '-stdlib=libc++', '-mmacosx-version-min=10.7'] +cpp_link_args = ['-arch', 'arm64', '-arch', 'x86_64', '-stdlib=libc++', '-mmacosx-version-min=10.7'] diff --git a/cross/macos-x86_64.txt b/cross/macos-x86_64.txt index fb1a10d..64197a8 100644 --- a/cross/macos-x86_64.txt +++ b/cross/macos-x86_64.txt @@ -15,6 +15,6 @@ pkgconfig = 'pkg-config' [built-in options] c_args = ['-arch', 'x86_64'] -cpp_args = ['-arch', 'x86_64'] -cpp_link_args = ['-arch', 'x86_64'] +cpp_args = ['-arch', 'x86_64', '-stdlib=libc++'] +cpp_link_args = ['-arch', 'x86_64', '-stdlib=libc++'] diff --git a/meson.build b/meson.build index 38b70e2..35700cd 100644 --- a/meson.build +++ b/meson.build @@ -327,31 +327,43 @@ if system == 'darwin' '-exported_symbols_list', meson.source_root() / 'vamp/vamp-plugin.list' ] - have_version_min = false - foreach arg: get_option('cpp_args') - if arg.contains('version-min') - have_version_min = true - endif - endforeach - if architecture == 'aarch64' arch_flags += [ '-arch', 'arm64', ] - if not have_version_min - arch_flags += [ '-mmacosx-version-min=11' ] - endif elif architecture == 'x86_64' arch_flags += [ '-arch', 'x86_64', ] - if not have_version_min - arch_flags += [ '-mmacosx-version-min=10.13' ] - endif else # begin architecture != 'aarch64' or 'x86_64' error('Build for architecture ' + architecture + ' is not supported on this platform') endif # end architecture + have_version_min = false + foreach arg: get_option('cpp_args') + if arg.contains('version-min') + have_version_min = true + bits = arg.split('=') + if bits.length() > 1 + config_summary += { 'Target OS': bits[1] + '+' } + else + config_summary += { 'Target OS': '(unknown)' } + endif + endif + endforeach + + if not have_version_min + message('Using default minimum target OS version') + message('(consider specifying this in cross-file if earlier target is desired)') + if architecture == 'aarch64' + arch_flags += [ '-mmacosx-version-min=11' ] + config_summary += { 'Target OS': '11+' } + else + arch_flags += [ '-mmacosx-version-min=10.13' ] + config_summary += { 'Target OS': '10.13+' } + endif + endif + elif system == 'windows' feature_defines += ['-D_WIN32', '-DNOMINMAX', '-D_USE_MATH_DEFINES', '-DGETOPT_API='] if cpp.get_id() == 'msvc'