Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

darwin.stdenv: Darwin stdenv rework #240433

Merged
merged 7 commits into from
Jul 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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);
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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()
31 changes: 31 additions & 0 deletions pkgs/os-specific/darwin/swift-corelibs/0007-Use-nixpkgs-icu.patch
Original file line number Diff line number Diff line change
@@ -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"
Original file line number Diff line number Diff line change
@@ -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
Loading