cctools: remove code for macOS < 11

As with ld64, flags added as part of macOS 10.12 compatibility shims
(in this case `-undefined dynamic_lookup`) were inadvertently fixing
the build. The Xcode project links `otool-classic` and `strip` against
`libc++`; why it was previously working on AArch64 without linking
against it or passing `-undefined dynamic_lookup`, I can’t fathom.
This commit is contained in:
Emily 2024-10-05 20:07:39 +01:00
parent fa10b9c7f8
commit af82e11559
3 changed files with 4 additions and 75 deletions

View File

@ -1,50 +0,0 @@
From 989ba5e30cefa0dd8990da158661713c4a21c0fe Mon Sep 17 00:00:00 2001
From: Randy Eckenrode <randy@largeandhighquality.com>
Date: Thu, 11 Apr 2024 18:05:34 -0400
Subject: [PATCH 3/6] Fix utimensat compatability with the 10.12 SDK
---
include/compat.h | 3 +++
libstuff/writeout.c | 2 +-
misc/lipo.c | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
create mode 100644 include/compat.h
diff --git a/include/compat.h b/include/compat.h
new file mode 100644
index 0000000..8b1b866
--- /dev/null
+++ b/include/compat.h
@@ -0,0 +1,3 @@
+#pragma once
+#include <time.h>
+extern int utimensat(int dirfd, const char* pathname, const struct timespec times[_Nullable 2], int flags);
diff --git a/libstuff/writeout.c b/libstuff/writeout.c
index f904caa..03fa535 100644
--- a/libstuff/writeout.c
+++ b/libstuff/writeout.c
@@ -297,7 +297,7 @@ no_throttle:
* have been zeroed out when the library was created. writeout
* will not zero out the modification time in the filesystem.
*/
- if (__builtin_available(macOS 10.12, *)) {
+ if (__builtin_available(macOS 10.13, *)) {
struct timespec times[2] = {0};
memcpy(&times[0], &toc_timespec, sizeof(struct timespec));
memcpy(&times[1], &toc_timespec, sizeof(struct timespec));
diff --git a/misc/lipo.c b/misc/lipo.c
index 04a3eca..887c049 100644
--- a/misc/lipo.c
+++ b/misc/lipo.c
@@ -607,7 +607,7 @@ unknown_flag:
if(close(fd) == -1)
system_fatal("can't close output file: %s",output_file);
#ifndef __OPENSTEP__
- if (__builtin_available(macOS 10.12, *)) {
+ if (__builtin_available(macOS 10.13, *)) {
time_result = utimensat(AT_FDCWD, output_file,
output_times, 0);
}
--
2.45.2

View File

@ -28,26 +28,11 @@ target_prefix = get_option('target_prefix')
# Dependencies
cc = meson.get_compiler('c')
libcxx = cc.find_library('c++')
libcodedirectory = cc.find_library('codedirectory')
libprunetrie = cc.find_library('prunetrie')
# Feature tests
# Add compatibility header for Darwin SDKs that dont define `utimensat`.
utimensat_test = '''
#include <fcntl.h>
#include <sys/stat.h>
int main(int argc, char* argv[]) {
utimensat(AT_FDCWD, NULL, NULL, 0);
return 0;
}
'''
if host_machine.system() == 'darwin' and not cc.compiles(utimensat_test, name : 'supports utimensat')
add_project_arguments('-include', 'compat.h', language : 'c')
add_project_link_arguments('-undefined', 'dynamic_lookup', language : 'c')
endif
incdirs = include_directories('include')
# Static libraries
@ -454,6 +439,7 @@ install_man('man/nmedit.1')
otool = executable(
f'@target_prefix@otool',
c_args : ['-DEFI_SUPPORT'],
dependencies : [libcxx],
include_directories : incdirs,
install : true,
link_with : [libstuff],
@ -553,7 +539,7 @@ install_man('man/strings.1')
strip = executable(
f'@target_prefix@strip',
c_args : ['-DTRIE_SUPPORT'],
dependencies : [libcodedirectory, libprunetrie],
dependencies : [libcxx, libcodedirectory, libprunetrie],
include_directories : incdirs,
install : true,
link_with : [libstuff],

View File

@ -5,7 +5,6 @@
buildPackages,
ld64,
llvm,
memstreamHook,
meson,
ninja,
openssl,
@ -73,9 +72,6 @@ stdenv.mkDerivation (finalAttrs: {
./0001-Fix-build-issues-with-misc-redo_prebinding.c.patch
# Use libcd_is_blob_a_linker_signature as defined in the libcodedirectory.h header
./0002-Rely-on-libcd_is_blob_a_linker_signature.patch
# cctools uses availability checks for `utimensat`, but it checks the wrong version.
# Also, provide a definition to avoid implicit function definition errors.
./0003-Fix-utimensat-compatability-with-the-10.12-SDK.patch
# Use the nixpkgs clangs path as the prefix.
./0004-Use-nixpkgs-clang-with-the-assembler-driver.patch
# Make sure cctools can find ld64 in the store
@ -102,9 +98,6 @@ stdenv.mkDerivation (finalAttrs: {
substituteInPlace misc/libtool.c \
--subst-var-by targetPrefix '${targetPrefix}'
# The version of this file distributed with cctools defines several CPU types missing from the 10.12 SDK.
ln -s machine-cctools.h include/mach/machine.h
# Use libxar from nixpkgs
for cctool_src in misc/nm.c otool/print_bitcode.c; do
substituteInPlace $cctool_src \
@ -130,7 +123,7 @@ stdenv.mkDerivation (finalAttrs: {
buildInputs = [
ld64
llvm
] ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) [ memstreamHook ];
];
mesonBuildType = "release";