Skip to content

Commit

Permalink
Add PekkoInlinePlugin
Browse files Browse the repository at this point in the history
  • Loading branch information
mdedetrich committed Jan 6, 2024
1 parent 0d42f2b commit b1b3b75
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* license agreements; and to You under the Apache License, version 2.0:
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* This file is part of the Apache Pekko project, derived from Akka.
*/

package com.github.pjfanning.pekkobuild

import sbt.plugins.JvmPlugin
import sbt._
import sbt.Keys._

object PekkoInlinePlugin extends AutoPlugin {
override def trigger: PluginTrigger = allRequirements

override def requires: Plugins = JvmPlugin

private val flagsForScala2 = Seq(
"-opt-inline-from:<sources>",
"-opt:l:inline",
// These are safe to inline even across modules since they are
// wrappers for cross compilation that is stable within Pekko
"-opt-inline-from:org.apache.pekko.dispatch.internal.SameThreadExecutionContext**",
"-opt-inline-from:org.apache.pekko.util.OptionConverters**",
"-opt-inline-from:org.apache.pekko.util.FutureConverters**",
"-opt-inline-from:org.apache.pekko.util.FunctionConverters**",
"-opt-inline-from:org.apache.pekko.util.PartialFunction**",
"-opt-inline-from:org.apache.pekko.util.JavaDurationConverters**"
)

object autoImport extends PekkoInlineSettings

import autoImport._

// Optimizer not yet available for Scala3, see https://docs.scala-lang.org/overviews/compiler-options/optimizer.html
private val flagsForScala3 = Seq()

override lazy val globalSettings = Seq(
pekkoInlineEnabled := !sys.props.contains("pekko.no.inline")
)

override lazy val projectSettings = Seq(Compile / scalacOptions ++= {
if (pekkoInlineEnabled.value) {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, n)) if n == 13 =>
flagsForScala2
case Some((2, n)) if n == 12 =>
flagsForScala2
case Some((3, _)) =>
flagsForScala3
}
} else Seq.empty
})
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.github.pjfanning.pekkobuild

import sbt.{SettingKey, settingKey}

trait PekkoInlineSettings {
lazy val pekkoInlineEnabled: SettingKey[Boolean] = settingKey("Whether to enable the Scala 2 inliner for Pekko modules." +
"Defaults to pekko.no.inline property")
}

0 comments on commit b1b3b75

Please sign in to comment.