Merge pull request #240433 from reckenrode/darwin-stdenv-rework
darwin.stdenv: Darwin stdenv rework
This commit is contained in:
commit
f0a11a54be
12 changed files with 1507 additions and 648 deletions
|
@ -0,0 +1,11 @@
|
|||
--- a/CoreFoundation/RunLoop.subproj/CFMessagePort.c 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ b/CoreFoundation/RunLoop.subproj/CFMessagePort.c 2023-06-09 20:25:28.599209755 -0400
|
||||
@@ -28,6 +28,8 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+#include <bootstrap.h>
|
||||
+
|
||||
extern pid_t getpid(void);
|
||||
|
||||
#define __kCFMessagePortMaxNameLengthMax 255
|
|
@ -0,0 +1,25 @@
|
|||
diff -u a/CoreFoundation/URL.subproj/CFURLComponents.c b/CoreFoundation/URL.subproj/CFURLComponents.c
|
||||
--- a/CoreFoundation/URL.subproj/CFURLComponents.c 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ b/CoreFoundation/URL.subproj/CFURLComponents.c 2023-06-09 20:36:52.995514573 -0400
|
||||
@@ -66,7 +66,8 @@
|
||||
return CFRetain(CFSTR("A really nice CFURLComponents object"));
|
||||
}
|
||||
|
||||
-CF_CROSS_PLATFORM_EXPORT void __CFURLComponentsDeallocate(CFURLComponentsRef instance) {
|
||||
+CF_CROSS_PLATFORM_EXPORT void __CFURLComponentsDeallocate(CFTypeRef cf) {
|
||||
+ CFURLComponentsRef instance = (CFURLComponentsRef)cf;
|
||||
__CFGenericValidateType(instance, _CFURLComponentsGetTypeID());
|
||||
|
||||
if (instance->_urlString) CFRelease(instance->_urlString);
|
||||
diff -u a/CoreFoundation/URL.subproj/CFURLComponents.h b/CoreFoundation/URL.subproj/CFURLComponents.h
|
||||
--- a/CoreFoundation/URL.subproj/CFURLComponents.h 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ b/CoreFoundation/URL.subproj/CFURLComponents.h 2023-06-09 20:39:36.967857713 -0400
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
CF_EXPORT CFTypeID _CFURLComponentsGetTypeID(void);
|
||||
|
||||
-CF_CROSS_PLATFORM_EXPORT void __CFURLComponentsDeallocate(CFURLComponentsRef);
|
||||
+CF_CROSS_PLATFORM_EXPORT void __CFURLComponentsDeallocate(CFTypeRef);
|
||||
|
||||
// URLComponents are always mutable.
|
||||
CF_EXPORT _Nullable CFURLComponentsRef _CFURLComponentsCreate(CFAllocatorRef alloc);
|
|
@ -0,0 +1,66 @@
|
|||
--- a/CoreFoundation/CMakeLists.txt 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ b/CoreFoundation/CMakeLists.txt 2023-06-29 18:52:49.096019700 -0400
|
||||
@@ -129,7 +129,7 @@
|
||||
Base.subproj/CFByteOrder.h
|
||||
Base.subproj/CFUUID.h
|
||||
Base.subproj/CFUtilities.h
|
||||
- Base.subproj/SwiftRuntime/CoreFoundation.h
|
||||
+ Base.subproj/CoreFoundation.h # The SwiftRuntime version of this file causes linker errors and is not correct for standalone CF.
|
||||
Base.subproj/SwiftRuntime/TargetConditionals.h
|
||||
# Collections
|
||||
Collections.subproj/CFArray.h
|
||||
@@ -245,6 +245,8 @@
|
||||
# RunLoop
|
||||
RunLoop.subproj/CFRunLoop.c
|
||||
RunLoop.subproj/CFSocket.c
|
||||
+ RunLoop.subproj/CFMachPort.c # These files are missing from the upstream `CMakeLists.txt` but required to build on Darwin.
|
||||
+ RunLoop.subproj/CFMessagePort.c
|
||||
# Stream
|
||||
Stream.subproj/CFConcreteStreams.c
|
||||
Stream.subproj/CFSocketStream.c
|
||||
@@ -336,6 +338,11 @@
|
||||
target_include_directories(CoreFoundation
|
||||
PRIVATE
|
||||
${CURL_INCLUDE_DIRS})
|
||||
+elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||
+ find_package(CURL REQUIRED)
|
||||
+ target_include_directories(CoreFoundation PRIVATE ${CURL_INCLUDE_DIRS})
|
||||
+ find_package(LibXml2 REQUIRED)
|
||||
+ target_include_directories(CoreFoundation PRIVATE ${LIBXML2_INCLUDE_DIR})
|
||||
else()
|
||||
target_include_directories(CoreFoundation
|
||||
PRIVATE
|
||||
@@ -365,6 +372,10 @@
|
||||
PRIVATE
|
||||
${CURL_LIBRARIES}
|
||||
${LIBXML2_LIBRARIES})
|
||||
+elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||
+ target_link_libraries(CoreFoundation PRIVATE
|
||||
+ ${CURL_LIBRARIES}
|
||||
+ ${LIBXML2_LIBRARIES})
|
||||
else()
|
||||
target_link_libraries(CoreFoundation
|
||||
PRIVATE
|
||||
@@ -398,9 +400,19 @@
|
||||
target_link_libraries(CoreFoundation
|
||||
PRIVATE
|
||||
icucore)
|
||||
- set_target_properties(CoreFoundation
|
||||
- PROPERTIES LINK_FLAGS
|
||||
- -Xlinker;-alias_list;-Xlinker;Base.subproj/DarwinSymbolAliases;-twolevel_namespace;-sectcreate;__UNICODE;__csbitmaps;CharacterSets/CFCharacterSetBitmaps.bitmap;-sectcreate;__UNICODE;__properties;CharacterSets/CFUniCharPropertyDatabase.data;-sectcreate;__UNICODE;__data;CharacterSets/CFUnicodeData-L.mapping;-segprot;__UNICODE;r;r)
|
||||
+ target_link_options(CoreFoundation
|
||||
+ PUBLIC
|
||||
+ "LINKER:-alias_list,../Base.subproj/DarwinSymbolAliases"
|
||||
+ "LINKER:-twolevel_namespace"
|
||||
+ "LINKER:-sectcreate,__UNICODE,__csbitmaps,../CharacterSets/CFCharacterSetBitmaps.bitmap"
|
||||
+ "LINKER:-sectcreate,__UNICODE,__properties,../CharacterSets/CFUniCharPropertyDatabase.data"
|
||||
+ "LINKER:-sectcreate,__UNICODE,__data,../CharacterSets/CFUnicodeData-L.mapping"
|
||||
+ "LINKER:-segprot,__UNICODE,r,r"
|
||||
+ "LINKER:-current_version,1454.90.0"
|
||||
+ "LINKER:-compatibility_version,150.0.0"
|
||||
+ "LINKER:-init,___CFInitialize")
|
||||
+ set(CMAKE_SHARED_LIBRARY_PREFIX "")
|
||||
+ set(CMAKE_SHARED_LIBRARY_SUFFIX "")
|
||||
endif()
|
||||
|
||||
install(TARGETS
|
|
@ -0,0 +1,23 @@
|
|||
diff -u aa/CoreFoundation/CMakeLists.txt b/CoreFoundation/CMakeLists.txt
|
||||
--- a/CoreFoundation/CMakeLists.txt 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ b/CoreFoundation/CMakeLists.txt 2023-06-29 18:59:19.492601179 -0400
|
||||
|
||||
@@ -424,16 +424,11 @@
|
||||
set(CMAKE_SHARED_LIBRARY_SUFFIX "")
|
||||
endif()
|
||||
|
||||
-install(TARGETS
|
||||
- CoreFoundation
|
||||
- DESTINATION
|
||||
- "${CMAKE_INSTALL_FULL_LIBDIR}")
|
||||
install(DIRECTORY
|
||||
${CoreFoundation_FRAMEWORK_DIRECTORY}
|
||||
DESTINATION
|
||||
- ${CMAKE_INSTALL_PREFIX}/System/Library/Frameworks
|
||||
- USE_SOURCE_PERMISSIONS
|
||||
- PATTERN PrivateHeaders EXCLUDE)
|
||||
+ ${CMAKE_INSTALL_PREFIX}/Library/Frameworks
|
||||
+ USE_SOURCE_PERMISSIONS)
|
||||
|
||||
|
||||
# TODO(compnerd) formalize this
|
|
@ -0,0 +1,84 @@
|
|||
diff -u a/CoreFoundation/CMakeLists.txt b/CoreFoundation/CMakeLists.txt
|
||||
--- a/CoreFoundation/CMakeLists.txt 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ b/CoreFoundation/CMakeLists.txt 2023-06-29 18:59:08.659632504 -0400
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
-cmake_minimum_required(VERSION 3.4.3)
|
||||
+cmake_minimum_required(VERSION 3.14)
|
||||
list(APPEND CMAKE_MODULE_PATH
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
${FRAMEWORK_LIBRARY_TYPE}
|
||||
FRAMEWORK_DIRECTORY
|
||||
CoreFoundation_FRAMEWORK_DIRECTORY
|
||||
+ VERSION
|
||||
+ A
|
||||
MODULE_MAP
|
||||
Base.subproj/module.modulemap
|
||||
PRIVATE_HEADERS
|
||||
diff -u a/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake b/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake
|
||||
--- a/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ b/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake 2023-06-29 18:57:55.792860996 -0400
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
function(add_framework NAME)
|
||||
set(options STATIC SHARED)
|
||||
- set(single_value_args MODULE_MAP FRAMEWORK_DIRECTORY)
|
||||
+ set(single_value_args MODULE_MAP FRAMEWORK_DIRECTORY VERSION)
|
||||
set(multiple_value_args PRIVATE_HEADERS PUBLIC_HEADERS SOURCES)
|
||||
cmake_parse_arguments(AF "${options}" "${single_value_args}" "${multiple_value_args}" ${ARGN})
|
||||
|
||||
@@ -14,26 +14,32 @@
|
||||
set(AF_TYPE SHARED)
|
||||
endif()
|
||||
|
||||
+ file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${NAME}.framework/Versions/${AF_VERSION})
|
||||
+ file(CREATE_LINK ${AF_VERSION} ${CMAKE_BINARY_DIR}/${NAME}.framework/Versions/Current SYMBOLIC)
|
||||
+
|
||||
if(AF_MODULE_MAP)
|
||||
file(COPY
|
||||
${AF_MODULE_MAP}
|
||||
DESTINATION
|
||||
- ${CMAKE_BINARY_DIR}/${NAME}.framework/Modules
|
||||
+ ${CMAKE_BINARY_DIR}/${NAME}.framework/Versions/Current/Modules
|
||||
NO_SOURCE_PERMISSIONS)
|
||||
+ file(CREATE_LINK Versions/Current/Modules ${CMAKE_BINARY_DIR}/${NAME}.framework/Modules SYMBOLIC)
|
||||
endif()
|
||||
if(AF_PUBLIC_HEADERS)
|
||||
file(COPY
|
||||
${AF_PUBLIC_HEADERS}
|
||||
DESTINATION
|
||||
- ${CMAKE_BINARY_DIR}/${NAME}.framework/Headers
|
||||
+ ${CMAKE_BINARY_DIR}/${NAME}.framework/Versions/Current/Headers
|
||||
NO_SOURCE_PERMISSIONS)
|
||||
+ file(CREATE_LINK Versions/Current/Headers ${CMAKE_BINARY_DIR}/${NAME}.framework/Headers SYMBOLIC)
|
||||
endif()
|
||||
if(AF_PRIVATE_HEADERS)
|
||||
file(COPY
|
||||
${AF_PRIVATE_HEADERS}
|
||||
DESTINATION
|
||||
- ${CMAKE_BINARY_DIR}/${NAME}.framework/PrivateHeaders
|
||||
+ ${CMAKE_BINARY_DIR}/${NAME}.framework/Versions/Current/PrivateHeaders
|
||||
NO_SOURCE_PERMISSIONS)
|
||||
+ file(CREATE_LINK Versions/Current/PrivateHeaders ${CMAKE_BINARY_DIR}/${NAME}.framework/PrivateHeaders SYMBOLIC)
|
||||
endif()
|
||||
add_custom_target(${NAME}_POPULATE_HEADERS
|
||||
DEPENDS
|
||||
@@ -51,13 +57,15 @@
|
||||
set_target_properties(${NAME}
|
||||
PROPERTIES
|
||||
LIBRARY_OUTPUT_DIRECTORY
|
||||
- ${CMAKE_BINARY_DIR}/${NAME}.framework)
|
||||
+ ${CMAKE_BINARY_DIR}/${NAME}.framework/Versions/Current)
|
||||
target_compile_options(${NAME}
|
||||
PRIVATE
|
||||
-F;${CMAKE_BINARY_DIR}
|
||||
-I;${CMAKE_BINARY_DIR}/${NAME}.framework/PrivateHeaders)
|
||||
add_dependencies(${NAME} ${NAME}_POPULATE_HEADERS)
|
||||
|
||||
+ file(CREATE_LINK Versions/Current/${NAME} ${CMAKE_BINARY_DIR}/${NAME}.framework/${NAME} SYMBOLIC)
|
||||
+
|
||||
if(AF_FRAMEWORK_DIRECTORY)
|
||||
set(${AF_FRAMEWORK_DIRECTORY} ${CMAKE_BINARY_DIR}/${NAME}.framework PARENT_SCOPE)
|
||||
endif()
|
|
@ -0,0 +1,31 @@
|
|||
diff -ur d/CoreFoundation/CMakeLists.txt e/CoreFoundation/CMakeLists.txt
|
||||
--- d/CoreFoundation/CMakeLists.txt 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ e/CoreFoundation/CMakeLists.txt 2023-06-29 19:13:15.561253229 -0400
|
||||
@@ -343,6 +343,7 @@
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||
find_package(CURL REQUIRED)
|
||||
target_include_directories(CoreFoundation PRIVATE ${CURL_INCLUDE_DIRS})
|
||||
+ find_package(ICU COMPONENTS uc i18n data REQUIRED)
|
||||
find_package(LibXml2 REQUIRED)
|
||||
target_include_directories(CoreFoundation PRIVATE ${LIBXML2_INCLUDE_DIR})
|
||||
else()
|
||||
@@ -377,6 +378,9 @@
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||
target_link_libraries(CoreFoundation PRIVATE
|
||||
${CURL_LIBRARIES}
|
||||
+ ICU::uc
|
||||
+ ICU::i18n
|
||||
+ ICU::data
|
||||
${LIBXML2_LIBRARIES})
|
||||
else()
|
||||
target_link_libraries(CoreFoundation
|
||||
@@ -408,9 +412,6 @@
|
||||
PROPERTIES LINK_FLAGS
|
||||
-Xlinker;@${CMAKE_SOURCE_DIR}/linux.ld;-Bsymbolic)
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||
- target_link_libraries(CoreFoundation
|
||||
- PRIVATE
|
||||
- icucore)
|
||||
target_link_options(CoreFoundation
|
||||
PUBLIC
|
||||
"LINKER:-alias_list,../Base.subproj/DarwinSymbolAliases"
|
|
@ -0,0 +1,46 @@
|
|||
diff -u a/CoreFoundation/CMakeLists.txt b/CoreFoundation/CMakeLists.txt
|
||||
--- a/CoreFoundation/CMakeLists.txt 1969-12-31 19:00:01.000000000 -0500
|
||||
+++ b/CoreFoundation/CMakeLists.txt 2023-06-29 19:39:30.074449222 -0400
|
||||
@@ -104,7 +104,6 @@
|
||||
# URL
|
||||
URL.subproj/CFURL.inc.h
|
||||
URL.subproj/CFURLPriv.h
|
||||
- URL.subproj/CFURLSessionInterface.h
|
||||
PUBLIC_HEADERS
|
||||
# FIXME: PrivateHeaders referenced by public headers
|
||||
Base.subproj/CFKnownLocations.h
|
||||
@@ -120,7 +119,6 @@
|
||||
String.subproj/CFRegularExpression.h
|
||||
String.subproj/CFRunArray.h
|
||||
URL.subproj/CFURLPriv.h
|
||||
- URL.subproj/CFURLSessionInterface.h
|
||||
|
||||
# AppServices
|
||||
AppServices.subproj/CFNotificationCenter.h
|
||||
@@ -280,8 +278,7 @@
|
||||
URL.subproj/CFURL.c
|
||||
URL.subproj/CFURLAccess.c
|
||||
URL.subproj/CFURLComponents.c
|
||||
- URL.subproj/CFURLComponents_URIParser.c
|
||||
- URL.subproj/CFURLSessionInterface.c)
|
||||
+ URL.subproj/CFURLComponents_URIParser.c)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL Linux OR CMAKE_SYSTEM_NAME STREQUAL Android)
|
||||
target_compile_definitions(CoreFoundation
|
||||
PRIVATE
|
||||
@@ -341,8 +338,6 @@
|
||||
PRIVATE
|
||||
${CURL_INCLUDE_DIRS})
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||
- find_package(CURL REQUIRED)
|
||||
- target_include_directories(CoreFoundation PRIVATE ${CURL_INCLUDE_DIRS})
|
||||
find_package(ICU COMPONENTS uc i18n data REQUIRED)
|
||||
find_package(LibXml2 REQUIRED)
|
||||
target_include_directories(CoreFoundation PRIVATE ${LIBXML2_INCLUDE_DIR})
|
||||
@@ -377,7 +372,6 @@
|
||||
${LIBXML2_LIBRARIES})
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
|
||||
target_link_libraries(CoreFoundation PRIVATE
|
||||
- ${CURL_LIBRARIES}
|
||||
ICU::uc
|
||||
ICU::i18n
|
||||
ICU::data
|
|
@ -1,4 +1,4 @@
|
|||
{ lib, stdenv, fetchFromGitHub, fetchurl, makeSetupHook, ninja, python3, curl, libxml2, objc4, ICU }:
|
||||
{ lib, stdenv, fetchFromGitHub, fetchurl, makeSetupHook, cmake, ninja, pkg-config, launchd, libdispatch, python3, libxml2, objc4, icu }:
|
||||
|
||||
let
|
||||
# 10.12 adds a new sysdir.h that our version of CF in the main derivation depends on, but
|
||||
|
@ -21,29 +21,39 @@ stdenv.mkDerivation {
|
|||
sha256 = "17kpql0f27xxz4jjw84vpas5f5sn4vdqwv10g151rc3rswbwln1z";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ ninja python3 ];
|
||||
buildInputs = [ curl libxml2 objc4 ICU ];
|
||||
nativeBuildInputs = [ cmake ninja pkg-config python3 ];
|
||||
buildInputs = [ (lib.getDev launchd) libdispatch libxml2 objc4 icu ];
|
||||
|
||||
patches = [ ./0001-Add-missing-TARGET_OS_-defines.patch ];
|
||||
patches = [
|
||||
./0001-Add-missing-TARGET_OS_-defines.patch
|
||||
# CFMessagePort.h uses `bootstrap_check_in` without declaring it, which is defined in the launchd headers.
|
||||
./0002-Add-missing-launchd-header.patch
|
||||
# CFURLComponents fails to build with clang 16 due to an invalid pointer conversion. This is fixed upstream.
|
||||
./0003-Fix-incompatible-pointer-conversion.patch
|
||||
# Fix `CMakeLists.txt` to allow it to be used instead of `build.py` to build on Darwin.
|
||||
./0004-Fix-Darwin-cmake-build.patch
|
||||
# Install CF framework in `$out/Library/Frameworks` instead of `$out/System/Frameworks`.
|
||||
./0005-Fix-framework-installation-path.patch
|
||||
# Build a framework that matches the contents of the system CoreFoundation. This patch adds
|
||||
# versioning and drops the prefix and suffix, so the dynamic library is named `CoreFoundation`
|
||||
# instead of `libCoreFoundation.dylib`.
|
||||
./0006-System-CF-framework-compatibility.patch
|
||||
# Link against the nixpkgs ICU instead of using Apple’s vendored version.
|
||||
./0007-Use-nixpkgs-icu.patch
|
||||
# Don’t link against libcurl. This breaks a cycle between CF and curl, which depends on CF and
|
||||
# uses the SystemConfiguration framework to support NAT64.
|
||||
# This is safe because the symbols provided in CFURLSessionInterface are not provided by the
|
||||
# system CoreFoundation. They are meant to be used by the implementation of `NSURLSession` in
|
||||
# swift-corelibs-foundation, which is not built because it is not fully compatible with the
|
||||
# system Foundation used on Darwin.
|
||||
./0008-Dont-link-libcurl.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
cd CoreFoundation
|
||||
|
||||
cp ${sysdir-free-system-directories} Base.subproj/CFSystemDirectories.c
|
||||
|
||||
# In order, since I can't comment individual lines:
|
||||
# 1. Disable dispatch support for now
|
||||
# 2. For the linker too
|
||||
# 3. Use the legit CoreFoundation.h, not the one telling you not to use it because of Swift
|
||||
substituteInPlace build.py \
|
||||
--replace "cf.CFLAGS += '-DDEPLOYMENT" '#' \
|
||||
--replace "cf.LDFLAGS += '-ldispatch" '#'
|
||||
|
||||
# Fix sandbox impurities.
|
||||
substituteInPlace ../lib/script.py \
|
||||
--replace '/bin/cp' cp
|
||||
patchShebangs --build ../configure
|
||||
|
||||
# Includes xpc for some initialization routine that they don't define anyway, so no harm here
|
||||
substituteInPlace PlugIn.subproj/CFBundlePriv.h \
|
||||
--replace '#if (TARGET_OS_MAC' '#if (0'
|
||||
|
@ -55,55 +65,27 @@ stdenv.mkDerivation {
|
|||
# The MIN macro doesn't seem to be defined sensibly for us. Not sure if our stdenv or their bug
|
||||
substituteInPlace Base.subproj/CoreFoundation_Prefix.h \
|
||||
--replace '#if DEPLOYMENT_TARGET_WINDOWS || DEPLOYMENT_TARGET_LINUX' '#if 1'
|
||||
|
||||
# Somehow our ICU doesn't have this, probably because it's too old (we'll update it soon when we update the rest of the SDK)
|
||||
substituteInPlace Locale.subproj/CFLocale.c \
|
||||
--replace '#if U_ICU_VERSION_MAJOR_NUM' '#if 0 //'
|
||||
'';
|
||||
|
||||
BUILD_DIR = "./Build";
|
||||
CFLAGS = "-DINCLUDE_OBJC -I${libxml2.dev}/include/libxml2"; # They seem to assume we include objc in some places and not in others, make a PR; also not sure why but libxml2 include path isn't getting picked up from buildInputs
|
||||
env.NIX_CFLAGS_COMPILE = toString [
|
||||
# Silence warnings regarding other targets
|
||||
"-Wno-error=undef-prefix"
|
||||
# Avoid redefinitions when including objc headers
|
||||
"-DINCLUDE_OBJC=1"
|
||||
];
|
||||
|
||||
# I'm guessing at the version here. https://github.com/apple/swift-corelibs-foundation/commit/df3ec55fe6c162d590a7653d89ad669c2b9716b1 imported "high sierra"
|
||||
# and this version is a version from there. No idea how accurate it is.
|
||||
LDFLAGS = "-current_version 1454.90.0 -compatibility_version 150.0.0 -init ___CFInitialize";
|
||||
|
||||
configurePhase = ''
|
||||
../configure release --sysroot UNUSED
|
||||
'';
|
||||
cmakeFlags = [
|
||||
"-DBUILD_SHARED_LIBS=ON"
|
||||
"-DCF_ENABLE_LIBDISPATCH=OFF"
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
postInstall = ''
|
||||
install_name_tool -id '@rpath/CoreFoundation.framework/Versions/A/CoreFoundation' \
|
||||
"$out/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation"
|
||||
|
||||
ninja -j $NIX_BUILD_CORES
|
||||
|
||||
runHook postBuild
|
||||
mkdir -p "$out/nix-support"
|
||||
substituteAll ${./pure-corefoundation-hook.sh} "$out/nix-support/setup-hook"
|
||||
'';
|
||||
|
||||
# TODO: their build system sorta kinda can do this, but it doesn't seem to work right now
|
||||
# Also, this includes a bunch of private headers in the framework, which is not what we want
|
||||
installPhase = ''
|
||||
base="$out/Library/Frameworks/CoreFoundation.framework"
|
||||
mkdir -p $base/Versions/A/{Headers,PrivateHeaders,Modules}
|
||||
|
||||
cp ./Build/CoreFoundation/libCoreFoundation.dylib $base/Versions/A/CoreFoundation
|
||||
|
||||
# Note that this could easily live in the ldflags above as `-install_name @rpath/...` but
|
||||
# https://github.com/NixOS/nixpkgs/issues/46434 thwarts that, so for now I'm hacking it up
|
||||
# after the fact.
|
||||
install_name_tool -id '@rpath/CoreFoundation.framework/Versions/A/CoreFoundation' $base/Versions/A/CoreFoundation
|
||||
|
||||
cp ./Build/CoreFoundation/usr/include/CoreFoundation/*.h $base/Versions/A/Headers
|
||||
cp ./Build/CoreFoundation/usr/include/CoreFoundation/module.modulemap $base/Versions/A/Modules
|
||||
|
||||
ln -s A $base/Versions/Current
|
||||
|
||||
for i in CoreFoundation Headers Modules; do
|
||||
ln -s Versions/Current/$i $base/$i
|
||||
done
|
||||
'';
|
||||
|
||||
darwinEnvHook = makeSetupHook { name = "darwin-env-hook"; } ./pure-corefoundation-hook.sh;
|
||||
}
|
||||
|
|
26
pkgs/stdenv/darwin/README.md
Normal file
26
pkgs/stdenv/darwin/README.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Darwin stdenv design goals
|
||||
|
||||
There are two more goals worth calling out explicitly:
|
||||
|
||||
1. The standard environment should build successfully with sandboxing enabled on Darwin. It is
|
||||
fine if a package requires a `sandboxProfile` to build, but it should not be necessary to
|
||||
disable the sandbox to build the stdenv successfully; and
|
||||
2. The output should depend weakly on the bootstrap tools. Historically, Darwin required updating
|
||||
the bootstrap tools prior to updating the version of LLVM used in the standard environment.
|
||||
By not depending on a specific version, the LLVM used on Darwin can be updated simply by
|
||||
bumping the definition of llvmPackages in `all-packages.nix`.
|
||||
|
||||
# Updating the stdenv
|
||||
|
||||
There are effectively two steps when updating the standard environment:
|
||||
|
||||
1. Update the definition of llvmPackages in `all-packages.nix` for Darwin to match the value of
|
||||
llvmPackages.latest in `all-packages.nix`. Timing-wise, this done currently using the spring
|
||||
release of LLVM and once llvmPackages.latest has been updated to match. If the LLVM project
|
||||
has announced a release schedule of patch updates, wait until those are in nixpkgs. Otherwise,
|
||||
the LLVM updates will have to go through staging instead of being merged into master; and
|
||||
2. Fix the resulting breakage. Most things break due to additional warnings being turned into
|
||||
errors or additional strictness applied by LLVM. Fixes may come in the form of disabling those
|
||||
new warnings or by fixing the actual source (e.g., with a patch or update upstream). If the
|
||||
fix is trivial (e.g., adding a missing int to an implicit declaration), it is better to fix
|
||||
the problem instead of silencing the warning.
|
File diff suppressed because it is too large
Load diff
|
@ -28,7 +28,7 @@ let
|
|||
# the GNU C compiler, and so on.
|
||||
stagesLinux = import ./linux args;
|
||||
|
||||
inherit (import ./darwin args) stagesDarwin;
|
||||
stagesDarwin = import ./darwin args;
|
||||
|
||||
stagesCross = import ./cross args;
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ impure-cmds // appleSourcePackages // chooseLibs // {
|
|||
bintools = self.binutils-unwrapped;
|
||||
};
|
||||
|
||||
cctools = self.cctools-port;
|
||||
cctools = self.cctools-llvm;
|
||||
|
||||
cctools-apple = callPackage ../os-specific/darwin/cctools/apple.nix {
|
||||
stdenv = if stdenv.isDarwin then stdenv else pkgs.libcxxStdenv;
|
||||
|
|
Loading…
Reference in a new issue