Skip to content

build: migrate swift to CMake 3.15.1 #2524

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

Merged
merged 2 commits into from
Nov 5, 2019
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
675 changes: 9 additions & 666 deletions CMakeLists.txt

Large diffs are not rendered by default.

62 changes: 16 additions & 46 deletions CoreFoundation/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ endif()
set(CMAKE_POSITION_INDEPENDENT_CODE YES)

set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG ON)
set(THREADS_PREFER_PTHREAD_FLAG OFF)
find_package(Threads)

if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
Expand All @@ -33,8 +33,6 @@ endif()
include(GNUInstallDirs)
include(CoreFoundationAddFramework)

option(CF_PATH_TO_LIBDISPATCH_SOURCE "Path to libdispatch source")
option(CF_PATH_TO_LIBDISPATCH_BUILD "Path to libdispatch build")
option(CF_DEPLOYMENT_SWIFT "Build for swift" NO)

if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
Expand Down Expand Up @@ -383,14 +381,14 @@ target_include_directories(CoreFoundation
PRIVATE
${PROJECT_SOURCE_DIR}
${ICU_INCLUDE_DIR})
target_link_libraries(CoreFoundation
PRIVATE
Threads::Threads
${CMAKE_DL_LIBS})
target_link_libraries(CoreFoundation PRIVATE
Threads::Threads
${CMAKE_DL_LIBS}
BlocksRuntime
dispatch)
if(CMAKE_SYSTEM_NAME STREQUAL Android)
target_link_libraries(CoreFoundation
PRIVATE
log)
target_link_libraries(CoreFoundation PRIVATE
log)
endif()

add_framework(CFURLSessionInterface
Expand All @@ -411,12 +409,10 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows)
PRIVATE
CURL_STATICLIB)
endif()
target_include_directories(CFURLSessionInterface
PRIVATE
${CURL_INCLUDE_DIRS})
target_link_libraries(CFURLSessionInterface
PRIVATE
${CURL_LIBRARIES})
target_include_directories(CFURLSessionInterface PRIVATE
${CURL_INCLUDE_DIRS})
target_link_libraries(CFURLSessionInterface PRIVATE
${CURL_LIBRARIES})

