-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathbuild.sbt
138 lines (121 loc) · 4.97 KB
/
build.sbt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import Dependencies._
// Required to create a fat jar containing all jogl native libraries
// Is probably a bit of a hack
// see: https://github.com/sbt/sbt-assembly/issues/141 and
// https://github.com/GiGurra/dcs-remote/blob/master/dcs-remote-renderer/build.sbt
val jogl_merge_strategy = new sbtassembly.MergeStrategy {
val name = "jogl_rename"
def apply(tempDir: File, path: String, files: Seq[File]) =
Right(files flatMap { file =>
val (jar, _, _, isJar) = sbtassembly.AssemblyUtils.sourceOfFileForMerge(tempDir, file)
if (isJar) Seq(file -> s"natives/${jar.getPath.split("-natives-")(1).split(".jar")(0)}/$path")
else Seq(file -> path)
})
}
lazy val util = (crossProject in file("util")).
settings(Commons.settings: _*).
settings(
name := "codecraft-util",
libraryDependencies ++= commonDependencies,
libraryDependencies += "org.scala-lang" % "scala-reflect" % "2.11.8"
)
lazy val utilJVM = util.jvm
lazy val utilJS = util.js
lazy val graphics = (crossProject in file("graphics")).
settings(Commons.settings: _*).
settings(
name := "codecraft-graphics",
libraryDependencies ++= commonDependencies
).jvmSettings(
libraryDependencies ++= graphicsJVMDependencies
).jsSettings(
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "0.9.0",
// add resources of the current project into the build classpath
unmanagedClasspath in Compile ++= {unmanagedResources in Compile}.value
).dependsOn(util)
lazy val graphicsJVM = graphics.jvm
lazy val graphicsJS = graphics.js
lazy val collisions = (crossProject in file("collisions")).
settings(Commons.settings: _*).
settings(
name := "codecraft-collisions",
libraryDependencies ++= commonDependencies
).dependsOn(util)
lazy val collisionsJVM = collisions.jvm
lazy val collisionsJS = collisions.js
lazy val physics = (crossProject in file("physics")).
settings(Commons.settings: _*).
settings(
name := "codecraft-physics",
libraryDependencies ++= commonDependencies
).dependsOn(util, collisions)
lazy val physicsJVM = physics.jvm
lazy val physicsJS = physics.js
lazy val testai = (project in file("testai")).
settings(Commons.settings: _*).
settings(
name := "codecraft-testai",
libraryDependencies ++= commonDependencies,
libraryDependencies += jetm
).dependsOn(coreJVM)
val core = (crossProject in file("core")).
settings(Commons.settings: _*).
settings(
name := "codecraft",
libraryDependencies ++= commonDependencies,
libraryDependencies += async,
libraryDependencies += "me.chrons" %%% "boopickle" % "1.2.4",
libraryDependencies += "com.lihaoyi" %%% "upickle" % "0.4.1"
).jvmSettings(
assemblyMergeStrategy in assembly := {
case x if x.endsWith(".so") || x.endsWith(".dll") || x.endsWith(".jnilib") =>
jogl_merge_strategy
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
},
resolvers += "Spray" at "http://repo.spray.io",
libraryDependencies ++= coreJVMDependencies
).jsSettings(
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "0.9.0"
).dependsOn(graphics, physics, collisions, util)
lazy val coreJVM = core.jvm
lazy val coreJS = core.js
lazy val scalajsTest = (project in file("scalajs-test")).
enablePlugins(ScalaJSPlugin).
settings(Commons.settings: _*).
settings(
name := "codecraft-scalajs-test",
libraryDependencies ++= commonDependencies,
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "0.9.0"
).dependsOn(coreJS)
val skippedPackages = List(
"cwinter.codecraft.core.replay",
"scala.scalajs.js.annotation",
"cwinter.codecraft.core.multiplayer"
)
val projects: Seq[ProjectReference] = Seq(coreJVM, graphicsJVM, utilJVM, physicsJVM, collisionsJVM)
lazy val docs = (project in file("docs"))
.settings(Commons.settings: _*)
.settings(
name := "docs",
scalacOptions += "-Ymacro-expand:none",
scalacOptions in (Compile, doc) ++= Seq("-doc-root-content", baseDirectory.value + "/root-doc.txt"),
libraryDependencies ++= commonDependencies,
libraryDependencies ++= graphicsJVMDependencies,
libraryDependencies += "org.scala-lang" % "scala-reflect" % "2.11.8"
)
.settings(
libraryDependencies += "org.scala-lang.modules" % "scala-async_2.11" % "0.9.5",
libraryDependencies += "me.chrons" %%% "boopickle" % "1.1.3",
libraryDependencies += "com.lihaoyi" %%% "upickle" % "0.4.1",
libraryDependencies ++= coreJVMDependencies,
unmanagedSourceDirectories in Compile :=
{ (projects map (unmanagedSourceDirectories in _ in Compile)).join.apply{(s) => s.flatten}.value },
// this might not work under Windows (which uses ; as separator)
scalacOptions in (Compile, doc) ++= List(s"-skip-packages", skippedPackages.mkString(":"))
)
lazy val root = project.in(file(".")).
aggregate(coreJS, coreJVM, graphicsJS, graphicsJVM, utilJS, utilJVM, physicsJS, physicsJVM, collisionsJS, collisionsJVM)
.settings(Commons.settings: _*)
.settings(publishArtifact := false)