diff options
| author | edwardcwang | 2019-03-20 10:06:18 -0700 |
|---|---|---|
| committer | GitHub | 2019-03-20 10:06:18 -0700 |
| commit | 1894319c712628c22ccbc9c174505f9c1c186b69 (patch) | |
| tree | c1bf81a63178ac019754d021f07eb81e0feb26f1 /CommonBuild.sc | |
| parent | 2c449c5d6e23dcbb60e8c64cab6b6f4ba6ae313f (diff) | |
Mill support for Chisel3 (#1035)
Co-Authored-By: Jack Koenig <jack.koenig3@gmail.com>
Co-Authored-By: Jim Lawson <ucbjrl@berkeley.edu>
Diffstat (limited to 'CommonBuild.sc')
| -rw-r--r-- | CommonBuild.sc | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/CommonBuild.sc b/CommonBuild.sc new file mode 100644 index 00000000..a9a4e1a2 --- /dev/null +++ b/CommonBuild.sc @@ -0,0 +1,94 @@ +import ammonite.ops._ +import mill._ +import mill.scalalib._ + +def scalacOptionsVersion(scalaVersion: String): Seq[String] = { + Seq() ++ { + // If we're building with Scala > 2.11, enable the compile option + // switch to support our anonymous Bundle definitions: + // https://github.com/scala/bug/issues/10047 + if (scalaVersion.startsWith("2.11.")) { + Seq() + } else { + Seq( + "-Xsource:2.11", + "-Ywarn-unused:imports", + "-Ywarn-unused:locals" + ) + } + } +} + +def javacOptionsVersion(scalaVersion: String): Seq[String] = { + Seq() ++ { + // Scala 2.12 requires Java 8. We continue to generate + // Java 7 compatible code for Scala 2.11 + // for compatibility with old clients. + if (scalaVersion.startsWith("2.11.")) { + Seq("-source", "1.7", "-target", "1.7") + } else { + Seq("-source", "1.8", "-target", "1.8") + } + } +} + +// Define our own BuildInfo since mill doesn't currently have one. +trait BuildInfo extends ScalaModule { outer => + + def buildInfoObjectName: String = "BuildInfo" + + def buildInfoMembers: T[Map[String, String]] = T { + Map.empty[String, String] + } + + private def generateBuildInfo(outputPath: Path, members: Map[String, String]) = { + val outputFile = outputPath / "BuildInfo.scala" + val packageName = members.getOrElse("buildInfoPackage", "") + val packageDef = if (packageName != "") { + s"package ${packageName}" + } else { + "" + } + val internalMembers = + members + .map { + case (name, value) => s""" val ${name}: String = "${value}"""" + } + .mkString("\n") + write(outputFile, + s""" + |${packageDef} + |case object ${buildInfoObjectName}{ + |$internalMembers + | override val toString: String = { + | "buildInfoPackage: %s, version: %s, scalaVersion: %s" format ( + | buildInfoPackage, version, scalaVersion + | ) + | } + |} + """.stripMargin) + outputPath + } + + override def generatedSources = T { + super.generatedSources() :+ PathRef(generateBuildInfo(T.ctx().dest, buildInfoMembers())) + } +} + +// Define some file filters to exclude unwanted files from created jars. +type JarFileFilter = (Path, RelPath) => Boolean +// Exclude any `.DS_Store` files +val noDS_StoreFiles: JarFileFilter = (p: Path, relPath: RelPath) => { + relPath.last != ".DS_Store" +} + +// Exclude non-source files - accept all resource files, but only *.{java,scala} from source paths +val onlySourceFiles: JarFileFilter = (p: Path, relPath: RelPath) => { + p.last == "resources" || (relPath.ext == "scala" || relPath.ext == "java") +} + +// Apply a sequence of file filters - only accept files which satisfy all filters. +// We expect this to be curried, the resulting file filter passed to createJar() +def forallFilters(fileFilters: Seq[JarFileFilter])(p: Path, relPath: RelPath): Boolean = { + fileFilters.forall(f => f(p, relPath)) +} |
