-
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0d42f2b
commit bcc7234
Showing
2 changed files
with
78 additions
and
0 deletions.
There are no files selected for viewing
68 changes: 68 additions & 0 deletions
68
src/main/scala/com/github/pjfanning/pekkobuild/PekkoInlinePlugin.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/* | ||
* 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 def flagsForScala2(coreProject: Boolean) = { | ||
val baseInlineFlags = Seq( | ||
"-opt-inline-from:<sources>", | ||
"-opt:l:inline" | ||
) | ||
|
||
if (coreProject) | ||
baseInlineFlags ++ Seq( | ||
// Since the Pekko core project doesn't allow for mixing of different versions, | ||
// i.e. you cannot mix pekko-actor 1.0.0 with pekko-streams 1.0.1 at runtime | ||
// its safe to do inter sbt project inlining. | ||
"-opt-inline-from:org.apache.pekko.**" | ||
) | ||
else baseInlineFlags ++ Seq( | ||
// 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"), | ||
pekkoInlineCoreProject := false | ||
) | ||
|
||
override lazy val projectSettings = Seq(Compile / scalacOptions ++= { | ||
if (pekkoInlineEnabled.value) { | ||
CrossVersion.partialVersion(scalaVersion.value) match { | ||
case Some((2, n)) if n == 12 | n == 13 => | ||
flagsForScala2(pekkoInlineCoreProject.value) | ||
case Some((3, _)) => | ||
flagsForScala3 | ||
} | ||
} else Seq.empty | ||
}) | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/scala/com/github/pjfanning/pekkobuild/PekkoInlineSettings.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
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") | ||
lazy val pekkoInlineCoreProject: SettingKey[Boolean] = settingKey("Whether this is the core Pekko project or a Pekko module " + | ||
"since the core Pekko project has different inline settings. Defaults to false") | ||
} |