-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPackage.swift
More file actions
69 lines (62 loc) · 2.32 KB
/
Package.swift
File metadata and controls
69 lines (62 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// swift-tools-version: 6.0
import PackageDescription
import Foundation
let package: Package
if Context.environment["__CFBundleIdentifier"] == "com.apple.dt.Xcode" {
func findJavaHome() -> String {
if let home = Context.environment["JAVA_HOME"] {
return home
}
// This is a workaround for envs (some IDEs) which have trouble with
// picking up env variables during the build process
if let home = Context.environment["HOME"],
let path = try? String(contentsOfFile: "\(home)/.java_home", encoding: .utf8).split(separator: "\n").first {
return String(path)
}
preconditionFailure("Please set the JAVA_HOME environment variable to point to where Java is installed.")
}
let javaHome = findJavaHome()
let javaIncludePath = "\(javaHome)/include"
#if os(Linux)
let javaPlatformIncludePath = "\(javaIncludePath)/linux"
#elseif os(macOS)
let javaPlatformIncludePath = "\(javaIncludePath)/darwin"
#elseif os(Windows)
let javaPlatformIncludePath = "\(javaIncludePath)/win32"
#endif
package = Package(name: "Java", products: [
.library(name: "Java", targets: ["Java"]),
], targets: [
.target(name: "Java", dependencies: [
"JavaRuntime",
"JavaTypes",
], swiftSettings: [
.unsafeFlags(["-I\(javaIncludePath)/", "-I\(javaPlatformIncludePath)/"]),
], linkerSettings: [
.unsafeFlags([
"-L\(javaHome)/lib/server",
"-Xlinker", "-rpath",
"-Xlinker", "\(javaHome)/lib/server",
], .when(platforms: [.linux, .macOS])),
.unsafeFlags([
"-L\(javaHome)/lib"
], .when(platforms: [.windows])),
.linkedLibrary("jvm"),
]),
.target(name: "JavaRuntime", swiftSettings: [
.unsafeFlags(["-I\(javaIncludePath)/", "-I\(javaPlatformIncludePath)/"]),
]),
.target(name: "JavaTypes"),
])
} else {
package = Package(name: "Java", products: [
.library(name: "Java", targets: ["Java"]),
], targets: [
.target(name: "Java", dependencies: [
"JavaRuntime",
"JavaTypes",
]),
.target(name: "JavaRuntime"),
.target(name: "JavaTypes"),
])
}