aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2013-06-18 18:05:20 +0200
committerJakob Odersky <jodersky@gmail.com>2013-06-18 18:05:20 +0200
commitb0c32f5325702dd7f7ef3d5ccc0eb9a2b972cf7a (patch)
tree7030bd58c071fecb0ca737c08c295849d1460e45
parentdf6a79639dfb5241c57d9af4c6e2274de68166e0 (diff)
downloadakka-serial-b0c32f5325702dd7f7ef3d5ccc0eb9a2b972cf7a.tar.gz
akka-serial-b0c32f5325702dd7f7ef3d5ccc0eb9a2b972cf7a.tar.bz2
akka-serial-b0c32f5325702dd7f7ef3d5ccc0eb9a2b972cf7a.zip
use sbt-native and jni plugin
-rw-r--r--flow-main/src/main/java/com/github/jodersky/flow/low/NativeSerial.java (renamed from main/src/main/java/com/github/jodersky/flow/low/NativeSerial.java)0
-rw-r--r--flow-main/src/main/scala/com/github/jodersky/flow/Framing.scalac (renamed from main/src/main/scala/com/github/jodersky/flow/Framing.scala)0
-rw-r--r--flow-main/src/main/scala/com/github/jodersky/flow/Serial.scalac (renamed from main/src/main/scala/com/github/jodersky/flow/Serial.scala)0
-rw-r--r--flow-main/src/main/scala/com/github/jodersky/flow/SerialManager.scalac (renamed from main/src/main/scala/com/github/jodersky/flow/SerialManager.scala)0
-rw-r--r--flow-main/src/main/scala/com/github/jodersky/flow/SerialOperator.scalac (renamed from main/src/main/scala/com/github/jodersky/flow/SerialOperator.scala)0
-rw-r--r--flow-main/src/main/scala/com/github/jodersky/flow/exceptions.scala (renamed from main/src/main/scala/com/github/jodersky/flow/exceptions.scala)0
-rw-r--r--flow-main/src/main/scala/com/github/jodersky/flow/low/NativeLoader.scala (renamed from main/src/main/scala/com/github/jodersky/flow/low/NativeLoader.scala)0
-rw-r--r--flow-main/src/main/scala/com/github/jodersky/flow/low/Serial.scala (renamed from main/src/main/scala/com/github/jodersky/flow/low/Serial.scala)0
-rw-r--r--flow-main/src/main/scala/com/github/jodersky/flow/test.sc (renamed from main/src/main/scala/com/github/jodersky/flow/test.sc)0
-rw-r--r--flow-native/src/flow.c (renamed from main/src/main/c/flow.c)4
-rw-r--r--main/.worksheet/src/com.github.jodersky.flow.test.scala40
-rw-r--r--main/src/main/c/com_github_jodersky_flow_low_NativeSerial.h73
-rw-r--r--project/Build.scala41
-rw-r--r--project/JNIBuild.scala22
-rw-r--r--project/Jni.scala37
-rw-r--r--project/NativeBuild.scala75
-rw-r--r--project/NativeSettings.foo56
-rw-r--r--project/build.properties1
-rw-r--r--project/plugins.sbt1
19 files changed, 60 insertions, 290 deletions
diff --git a/main/src/main/java/com/github/jodersky/flow/low/NativeSerial.java b/flow-main/src/main/java/com/github/jodersky/flow/low/NativeSerial.java
index 6bdcde5..6bdcde5 100644
--- a/main/src/main/java/com/github/jodersky/flow/low/NativeSerial.java
+++ b/flow-main/src/main/java/com/github/jodersky/flow/low/NativeSerial.java
diff --git a/main/src/main/scala/com/github/jodersky/flow/Framing.scala b/flow-main/src/main/scala/com/github/jodersky/flow/Framing.scalac
index f8173a7..f8173a7 100644
--- a/main/src/main/scala/com/github/jodersky/flow/Framing.scala
+++ b/flow-main/src/main/scala/com/github/jodersky/flow/Framing.scalac
diff --git a/main/src/main/scala/com/github/jodersky/flow/Serial.scala b/flow-main/src/main/scala/com/github/jodersky/flow/Serial.scalac
index 7182425..7182425 100644
--- a/main/src/main/scala/com/github/jodersky/flow/Serial.scala
+++ b/flow-main/src/main/scala/com/github/jodersky/flow/Serial.scalac
diff --git a/main/src/main/scala/com/github/jodersky/flow/SerialManager.scala b/flow-main/src/main/scala/com/github/jodersky/flow/SerialManager.scalac
index ca3fc6b..ca3fc6b 100644
--- a/main/src/main/scala/com/github/jodersky/flow/SerialManager.scala
+++ b/flow-main/src/main/scala/com/github/jodersky/flow/SerialManager.scalac
diff --git a/main/src/main/scala/com/github/jodersky/flow/SerialOperator.scala b/flow-main/src/main/scala/com/github/jodersky/flow/SerialOperator.scalac
index 21d2067..21d2067 100644
--- a/main/src/main/scala/com/github/jodersky/flow/SerialOperator.scala
+++ b/flow-main/src/main/scala/com/github/jodersky/flow/SerialOperator.scalac
diff --git a/main/src/main/scala/com/github/jodersky/flow/exceptions.scala b/flow-main/src/main/scala/com/github/jodersky/flow/exceptions.scala
index c7b2fa1..c7b2fa1 100644
--- a/main/src/main/scala/com/github/jodersky/flow/exceptions.scala
+++ b/flow-main/src/main/scala/com/github/jodersky/flow/exceptions.scala
diff --git a/main/src/main/scala/com/github/jodersky/flow/low/NativeLoader.scala b/flow-main/src/main/scala/com/github/jodersky/flow/low/NativeLoader.scala
index fda82a6..fda82a6 100644
--- a/main/src/main/scala/com/github/jodersky/flow/low/NativeLoader.scala
+++ b/flow-main/src/main/scala/com/github/jodersky/flow/low/NativeLoader.scala
diff --git a/main/src/main/scala/com/github/jodersky/flow/low/Serial.scala b/flow-main/src/main/scala/com/github/jodersky/flow/low/Serial.scala
index e482bf8..e482bf8 100644
--- a/main/src/main/scala/com/github/jodersky/flow/low/Serial.scala
+++ b/flow-main/src/main/scala/com/github/jodersky/flow/low/Serial.scala
diff --git a/main/src/main/scala/com/github/jodersky/flow/test.sc b/flow-main/src/main/scala/com/github/jodersky/flow/test.sc
index 88a2193..88a2193 100644
--- a/main/src/main/scala/com/github/jodersky/flow/test.sc
+++ b/flow-main/src/main/scala/com/github/jodersky/flow/test.sc
diff --git a/main/src/main/c/flow.c b/flow-native/src/flow.c
index 89813ce..09ffca6 100644
--- a/main/src/main/c/flow.c
+++ b/flow-native/src/flow.c
@@ -153,7 +153,9 @@ void serial_close(struct serial_config* serial) {
int data = 0xffffffff;
//write to pipe to wake up any blocked read thread (self-pipe trick)
- write(serial->pipe_write, &data, 1);
+ if (write(serial->pipe_write, &data, 1) <= 0) {
+ DEBUG(perror("error writing to pipe during close"))
+ }
close(serial->pipe_write);
close(serial->pipe_read);
diff --git a/main/.worksheet/src/com.github.jodersky.flow.test.scala b/main/.worksheet/src/com.github.jodersky.flow.test.scala
deleted file mode 100644
index 1510da1..0000000
--- a/main/.worksheet/src/com.github.jodersky.flow.test.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.github.jodersky.flow
-
-import akka.io.PipelineContext
-import akka.io.SymmetricPipePair
-import akka.io.SymmetricPipelineStage
-import akka.util.ByteString
-import java.nio.ByteOrder
-import scala.annotation.tailrec
-import java.nio.ByteBuffer
-import akka.io._
-import akka.actor.{IO=>_,_}
-import Serial._
-
-object test {;import org.scalaide.worksheet.runtime.library.WorksheetSupport._; def main(args: Array[String])=$execute{;$skip(351);
-
- val StartByte = 0: Byte;System.out.println("""StartByte : Byte = """ + $show(StartByte ));$skip(25);
- val StopByte = 1: Byte;System.out.println("""StopByte : Byte = """ + $show(StopByte ));$skip(27);
- val EscapeByte = 2: Byte;System.out.println("""EscapeByte : Byte = """ + $show(EscapeByte ));$skip(36);
-
- val ctx = new PipelineContext{};System.out.println("""ctx : akka.io.PipelineContext = """ + $show(ctx ));$skip(68);
-
- val stages = new DelimitedFrame(StartByte, StopByte, EscapeByte);System.out.println("""stages : com.github.jodersky.flow.DelimitedFrame = """ + $show(stages ));$skip(88);
-
- val PipelinePorts(cmd, evt, mgmt) = PipelineFactory.buildFunctionTriple(ctx, stages);System.out.println("""cmd : akka.util.ByteString => (Iterable[akka.util.ByteString], Iterable[akka.util.ByteString]) = """ + $show(cmd ));System.out.println("""evt : akka.util.ByteString => (Iterable[akka.util.ByteString], Iterable[akka.util.ByteString]) = """ + $show(evt ));System.out.println("""mgmt : PartialFunction[AnyRef,(Iterable[akka.util.ByteString], Iterable[akka.util.ByteString])] = """ + $show(mgmt ));$skip(243);
-
- val injector = PipelineFactory.buildWithSinkFunctions(ctx, stages)(
- t => println("sent command: " + t), // will receive messages of type Try[ByteString]
- t => println("got event: " + t) // will receive messages of type Try[Message]
- );System.out.println("""injector : akka.io.PipelineInjector[akka.util.ByteString,akka.util.ByteString] = """ + $show(injector ));$skip(59);
-
-
- val bs = ByteString.fromArray(Array(0,4,2,1,1,6,1));System.out.println("""bs : akka.util.ByteString = """ + $show(bs ));$skip(51);
-
- injector.injectCommand(bs);$skip(27);
- injector.injectEvent(bs);$skip(47);
-
- implicit val system = ActorSystem("flow");System.out.println("""system : akka.actor.ActorSystem = """ + $show(system ))}
- //IO(Serial) ! Open("s", 9600)
-
-}
diff --git a/main/src/main/c/com_github_jodersky_flow_low_NativeSerial.h b/main/src/main/c/com_github_jodersky_flow_low_NativeSerial.h
deleted file mode 100644
index 54ea963..0000000
--- a/main/src/main/c/com_github_jodersky_flow_low_NativeSerial.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_github_jodersky_flow_low_NativeSerial */
-
-#ifndef _Included_com_github_jodersky_flow_low_NativeSerial
-#define _Included_com_github_jodersky_flow_low_NativeSerial
-#ifdef __cplusplus
-extern "C" {
-#endif
-#undef com_github_jodersky_flow_low_NativeSerial_E_PERMISSION
-#define com_github_jodersky_flow_low_NativeSerial_E_PERMISSION -1L
-#undef com_github_jodersky_flow_low_NativeSerial_E_OPEN
-#define com_github_jodersky_flow_low_NativeSerial_E_OPEN -2L
-#undef com_github_jodersky_flow_low_NativeSerial_E_BUSY
-#define com_github_jodersky_flow_low_NativeSerial_E_BUSY -3L
-#undef com_github_jodersky_flow_low_NativeSerial_E_BAUD
-#define com_github_jodersky_flow_low_NativeSerial_E_BAUD -4L
-#undef com_github_jodersky_flow_low_NativeSerial_E_PIPE
-#define com_github_jodersky_flow_low_NativeSerial_E_PIPE -5L
-#undef com_github_jodersky_flow_low_NativeSerial_E_MALLOC
-#define com_github_jodersky_flow_low_NativeSerial_E_MALLOC -6L
-#undef com_github_jodersky_flow_low_NativeSerial_E_POINTER
-#define com_github_jodersky_flow_low_NativeSerial_E_POINTER -7L
-#undef com_github_jodersky_flow_low_NativeSerial_E_POLL
-#define com_github_jodersky_flow_low_NativeSerial_E_POLL -8L
-#undef com_github_jodersky_flow_low_NativeSerial_E_IO
-#define com_github_jodersky_flow_low_NativeSerial_E_IO -9L
-#undef com_github_jodersky_flow_low_NativeSerial_E_CLOSE
-#define com_github_jodersky_flow_low_NativeSerial_E_CLOSE -10L
-/*
- * Class: com_github_jodersky_flow_low_NativeSerial
- * Method: open
- * Signature: (Ljava/lang/String;I[J)I
- */
-JNIEXPORT jint JNICALL Java_com_github_jodersky_flow_low_NativeSerial_open
- (JNIEnv *, jclass, jstring, jint, jlongArray);
-
-/*
- * Class: com_github_jodersky_flow_low_NativeSerial
- * Method: read
- * Signature: (J[B)I
- */
-JNIEXPORT jint JNICALL Java_com_github_jodersky_flow_low_NativeSerial_read
- (JNIEnv *, jclass, jlong, jbyteArray);
-
-/*
- * Class: com_github_jodersky_flow_low_NativeSerial
- * Method: write
- * Signature: (J[B)I
- */
-JNIEXPORT jint JNICALL Java_com_github_jodersky_flow_low_NativeSerial_write
- (JNIEnv *, jclass, jlong, jbyteArray);
-
-/*
- * Class: com_github_jodersky_flow_low_NativeSerial
- * Method: close
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_com_github_jodersky_flow_low_NativeSerial_close
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: com_github_jodersky_flow_low_NativeSerial
- * Method: debug
- * Signature: (Z)V
- */
-JNIEXPORT void JNICALL Java_com_github_jodersky_flow_low_NativeSerial_debug
- (JNIEnv *, jclass, jboolean);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/project/Build.scala b/project/Build.scala
index ccee261..5b157a7 100644
--- a/project/Build.scala
+++ b/project/Build.scala
@@ -1,22 +1,33 @@
import sbt._
import Keys._
-import NativeBuild._
-import JNIBuild._
+
+import com.github.jodersky.build.NativeKeys._
+import com.github.jodersky.build.NativePlugin._
+import Jni._
object FlowBuild extends Build {
val Organization = "com.github.jodersky"
val Version = "1.0-SNAPSHOT"
val ScalaVersion = "2.10.1"
- lazy val root = Project(
- id = "flow",
- base = file("main"),
- settings = buildSettings ++ jniSettings ++ Seq(libraryDependencies ++= Dependencies.all))
+ lazy val main = Project("flow-main", file("flow-main")).settings(
+ buildSettings ++ Seq(libraryDependencies ++= Dependencies.all): _*
+ )
+
+ lazy val native = NativeProject("flow-native", file("flow-native")).settings((Seq(
+ javahClasses := Seq("com.github.jodersky.flow.low.NativeSerial"),
+ includeDirectories in Native += jdkHome.value / "include" / "linux",
+ nativeSource in Native := baseDirectory.value / "src",
+ binaryType in Native := SharedLibrary,
+ binaryName in Native := "flow",
+ options in Native := Seq("-fPIC", "-O2"),
+ linkOptions in Native := Seq("-Wl,-soname,libflow.so.1")
+ ) ++ Jni.defaultSettings): _*).dependsOn(main)
lazy val example = Project(
id = "flow-example",
base = file("example"),
- settings = buildSettings ++ runSettings ++ Seq(libraryDependencies ++= Dependencies.all)).dependsOn(root)
+ settings = buildSettings ++ runSettings ++ Seq(libraryDependencies ++= Dependencies.all))
lazy val buildSettings = Defaults.defaultSettings ++ Seq(
organization := Organization,
@@ -26,22 +37,6 @@ object FlowBuild extends Build {
scalacOptions ++= Seq("-deprecation", "-unchecked", "-feature"),
compileOrder in Compile := CompileOrder.Mixed)
- lazy val jniSettings = JNIBuild.defaults ++ Seq(
- jdkHome := file(System.getProperty("java.home")) / "..",
- javaClass := "com.github.jodersky.flow.low.NativeSerial",
- NativeBuild.compiler := "gcc",
- options := Seq("-fPIC"),
- NativeBuild.includeDirectories <<= jdkHome apply (jdk => Seq(jdk / "include", jdk / "include" / "linux")),
- linker := "gcc",
- linkerOptions := Seq("-shared", "-Wl,-soname,libflow.so.1"),
- linkerOutput <<= NativeBuild.outputDirectory(_ / "libflow.so"),
- Keys.packageBin in Compile <<= (Keys.packageBin in Compile).dependsOn(NativeBuild.link),
- mappings in (Compile, packageBin) <+= linkerOutput map { out =>
- out -> ("native/" + System.getProperty("os.name").toLowerCase + "/" + System.getProperty("os.arch").toLowerCase + "/libflow.so")
- },
- exportJars := true
- )
-
lazy val runSettings = Seq(
fork := true,
connectInput in run := true,
diff --git a/project/JNIBuild.scala b/project/JNIBuild.scala
deleted file mode 100644
index ed0d05e..0000000
--- a/project/JNIBuild.scala
+++ /dev/null
@@ -1,22 +0,0 @@
-import sbt._
-import Keys._
-
-object JNIBuild {
- val jdkHome = SettingKey[File]("jdk-home", "Home of JDK.")
- val javaClass = SettingKey[String]("jni-class", "Fully qualified name of class containing native declarations.")
-
- val javah = TaskKey[Unit]("javah", "Generate JNI headers.")
-
- val javahTask = javah <<= (javaClass, NativeBuild.sourceDirectory, Keys.classDirectory in Compile) map { (j, src, cp) =>
- val cmd = "javah -d " + src.absolutePath + " -classpath " + cp.absolutePath + " " + j
- cmd !;
- {}
- } dependsOn (Keys.compile in Compile)
-
- val defaults: Seq[Setting[_]] = NativeBuild.defaults ++ Seq(
- javahTask,
- NativeBuild.compile <<= NativeBuild.compile.dependsOn(javah)
- )
-
-}
-
diff --git a/project/Jni.scala b/project/Jni.scala
new file mode 100644
index 0000000..0263786
--- /dev/null
+++ b/project/Jni.scala
@@ -0,0 +1,37 @@
+import sbt._
+import Keys._
+import com.github.jodersky.build.NativeKeys._
+
+object Jni {
+ val jdkHome = settingKey[File]("Home of JDK.")
+ val javahHeaderDirectory = settingKey[File]("Directory where generated javah header files are placed.")
+ val javahClasses = settingKey[Seq[String]]("Fully qualified names of classes containing native declarations.")
+ val javah = taskKey[Seq[File]]("Generate JNI headers.")
+
+ val defaultSettings: Seq[Setting[_]] = Seq(
+ jdkHome := file(sys.env("JAVA_HOME")),
+ javahHeaderDirectory := (sourceManaged in Native).value / "javah",
+ javah := {
+
+ val cp = (fullClasspath in Compile).value.map(_.data.getAbsolutePath).mkString(":")
+ for (clazz <- javahClasses.value) {
+ val parts = Seq(
+ "javah",
+ "-d", javahHeaderDirectory.value,
+ "-classpath", cp,
+ clazz)
+ val cmd = parts.mkString(" ")
+ val ev = Process(cmd) ! streams.value.log
+ if (ev != 0) throw new RuntimeException("Error occured running javah.")
+ }
+ IO.listFiles(javahHeaderDirectory.value)
+ },
+ sourceGenerators in Native <+= javah map {headers =>
+ headers
+ },
+ includeDirectories in Native += javahHeaderDirectory.value,
+ javah <<= (javah dependsOn (compile in Compile)),
+ includeDirectories in Native += jdkHome.value / "include"
+ )
+}
+
diff --git a/project/NativeBuild.scala b/project/NativeBuild.scala
deleted file mode 100644
index a77e8f8..0000000
--- a/project/NativeBuild.scala
+++ /dev/null
@@ -1,75 +0,0 @@
-import sbt._
-import Keys._
-
-object NativeBuild {
-
- //settings
- val sourceDirectory = SettingKey[File]("native-source-directory", "Native source directory containing files to compile.")
- val compiler = SettingKey[String]("native-compiler", "Native compiler.")
- val options = SettingKey[Seq[String]]("native-options", "Flags for native compiler.")
- val includeDirectories = SettingKey[Seq[File]]("native-include-directories", "Include directories for native compiler.")
- val outputDirectory = SettingKey[File]("native-output-directory", "Directory for native output.")
- val linker = SettingKey[String]("native-linker", "Native linker.")
- val linkerOutput = SettingKey[File]("native-linker-output", "Name of linker output.")
- val linkerOptions = SettingKey[Seq[String]]("native-linker-options", "Native linker options.")
- val linkerLibraries = SettingKey[Seq[String]]("native-linker-libraries", "Libraries against which to link.")
-
- //tasks
- val outputFromSource = TaskKey[File => File]("native-output-from-source", "Get name of native binary from source file.")
- val sources = TaskKey[Seq[File]]("native-source", "Native source files to compile.")
- val makeOutputDirectory = TaskKey[Unit]("native-make-output-directory", "Make native output directory.")
- val compile = TaskKey[Unit]("native-compile", "Compiles native sources.")
- val link = TaskKey[Unit]("native-link", "Link native sources.")
-
- //task implementations
- val outputFromSourceTask = outputFromSource <<= (outputDirectory) map {
- outputDir =>
- ((src: File) => {file((outputDir / src.base).absolutePath + ".o")})
- }
-
- val makeOutputDirectoryTask = makeOutputDirectory <<= (outputDirectory) map {o => o.mkdirs(); {}}
-
- def compileSingleFile(compiler: String, options: Seq[String], includeDirectories: Seq[File], source: File, s2o: File => File): Unit = {
- val cmdParts =
- List(compiler) ++
- options ++
- includeDirectories.map(i => "-I" + i.absolutePath) ++
- List("-c", source.absolutePath) ++
- List("-o", s2o(source))
-
- val cmd = cmdParts.mkString(" ")
- cmd !
- }
-
- val compileTask = compile <<= (compiler, options, includeDirectories, sources, outputFromSource) map {
- (c, f, i, srcs, out) => for (s <- srcs) compileSingleFile(c,f,i,s,out)
- } dependsOn(makeOutputDirectory)
-
- val linkTask = link <<= (linker, linkerOptions, linkerLibraries, linkerOutput, sources, outputFromSource) map { (l, opts, libs, out, srcs, s2o) =>
- val outs = srcs.map(s2o(_))
- val cmd: Seq[String] = Seq(l) ++ opts ++ Seq("-o", out.absolutePath) ++ outs.map(_.absolutePath) ++ libs.map(lib => "-l" + lib)
- cmd !;
- {}
- } dependsOn(compile)
-
-
-
- lazy val defaults = Seq(
- compiler := "gcc",
- options := Seq(),
- sourceDirectory <<= Keys.sourceDirectory(_ / "main" / "c"),
- sources <<= sourceDirectory map (dir => (dir ** "*.c").get),
- includeDirectories <<= sourceDirectory(dir => Seq(dir)),
- outputDirectory <<= target(_ / "c"),
- linker := "gcc",
- linkerOutput <<= outputDirectory(_ / "a.out"),
- linkerOptions := Seq(),
- linkerLibraries := Seq(),
-
- outputFromSourceTask,
- makeOutputDirectoryTask,
- compileTask,
- linkTask
- )
-
-} \ No newline at end of file
diff --git a/project/NativeSettings.foo b/project/NativeSettings.foo
deleted file mode 100644
index 5a544c1..0000000
--- a/project/NativeSettings.foo
+++ /dev/null
@@ -1,56 +0,0 @@
-import sbt._
-import Keys._
-
-object NativeSettings {
-
- val jdkHome = SettingKey[File]("jdk-home", "Home of JDK.")
-
- val javaClass = SettingKey[String]("native-java-file", "Fully qualified name of class containing native declarations.")
- val sourceDirectory = SettingKey[File]("native-source-directory", "Native source directory ontaining files to compile.")
- val sources = SettingKey[File]("native-source", "Native source files to compile.")
-
- val compiler = SettingKey[String]("native-compiler", "Native compiler.")
- val flags = SettingKey[Seq[String]]("native-flags", "Flags for native compiler.")
- val includeDirectories = SettingKey[Seq[File]]("native-include-directories", "Include directories for native compiler.")
- val outputDirectory = SettingKey[File]("native-output-directory", "Directory for native output.")
-
- val makeOutputDirectory = TaskKey[Unit]("native-make-output-directory", "Make native output directory.")
- val compile = TaskKey[Unit]("native-compile", "Compiles native sources.")
- val javah = TaskKey[Unit]("native-javah", "Generate JNI headers.")
-
- val javahTask = javah <<= (javaClass, sourceDirectory, Keys.classDirectory) map {(j, src, cp) =>
- val cmd = "javah -d " + source.absolutePath + " -cp " + cp.absolutePath + " " + javaClass
- cmd !
- }
-
- def compileTask(compiler: String, flags: Seq[String], includeDirectories: Seq[File], source: File, outputDirectory: File): Unit = {
- val cmdParts =
- List(compiler) ++
- flags ++
- includeDirectories.map(i => "-I" + i.absolutePath) ++
- List("-c", source.absolutePath) ++
- List("-o", (outputDirectory / source.base).absolutePath + ".o")
-
- val cmd = cmdParts.mkString(" ")
- println(cmd)
- cmd !
- }
-
- def jdkHome =
-
- lazy val defaults = Seq(
- jdkHome := file(System.getProperty("java.home")) / "..",
- compiler := "gcc",
- flags := Seq(),
- source <<= sourceDirectory(_ / "main" / "c" / "flow.c"),
- includeDirectories := Seq(jdkHome / "include", jdkHome / "include" / "linux"),
- outputDirectory <<= target(_ / "c"),
- makeOutputDirectory <<= (outputDirectory) map {o => o.mkdirs()},
-
-
- compile <<= ((compiler, flags, includeDirectories, source, outputDirectory) map {
- (c, f, i, s, o) => compileTask(c, f, i, s, o)
- }).dependsOn(makeOutputDirectory)
- )
-
-} \ No newline at end of file
diff --git a/project/build.properties b/project/build.properties
new file mode 100644
index 0000000..15f8ffd
--- /dev/null
+++ b/project/build.properties
@@ -0,0 +1 @@
+sbt.version=0.13.0-Beta2
diff --git a/project/plugins.sbt b/project/plugins.sbt
new file mode 100644
index 0000000..6eb2159
--- /dev/null
+++ b/project/plugins.sbt
@@ -0,0 +1 @@
+addSbtPlugin("com.github.jodersky" % "sbt-native" % "1.0-SNAPSHOT")