@@ -22,37 +22,36 @@ func envEnable(_ key: String, default defaultValue: Bool = false) -> Bool {
2222let isXcodeEnv = Context . environment [ " __CFBundleIdentifier " ] == " com.apple.dt.Xcode "
2323let development = envEnable ( " OPENGRAPH_DEVELOPMENT " , default: false )
2424
25- let releaseVersion = Context . environment [ " OPENGRAPH_TARGET_RELEASE " ] . flatMap { Int ( $0) } ?? 2024
26-
2725let swiftBinPath = Context . environment [ " _ " ] ?? " /usr/bin/swift "
2826let swiftBinURL = URL ( fileURLWithPath: swiftBinPath)
2927let SDKPath = swiftBinURL. deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . path
3028let includePath = SDKPath . appending ( " /usr/lib/swift " )
3129
32- // MARK: - C/CXX Settings
30+ var sharedCSettings : [ CSetting ] = [
31+ . unsafeFlags( [ " -I " , includePath] , . when( platforms: . nonDarwinPlatforms) ) ,
32+ ]
3333
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:
34+ var sharedSwiftSettings : [ SwiftSetting ] = [
35+ . enableUpcomingFeature( " InternalImportsByDefault " ) ,
36+ . swiftLanguageMode( . v5) ,
37+ ]
38+
39+ // MARK: [env] OPENGRAPH_SWIFT_TOOLCHAIN_PATH
40+
41+ // Modified from: https://github.com/swiftlang/swift/blob/main/SwiftCompilerSources/Package.swift
3742//
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
43+ // Create a couple of symlinks to an existing Ninja build:
4244//
43- // where <project-root> is the parent directory of the swift repository.
45+ // ```shell
46+ // cd $OPENGRAPH_SWIFT_TOOLCHAIN_PATH
47+ // mkdir -p build/Default
48+ // ln -s build/<Ninja-Build>/llvm-<os+arch> build/Default/llvm
49+ // ln -s build/<Ninja-Build>/swift-<os+arch> build/Default/swift
50+ // ```
4451//
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- ]
52+ // where <$OPENGRAPH_SWIFT_TOOLCHAIN_PATH> is the parent directory of the swift repository.
5553
54+ let swiftToolchainPath = Context . environment [ " OPENGRAPH_SWIFT_TOOLCHAIN_PATH " ] ?? ( development ? " /Volumes/BuildMachine/swift-project " : " " )
5655if !swiftToolchainPath. isEmpty {
5756 sharedCSettings. append (
5857 . unsafeFlags(
@@ -68,31 +67,42 @@ if !swiftToolchainPath.isEmpty {
6867 " -I \( swiftToolchainPath) /build/Default/swift/include " ,
6968 " -I \( swiftToolchainPath) /build/Default/llvm/include " ,
7069 " -I \( swiftToolchainPath) /build/Default/llvm/tools/clang/include " ,
70+ " -DLLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING " , // Required to fix LLVM link issue
7171 ]
7272 )
7373 )
7474}
7575
76+ // MARK: [env] OPENGRAPH_SWIFT_TOOLCHAIN_VERSION
77+
78+ let swiftToolchainVersion = Context . environment [ " OPENGRAPH_SWIFT_TOOLCHAIN_VERSION " ] ?? ( development ? " 6.0.2 " : " " )
7679if !swiftToolchainVersion. isEmpty {
7780 sharedCSettings. append (
7881 . define( " OPENGRAPH_SWIFT_TOOLCHAIN_VERSION " , to: swiftToolchainVersion)
7982 )
8083}
8184
82- // MARK: - Swift Settings
85+ // MARK: - [env] OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
8386
84- var sharedSwiftSettings : [ SwiftSetting ] = [
85- . enableUpcomingFeature( " InternalImportsByDefault " ) ,
86- . define( " OPENGRAPH_RELEASE_ \( releaseVersion) " ) ,
87- . swiftLanguageMode( . v5) ,
88- ]
87+ let swiftToolchainSupported = envEnable ( " OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED " , default: !swiftToolchainVersion. isEmpty)
88+ if swiftToolchainSupported {
89+ sharedCSettings. append ( . define( " OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED " ) )
90+ sharedSwiftSettings. append ( . define( " OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED " ) )
91+ }
92+
93+ // MARK: - [env] OPENGRAPH_TARGET_RELEASE
8994
95+ let releaseVersion = Context . environment [ " OPENGRAPH_TARGET_RELEASE " ] . flatMap { Int ( $0) } ?? 2024
96+ sharedCSettings. append ( . define( " OPENGRAPH_RELEASE " , to: " \( releaseVersion) " ) )
97+ sharedSwiftSettings. append ( . define( " OPENGRAPH_RELEASE_ \( releaseVersion) " ) )
9098if releaseVersion >= 2021 {
9199 for year in 2021 ... releaseVersion {
92100 sharedSwiftSettings. append ( . define( " OPENGRAPH_SUPPORT_ \( year) _API " ) )
93101 }
94102}
95103
104+ // MARK: - [env] OPENGRAPH_WERROR
105+
96106let warningsAsErrorsCondition = envEnable ( " OPENGRAPH_WERROR " , default: isXcodeEnv && development)
97107if warningsAsErrorsCondition {
98108 sharedSwiftSettings. append ( . unsafeFlags( [ " -warnings-as-errors " ] ) )
@@ -102,6 +112,7 @@ if warningsAsErrorsCondition {
102112
103113let openGraphShimsTarget = Target . target (
104114 name: " OpenGraphShims " ,
115+ cSettings: sharedCSettings,
105116 swiftSettings: sharedSwiftSettings
106117)
107118
@@ -111,6 +122,7 @@ let openGraphShimsTestTarget = Target.testTarget(
111122 " OpenGraphShims " ,
112123 ] ,
113124 exclude: [ " README.md " ] ,
125+ cSettings: sharedCSettings,
114126 swiftSettings: sharedSwiftSettings
115127)
116128
@@ -120,6 +132,7 @@ let openGraphTestTarget = Target.testTarget(
120132 " OpenGraph " ,
121133 ] ,
122134 exclude: [ " README.md " ] ,
135+ cSettings: sharedCSettings,
123136 swiftSettings: sharedSwiftSettings
124137)
125138let openGraphCompatibilityTestTarget = Target . testTarget (
@@ -128,6 +141,7 @@ let openGraphCompatibilityTestTarget = Target.testTarget(
128141 . product( name: " RealModule " , package : " swift-numerics " ) ,
129142 ] ,
130143 exclude: [ " README.md " ] ,
144+ cSettings: sharedCSettings,
131145 swiftSettings: sharedSwiftSettings
132146)
133147
@@ -149,11 +163,14 @@ let package = Package(
149163 // The SwiftPM support for such usage is still in progress.
150164 . target(
151165 name: " OpenGraph_SPI " ,
152- cSettings: sharedCSettings
166+ cSettings: sharedCSettings + [
167+ . define( " __COREFOUNDATION_FORSWIFTFOUNDATIONONLY__ " , to: " 1 " , . when( platforms: . nonDarwinPlatforms) ) ,
168+ ]
153169 ) ,
154170 . target(
155171 name: " OpenGraph " ,
156172 dependencies: [ " OpenGraph_SPI " ] ,
173+ cSettings: sharedCSettings,
157174 swiftSettings: sharedSwiftSettings
158175 ) ,
159176 openGraphShimsTarget,
0 commit comments