add_framework(CFXMLInterface
${FRAMEWORK_LIBRARY_TYPE}
Expand All @@ -431,12 +427,10 @@ add_framework(CFXMLInterface
SOURCES
Parsing.subproj/CFXMLInterface.c)
add_dependencies(CFXMLInterface CoreFoundation)
target_include_directories(CFXMLInterface
PRIVATE
${LIBXML2_INCLUDE_DIR})
target_link_libraries(CFXMLInterface
PRIVATE
${LIBXML2_LIBRARIES})
target_include_directories(CFXMLInterface PRIVATE
${LIBXML2_INCLUDE_DIR})
target_link_libraries(CFXMLInterface PRIVATE
${LIBXML2_LIBRARIES})

if(CMAKE_SYSTEM_NAME STREQUAL Windows)
add_library(CoreFoundationResources OBJECT
Expand All @@ -456,30 +450,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows)
add_dependencies(CoreFoundation CoreFoundationWindowsTimeZonesPLists)
endif()

target_include_directories(CoreFoundation
PRIVATE
${CF_PATH_TO_LIBDISPATCH_SOURCE}
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
target_include_directories(CFURLSessionInterface
PRIVATE
${CF_PATH_TO_LIBDISPATCH_SOURCE}
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
target_include_directories(CFXMLInterface
PRIVATE
${CF_PATH_TO_LIBDISPATCH_SOURCE}
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
target_include_directories(CoreFoundation
SYSTEM PRIVATE
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
target_include_directories(CFURLSessionInterface
SYSTEM PRIVATE
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
target_include_directories(CFXMLInterface
SYSTEM PRIVATE
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
endif()

if(CMAKE_SYSTEM_NAME STREQUAL Windows)
target_link_libraries(CoreFoundation
PRIVATE
Expand Down
256 changes: 256 additions & 0 deletions Foundation/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@

add_library(Foundation
AffineTransform.swift
Array.swift
Boxing.swift
Bridging.swift
Bundle.swift
ByteCountFormatter.swift
Calendar.swift
CGFloat.swift
CharacterSet.swift
Codable.swift
Collections+DataProtocol.swift
ContiguousBytes.swift
Data.swift
DataProtocol.swift
Date.swift
DateComponents.swift
DateComponentsFormatter.swift
DateFormatter.swift
DateInterval.swift
DateIntervalFormatter.swift
Decimal.swift
Dictionary.swift
DispatchData+DataProtocol.swift
EnergyFormatter.swift
ExtraStringAPIs.swift
FileHandle.swift
FileManager.swift
FileManager+POSIX.swift
FileManager+Win32.swift
FileManager_XDG.swift
Formatter.swift
FoundationErrors.swift
Host.swift
IndexPath.swift
IndexSet.swift
ISO8601DateFormatter.swift
JSONEncoder.swift
JSONSerialization.swift
LengthFormatter.swift
Locale.swift
MassFormatter.swift
Measurement.swift
MeasurementFormatter.swift
Notification.swift
NotificationQueue.swift
NSArray.swift
NSAttributedString.swift
NSCache.swift
NSCalendar.swift
NSCFArray.swift
NSCFBoolean.swift
NSCFCharacterSet.swift
NSCFDictionary.swift
NSCFSet.swift
NSCFString.swift
NSCharacterSet.swift
NSCoder.swift
NSComparisonPredicate.swift
NSCompoundPredicate.swift
NSConcreteValue.swift
NSData+DataProtocol.swift
NSData.swift
NSDate.swift
NSDecimalNumber.swift
NSDictionary.swift
NSEnumerator.swift
NSError.swift
NSExpression.swift
NSGeometry.swift
NSIndexPath.swift
NSIndexSet.swift
NSKeyedArchiver.swift
NSKeyedArchiverHelpers.swift
NSKeyedCoderOldStyleArray.swift
NSKeyedUnarchiver.swift
NSLocale.swift
NSLock.swift
NSLog.swift
NSMeasurement.swift
NSNotification.swift
NSNull.swift
NSNumber.swift
NSObjCRuntime.swift
NSObject.swift
NSOrderedSet.swift
NSPathUtilities.swift
NSPersonNameComponents.swift
NSPlatform.swift
NSPredicate.swift
NSRange.swift
NSRegularExpression.swift
NSSet.swift
NSSortDescriptor.swift
NSSpecialValue.swift
NSString.swift
NSStringAPI.swift
NSSwiftRuntime.swift
NSTextCheckingResult.swift
NSTimeZone.swift
NSURL.swift
NSURLError.swift
NSUUID.swift
NSValue.swift
NumberFormatter.swift
Operation.swift
PersonNameComponents.swift
PersonNameComponentsFormatter.swift
Pointers+DataProtocol.swift
Port.swift
PortMessage.swift
Process.swift
ProcessInfo.swift
Progress.swift
ProgressFraction.swift
PropertyListEncoder.swift
PropertyListSerialization.swift
ReferenceConvertible.swift
RunLoop.swift
Scanner.swift
ScannerAPI.swift
Set.swift
Stream.swift
String.swift
StringEncodings.swift
Thread.swift
Timer.swift
TimeZone.swift
Unit.swift
URL.swift
URLComponents.swift
UserDefaults.swift
UUID.swift)
target_compile_definitions(Foundation PRIVATE
DEPLOYMENT_RUNTIME_SWIFT)
target_compile_options(Foundation PUBLIC
"SHELL:-Xcc -F${CMAKE_BINARY_DIR}")
target_compile_options(Foundation PRIVATE
"SHELL:-Xcc -I${ICU_INCLUDE_DIR}")
if(ENABLE_TESTING)
target_compile_options(Foundation PRIVATE
-enable-testing)
endif()
target_link_libraries(Foundation PRIVATE
${ICU_UC_LIBRARY}
${ICU_I18N_LIBRARY}
CoreFoundation
uuid)
target_link_libraries(Foundation PUBLIC
swiftDispatch)
# TODO(compnerd) properly propogate `BUILD_RPATH` to the target using CMake
if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows AND NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
target_link_options(Foundation PRIVATE
"SHELL:-Xlinker -rpath -Xlinker $<TARGET_FILE_DIR:swiftDispatch>")
endif()
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
target_link_libraries(Foundation PRIVATE
CoreFoundationResources)
target_link_libraries(Foundation PRIVATE
Ole32
Shell32
pathcch)
endif()
set_target_properties(Foundation PROPERTIES
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift)


add_library(FoundationNetworking
Boxing.swift
NSURLRequest.swift
HTTPCookie.swift
HTTPCookieStorage.swift
URLAuthenticationChallenge.swift
URLCache.swift
URLCredential.swift
URLCredentialStorage.swift
URLProtectionSpace.swift
URLProtocol.swift
URLRequest.swift
URLResponse.swift
URLSession/BodySource.swift
URLSession/Configuration.swift
URLSession/http/HTTPMessage.swift
URLSession/http/HTTPURLProtocol.swift
URLSession/libcurl/EasyHandle.swift
URLSession/libcurl/libcurlHelpers.swift
URLSession/libcurl/MultiHandle.swift
URLSession/Message.swift
URLSession/NativeProtocol.swift
URLSession/NetworkingSpecific.swift
URLSession/ftp/FTPURLProtocol.swift
URLSession/TaskRegistry.swift
URLSession/TransferState.swift
URLSession/URLSession.swift
URLSession/URLSessionConfiguration.swift
URLSession/URLSessionDelegate.swift
URLSession/URLSessionTask.swift)
target_compile_definitions(FoundationNetworking PRIVATE
DEPLOYMENT_RUNTIME_SWIFT
NS_BUILDING_FOUNDATION_NETWORKING)
target_compile_options(FoundationNetworking PUBLIC
"SHELL:-Xcc -F${CMAKE_BINARY_DIR}")
if(ENABLE_TESTING)
target_compile_options(FoundationNetworking PRIVATE
-enable-testing)
endif()
target_link_libraries(FoundationNetworking PRIVATE
${CURL_LIBRARIES}
${ZLIB_LIBRARIES}
Foundation
CFURLSessionInterface)
set_target_properties(FoundationNetworking PROPERTIES
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift)


add_library(FoundationXML
XMLDocument.swift
XMLDTD.swift
XMLDTDNode.swift
XMLElement.swift
XMLNode.swift
XMLParser.swift)
target_compile_definitions(FoundationXML PRIVATE
DEPLOYMENT_RUNTIME_SWIFT)
target_compile_options(FoundationXML PUBLIC
"SHELL:-Xcc -F${CMAKE_BINARY_DIR}")
if(ENABLE_TESTING)
target_compile_options(FoundationXML PRIVATE
-enable-testing)
endif()
target_link_libraries(FoundationXML PRIVATE
${LIBXML2_LIBRARIES}
Foundation
CFXMLInterface)
set_target_properties(FoundationXML PROPERTIES
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift)

set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS
Foundation FoundationNetworking FoundationXML)
get_swift_host_arch(swift_arch)
install(TARGETS Foundation FoundationNetworking FoundationXML
ARCHIVE DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
LIBRARY DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>
RUNTIME DESTINATION bin)
install(FILES
${CMAKE_BINARY_DIR}/swift/Foundation.swiftdoc
${CMAKE_BINARY_DIR}/swift/Foundation.swiftmodule
${CMAKE_BINARY_DIR}/swift/FoundationNetworking.swiftdoc
${CMAKE_BINARY_DIR}/swift/FoundationNetworking.swiftmodule
${CMAKE_BINARY_DIR}/swift/FoundationXML.swiftdoc
${CMAKE_BINARY_DIR}/swift/FoundationXML.swiftmodule
DESTINATION lib/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>/${swift_arch})
Loading