Skip to content
Closed
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
8 changes: 3 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import com.diffplug.gradle.spotless.SpotlessExtension
import datadog.gradle.plugin.HostPlatform
import datadog.gradle.plugin.ci.testAggregate
import datadog.gradle.plugin.isLinuxArm64

plugins {
kotlin("jvm") version libs.versions.kotlin.plugin apply false
Expand Down Expand Up @@ -90,8 +90,6 @@ allprojects {
dependsOn(tasks.withType<AbstractCompile>())
}

val isLinuxArm64 = HostPlatform.isLinuxArm64()

tasks.configureEach {
if (this is JavaForkOptions) {
maxHeapSize = System.getProperty("datadog.forkedMaxHeapSize")
Expand All @@ -101,15 +99,15 @@ allprojects {
"-XX:+HeapDumpOnOutOfMemoryError",
"-XX:HeapDumpPath=/tmp"
)
if (isLinuxArm64) {
if (isLinuxArm64()) {
// Disable CDS to avoid SIGSEGVs on Linux arm64.
jvmArgs("-Xshare:off")
}
}
}

// Disable CDS to avoid SIGSEGVs on Linux arm64.
if (isLinuxArm64) {
if (isLinuxArm64()) {
tasks.withType<JavaCompile>().configureEach {
options.forkOptions.jvmArgs?.add("-Xshare:off")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package datadog.gradle.plugin

import org.gradle.api.Project
import org.gradle.kotlin.dsl.support.serviceOf
import org.gradle.platform.Architecture
import org.gradle.platform.BuildPlatform
import org.gradle.platform.OperatingSystem
import org.gradle.platform.internal.CurrentBuildPlatform

/**
* Helpers built on Gradle's [BuildPlatform].
*
* The public [BuildPlatform] interface is not directly available elsewhere.
* Build logic obtains it from the internal [CurrentBuildPlatform] service,
* resolved from a [Project] via `serviceOf` — see the [Project] overloads below.
*/
fun BuildPlatform.isLinuxArm64(): Boolean =
operatingSystem == OperatingSystem.LINUX && architecture == Architecture.AARCH64

fun BuildPlatform.isMacArm64(): Boolean =
operatingSystem == OperatingSystem.MAC_OS && architecture == Architecture.AARCH64

fun Project.isLinuxArm64(): Boolean =
serviceOf<CurrentBuildPlatform>().toBuildPlatform().isLinuxArm64()

fun Project.isMacArm64(): Boolean =
serviceOf<CurrentBuildPlatform>().toBuildPlatform().isMacArm64()
21 changes: 0 additions & 21 deletions buildSrc/src/main/kotlin/datadog/gradle/plugin/HostPlatform.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package datadog.gradle.plugin.instrument

import datadog.gradle.plugin.HostPlatform
import datadog.gradle.plugin.instrument.BuildTimeInstrumentationPlugin.Companion.BUILD_TIME_INSTRUMENTATION_PLUGIN_CONFIGURATION
import datadog.gradle.plugin.isLinuxArm64
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.Task
Expand Down Expand Up @@ -74,7 +74,7 @@ abstract class InstrumentPostProcessingAction @Inject constructor(
return workerExecutor.processIsolation {
forkOptions {
setExecutable(javaLauncher.executablePath.asFile.absolutePath)
if (HostPlatform.isLinuxArm64()) {
if (project.isLinuxArm64()) {
// Disable CDS to avoid SIGSEGVs on Linux arm64.
jvmArgs("-Xshare:off")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datadog.gradle.plugin.muzzle.tasks

import datadog.gradle.plugin.HostPlatform
import datadog.gradle.plugin.isLinuxArm64
import datadog.gradle.plugin.muzzle.MuzzleAction
import datadog.gradle.plugin.muzzle.MuzzleDirective
import datadog.gradle.plugin.muzzle.MuzzleExtension
Expand Down Expand Up @@ -103,7 +103,7 @@ abstract class MuzzleTask @Inject constructor(
if(javaLauncher.metadata.languageVersion > JavaLanguageVersion.of(9)) {
jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
}
if (HostPlatform.isLinuxArm64()) {
if (project.isLinuxArm64()) {
// Disable CDS to avoid SIGSEGVs on Linux arm64.
jvmArgs("-Xshare:off")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datadog.gradle.plugin.testJvmConstraints

import datadog.gradle.plugin.HostPlatform
import datadog.gradle.plugin.isLinuxArm64
import datadog.gradle.plugin.testJvmConstraints.TestJvmConstraintsExtension.Companion.TEST_JVM_CONSTRAINTS
import org.gradle.api.JavaVersion
import org.gradle.api.Plugin
Expand Down Expand Up @@ -90,12 +90,11 @@ class TestJvmConstraintsPlugin : Plugin<Project> {

// Fix for Linux arm64 ByteBuddy error:
// "Could not self-attach to current VM using external process"
if (HostPlatform.isLinuxArm64()) {
conditionalJvmArgs(
JavaVersion.VERSION_1_9,
listOf("-Djdk.attach.allowAttachSelf=true")
)
}
conditionalJvmArgs(
JavaVersion.VERSION_1_9,
listOf("-Djdk.attach.allowAttachSelf=true"),
project.providers.provider { project.isLinuxArm64() }
)
}

/**
Expand Down
7 changes: 4 additions & 3 deletions dd-java-agent/instrumentation/protobuf-3.0/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import datadog.gradle.plugin.HostPlatform
import static datadog.gradle.plugin.BuildPlatformExtensionsKt.isLinuxArm64
import static datadog.gradle.plugin.BuildPlatformExtensionsKt.isMacArm64

plugins {
id 'com.google.protobuf' version '0.10.0'
Expand All @@ -20,7 +21,7 @@ muzzle {
protobuf {
protoc {
// There is no macOS arm64 support for protoc 3.0.0, so require Rosetta.
if (HostPlatform.isMacArm64()) {
if (isMacArm64(project)) {
artifact = "com.google.protobuf:protoc:3.0.0:osx-x86_64"
} else {
artifact = "com.google.protobuf:protoc:3.0.0"
Expand All @@ -29,7 +30,7 @@ protobuf {
}

// TODO: protobuf supports Linux arm64 since `3.12.0`, but it is not source-compatible with 3.0.0
if (HostPlatform.isLinuxArm64()) {
if (isLinuxArm64(project)) {
tasks.matching {
it.name in [
"extractTestProto",
Expand Down
4 changes: 2 additions & 2 deletions dd-smoke-tests/play-common/fix-play-linux-arm64.gradle
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import datadog.gradle.plugin.HostPlatform
import static datadog.gradle.plugin.BuildPlatformExtensionsKt.isLinuxArm64

// Fix for JVM crashes (SIGSEGV / SIGABRT, exit 134) when the
// org.gradle.playframework `compilePlayRoutes` Worker Daemon starts up on Linux arm64.
// No-op on every other host/arch combination.
if (HostPlatform.isLinuxArm64()) {
if (isLinuxArm64(project)) {
tasks.named("compilePlayRoutes").configure { task ->
// Find the class in the hierarchy that declares the private `workerExecutor` field.
def workerExecutorField = null
Expand Down