@@ -17,11 +17,70 @@ func envEnable(_ key: String, default defaultValue: Bool = false) -> Bool {
17
17
}
18
18
}
19
19
20
+ // MARK: - Env and Config
21
+
20
22
let isXcodeEnv = Context . environment [ " __CFBundleIdentifier " ] == " com.apple.dt.Xcode "
21
23
let development = envEnable ( " OPENGRAPH_DEVELOPMENT " , default: false )
22
24
23
25
let releaseVersion = Context . environment [ " OPENGRAPH_TARGET_RELEASE " ] . flatMap { Int ( $0) } ?? 2024
24
26
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
+
25
84
var sharedSwiftSettings : [ SwiftSetting ] = [
26
85
. enableUpcomingFeature( " InternalImportsByDefault " ) ,
27
86
. define( " OPENGRAPH_RELEASE_ \( releaseVersion) " ) ,
@@ -39,6 +98,8 @@ if warningsAsErrorsCondition {
39
98
sharedSwiftSettings. append ( . unsafeFlags( [ " -warnings-as-errors " ] ) )
40
99
}
41
100
101
+ // MARK: - Targets
102
+
42
103
let openGraphShimsTarget = Target . target (
43
104
name: " OpenGraphShims " ,
44
105
swiftSettings: sharedSwiftSettings
@@ -70,16 +131,14 @@ let openGraphCompatibilityTestTarget = Target.testTarget(
70
131
swiftSettings: sharedSwiftSettings
71
132
)
72
133
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
77
135
78
136
let package = Package (
79
137
name: " OpenGraph " ,
80
138
products: [
81
- . library( name: " OpenGraphShims " , targets: [ " OpenGraphShims " ] ) ,
139
+ . library( name: " OpenGraph_SPI " , targets: [ " OpenGraph_SPI " ] ) ,
82
140
. library( name: " OpenGraph " , targets: [ " OpenGraph " ] ) ,
141
+ . library( name: " OpenGraphShims " , targets: [ " OpenGraphShims " ] ) ,
83
142
] ,
84
143
dependencies: [
85
144
. package ( url: " https://github.com/apple/swift-numerics " , from: " 1.0.2 " ) ,
@@ -90,14 +149,7 @@ let package = Package(
90
149
// The SwiftPM support for such usage is still in progress.
91
150
. target(
92
151
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
101
153
) ,
102
154
. target(
103
155
name: " OpenGraph " ,
0 commit comments