@@ -17,11 +17,70 @@ func envEnable(_ key: String, default defaultValue: Bool = false) -> Bool {
1717 }
1818}
1919
20+ // MARK: - Env and Config
21+
2022let isXcodeEnv = Context . environment [ " __CFBundleIdentifier " ] == " com.apple.dt.Xcode "
2123let development = envEnable ( " OPENGRAPH_DEVELOPMENT " , default: false )
2224
2325let releaseVersion = Context . environment [ " OPENGRAPH_TARGET_RELEASE " ] . flatMap { Int ( $0) } ?? 2024
2426
27+ let swiftBinPath = Context . environment [ " _ " ] ?? " /usr/bin/swift "
28+ let swiftBinURL = URL ( fileURLWithPath: swiftBinPath)
29+ let SDKPath = swiftBinURL. deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . path
30+ let includePath = SDKPath . appending ( " /usr/lib/swift " )
31+
32+ // MARK: - C/CXX Settings
33+
34+ // Source: https://github.com/swiftlang/swift/blob/main/SwiftCompilerSources/Package.swift
35+ // To successfully build, you'll need to create a couple of symlinks to an
36+ // existing Ninja build:
37+ //
38+ // cd $OPENGRAPH_SWIFT_TOOLCHAIN_PATH
39+ // mkdir -p build/Default
40+ // ln -s build/<Ninja-Build>/llvm-<os+arch> build/Default/llvm
41+ // ln -s build/<Ninja-Build>/swift-<os+arch> build/Default/swift
42+ //
43+ // where <project-root> is the parent directory of the swift repository.
44+ //
45+ // FIXME: We may want to consider generating Package.swift as a part of the
46+ // build.
47+
48+ let swiftToolchainVersion = Context . environment [ " OPENGRAPH_SWIFT_TOOLCHAIN_VERSION " ] ?? " "
49+ let swiftToolchainPath = Context . environment [ " OPENGRAPH_SWIFT_TOOLCHAIN_PATH " ] ?? " "
50+
51+ var sharedCSettings : [ CSetting ] = [
52+ . unsafeFlags( [ " -I " , includePath] , . when( platforms: . nonDarwinPlatforms) ) ,
53+ . define( " __COREFOUNDATION_FORSWIFTFOUNDATIONONLY__ " , to: " 1 " , . when( platforms: . nonDarwinPlatforms) ) ,
54+ ]
55+
56+ if !swiftToolchainPath. isEmpty {
57+ sharedCSettings. append (
58+ . unsafeFlags(
59+ [
60+ " -static " ,
61+ " -DCOMPILED_WITH_SWIFT " ,
62+ " -DPURE_BRIDGING_MODE " ,
63+ " -UIBOutlet " , " -UIBAction " , " -UIBInspectable " ,
64+ " -I \( swiftToolchainPath) /swift/include " ,
65+ " -I \( swiftToolchainPath) /swift/stdlib/public/SwiftShims " ,
66+ " -I \( swiftToolchainPath) /llvm-project/llvm/include " ,
67+ " -I \( swiftToolchainPath) /llvm-project/clang/include " ,
68+ " -I \( swiftToolchainPath) /build/Default/swift/include " ,
69+ " -I \( swiftToolchainPath) /build/Default/llvm/include " ,
70+ " -I \( swiftToolchainPath) /build/Default/llvm/tools/clang/include " ,
71+ ]
72+ )
73+ )
74+ }
75+
76+ if !swiftToolchainVersion. isEmpty {
77+ sharedCSettings. append (
78+ . define( " OPENGRAPH_SWIFT_TOOLCHAIN_VERSION " , to: swiftToolchainVersion)
79+ )
80+ }
81+
82+ // MARK: - Swift Settings
83+
2584var sharedSwiftSettings : [ SwiftSetting ] = [
2685 . enableUpcomingFeature( " InternalImportsByDefault " ) ,
2786 . define( " OPENGRAPH_RELEASE_ \( releaseVersion) " ) ,
@@ -39,6 +98,8 @@ if warningsAsErrorsCondition {
3998 sharedSwiftSettings. append ( . unsafeFlags( [ " -warnings-as-errors " ] ) )
4099}
41100
101+ // MARK: - Targets
102+
42103let openGraphShimsTarget = Target . target (
43104 name: " OpenGraphShims " ,
44105 swiftSettings: sharedSwiftSettings
@@ -70,16 +131,14 @@ let openGraphCompatibilityTestTarget = Target.testTarget(
70131 swiftSettings: sharedSwiftSettings
71132)
72133
73- let swiftBinPath = Context . environment [ " _ " ] ?? " /usr/bin/swift "
74- let swiftBinURL = URL ( fileURLWithPath: swiftBinPath)
75- let SDKPath = swiftBinURL. deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . path
76- let includePath = SDKPath . appending ( " /usr/lib/swift " )
134+ // MARK: - Package
77135
78136let package = Package (
79137 name: " OpenGraph " ,
80138 products: [
81- . library( name: " OpenGraphShims " , targets: [ " OpenGraphShims " ] ) ,
139+ . library( name: " OpenGraph_SPI " , targets: [ " OpenGraph_SPI " ] ) ,
82140 . library( name: " OpenGraph " , targets: [ " OpenGraph " ] ) ,
141+ . library( name: " OpenGraphShims " , targets: [ " OpenGraphShims " ] ) ,
83142 ] ,
84143 dependencies: [
85144 . package ( url: " https://github.com/apple/swift-numerics " , from: " 1.0.2 " ) ,
@@ -90,14 +149,7 @@ let package = Package(
90149 // The SwiftPM support for such usage is still in progress.
91150 . target(
92151 name: " OpenGraph_SPI " ,
93- cSettings: [
94- . unsafeFlags( [ " -I " , includePath] , . when( platforms: . nonDarwinPlatforms) ) ,
95- . define( " __COREFOUNDATION_FORSWIFTFOUNDATIONONLY__ " , to: " 1 " , . when( platforms: . nonDarwinPlatforms) ) ,
96- ] ,
97- cxxSettings: [
98- . unsafeFlags( [ " -I " , includePath] , . when( platforms: . nonDarwinPlatforms) ) ,
99- . define( " __COREFOUNDATION_FORSWIFTFOUNDATIONONLY__ " , to: " 1 " , . when( platforms: . nonDarwinPlatforms) ) ,
100- ]
152+ cSettings: sharedCSettings
101153 ) ,
102154 . target(
103155 name: " OpenGraph " ,
0 commit comments