Skip to content

Commit

Permalink
Add PekkoInlinePlugin
Browse files Browse the repository at this point in the history
  • Loading branch information
mdedetrich committed Jan 8, 2024
1 parent 0d42f2b commit 5587a8a
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* 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("-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
})
}
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")
}

0 comments on commit 5587a8a

Please sign in to comment.