Skip to content
Open
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
38 changes: 0 additions & 38 deletions Benchmarks/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,6 @@

import PackageDescription

import class Foundation.FileManager
import class Foundation.ProcessInfo

// Note: the JAVA_HOME environment variable must be set to point to where
// Java is installed, e.g.,
// Library/Java/JavaVirtualMachines/openjdk-21.jdk/Contents/Home.
func findJavaHome() -> String {
if let home = ProcessInfo.processInfo.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
let path = "\(FileManager.default.homeDirectoryForCurrentUser.path()).java_home"
if let home = try? String(contentsOfFile: path, encoding: .utf8) {
if let lastChar = home.last, lastChar.isNewline {
return String(home.dropLast())
}

return home
}

fatalError("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"
#else
// TODO: Handle windows as well
#error("Currently only macOS and Linux platforms are supported, this may change in the future.")
#endif

let package = Package(
name: "benchmarks",
platforms: [
Expand All @@ -51,14 +15,12 @@ let package = Package(
.executableTarget(
name: "JavaApiCallBenchmarks",
dependencies: [
.product(name: "CSwiftJavaJNI", package: "swift-java"),
.product(name: "SwiftJava", package: "swift-java"),
.product(name: "JavaNet", package: "swift-java"),
.product(name: "Benchmark", package: "package-benchmark"),
],
path: "Benchmarks/JavaApiCallBenchmarks",
swiftSettings: [
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]),
.swiftLanguageMode(.v5),
],
plugins: [
Expand Down
160 changes: 3 additions & 157 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,90 +4,6 @@
import CompilerPluginSupport
import PackageDescription

import Foundation

// Note: the JAVA_HOME environment variable must be set to point to where
// Java is installed, e.g.,
// Library/Java/JavaVirtualMachines/openjdk-21.jdk/Contents/Home.
func findJavaHome() -> String {
if let home = ProcessInfo.processInfo.environment["JAVA_HOME"] {
print("JAVA_HOME = \(home)")
return home
}

// This is a workaround for envs (some IDEs) which have trouble with
// picking up env variables during the build process
let path = "\(FileManager.default.homeDirectoryForCurrentUser.path()).java_home"
if let home = try? String(contentsOfFile: path, encoding: .utf8) {
if let lastChar = home.last, lastChar.isNewline {
return String(home.dropLast())
}

return home
}

if let home = getJavaHomeFromLibexecJavaHome(),
!home.isEmpty {
return home
}


if ProcessInfo.processInfo.environment["SPI_PROCESSING"] == "1" && ProcessInfo.processInfo.environment["SPI_BUILD"] == nil {
// Just ignore that we're missing a JAVA_HOME when building in Swift Package Index during general processing where no Java is needed. However, do _not_ suppress the error during SPI's compatibility build stage where Java is required.
return ""
}
fatalError("Please set the JAVA_HOME environment variable to point to where Java is installed.")
}

/// On MacOS we can use the java_home tool as a fallback if we can't find JAVA_HOME environment variable.
func getJavaHomeFromLibexecJavaHome() -> String? {
let task = Process()
task.executableURL = URL(fileURLWithPath: "/usr/libexec/java_home")

// Check if the executable exists before trying to run it
guard FileManager.default.fileExists(atPath: task.executableURL!.path) else {
print("/usr/libexec/java_home does not exist")
return nil
}

let pipe = Pipe()
task.standardOutput = pipe
task.standardError = pipe // Redirect standard error to the same pipe for simplicity

do {
try task.run()
task.waitUntilExit()

let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)

if task.terminationStatus == 0 {
return output
} else {
print("java_home terminated with status: \(task.terminationStatus)")
// Optionally, log the error output for debugging
if let errorOutput = String(data: pipe.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) {
print("Error output: \(errorOutput)")
}
return nil
}
} catch {
print("Error running java_home: \(error)")
return nil
}
}

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

let package = Package(
name: "swift-java",
platforms: [
Expand All @@ -100,11 +16,6 @@ let package = Package(
targets: ["SwiftJava"]
),

.library(
name: "CSwiftJavaJNI",
targets: ["CSwiftJavaJNI"]
),

.library(
name: "JavaUtil",
targets: ["JavaUtil"]
Expand Down Expand Up @@ -135,11 +46,6 @@ let package = Package(
targets: ["JavaLangReflect"]
),

.library(
name: "JavaTypes",
targets: ["JavaTypes"]
),

.executable(
name: "swift-java",
targets: ["SwiftJavaTool"]
Expand Down Expand Up @@ -197,6 +103,7 @@ let package = Package(

],
dependencies: [
.package(path: "swift-jni"), // TBD: relocate to external swift-jni.git repository
.package(url: "https://github.com/swiftlang/swift-syntax", from: "601.0.1"),
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.5.0"),
.package(url: "https://github.com/apple/swift-system", from: "1.4.0"),
Expand Down Expand Up @@ -227,44 +134,17 @@ let package = Package(
.swiftLanguageMode(.v5)
]
),
.target(
name: "JavaTypes",
swiftSettings: [
.swiftLanguageMode(.v5)
]
),

.target(
name: "SwiftJava",
dependencies: [
"CSwiftJavaJNI",
"SwiftJavaMacros",
"JavaTypes",
"SwiftJavaConfigurationShared", // for Configuration reading at runtime
.product(name: "SwiftJNI", package: "swift-jni"),
],
exclude: ["swift-java.config"],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows]))
],
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",
.when(platforms: [.linux, .macOS, .windows])
),
]
),
.target(
Expand All @@ -274,7 +154,6 @@ let package = Package(
exclude: ["swift-java.config"],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),
.target(
Expand All @@ -284,7 +163,6 @@ let package = Package(
exclude: ["swift-java.config"],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),
.target(
Expand All @@ -294,7 +172,6 @@ let package = Package(
exclude: ["swift-java.config"],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),
.target(
Expand All @@ -304,7 +181,6 @@ let package = Package(
exclude: ["swift-java.config"],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),
.target(
Expand All @@ -314,7 +190,6 @@ let package = Package(
exclude: ["swift-java.config"],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),
.target(
Expand All @@ -324,7 +199,6 @@ let package = Package(
exclude: ["swift-java.config"],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),

Expand All @@ -346,23 +220,13 @@ let package = Package(
dependencies: [],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),
.target(
name: "SwiftKitSwift",
dependencies: [],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),

.target(
name: "CSwiftJavaJNI",
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),

Expand All @@ -384,7 +248,6 @@ let package = Package(
"JavaUtilJar",
"JavaLangReflect",
"JavaNet",
"JavaTypes",
"SwiftJavaShared",
"SwiftJavaConfigurationShared",
// .product(name: "Subprocess", package: "swift-subprocess")
Expand All @@ -393,7 +256,6 @@ let package = Package(
swiftSettings: [
.swiftLanguageMode(.v5),
.enableUpcomingFeature("BareSlashRegexLiterals"),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]),
]
),

Expand All @@ -415,7 +277,6 @@ let package = Package(
],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]),
.enableUpcomingFeature("BareSlashRegexLiterals"),
.define(
"SYSTEM_PACKAGE_DARWIN",
Expand All @@ -432,13 +293,12 @@ let package = Package(
.product(name: "SwiftSyntax", package: "swift-syntax"),
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
.product(name: "ArgumentParser", package: "swift-argument-parser"),
"JavaTypes",
.product(name: "SwiftJNI", package: "swift-jni"),
"SwiftJavaShared",
"SwiftJavaConfigurationShared",
],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]),
]
),

Expand All @@ -458,17 +318,6 @@ let package = Package(
],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),

.testTarget(
name: "JavaTypesTests",
dependencies: [
"JavaTypes"
],
swiftSettings: [
.swiftLanguageMode(.v5)
]
),

Expand All @@ -490,7 +339,6 @@ let package = Package(
],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),

Expand All @@ -499,7 +347,6 @@ let package = Package(
dependencies: ["SwiftJavaConfigurationShared"],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),

Expand All @@ -510,7 +357,6 @@ let package = Package(
],
swiftSettings: [
.swiftLanguageMode(.v5),
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
]
),

Expand Down
Loading
Loading