diff --git a/.gitignore b/.gitignore index 15736d7..4bc09b2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,11 +5,12 @@ out .attach* *.log *.so +*.dylib slinc/src/io/gitlab/mhammons/slinc/test.worksheet.sc *.bench .bsp .scala-build .DS_Store -metals.sbt +metals.sbt target diff --git a/build.sbt b/build.sbt index 5e5d5a9..22e4c03 100644 --- a/build.sbt +++ b/build.sbt @@ -33,26 +33,82 @@ inThisBuild( ) ) -scalacOptions ++= Seq( - "-deprecation", - "-Wunused:all", - "-feature", - "-unchecked", - "-Xcheck-macros", - "-Xprint-suspension", - "-Xsemanticdb", - "-Yexplicit-nulls", - "-Ysafe-init", - "-source:future", - "-Ykind-projector", - "-Vprofile" -) +lazy val slinc = project + .in(file("slinc")) + .settings( + name := "slinc", + scalacOptions ++= Seq( + "-deprecation", + "-Wunused:all", + "-feature", + "-unchecked", + "-Xcheck-macros", + "-Xprint-suspension", + "-Xsemanticdb", + "-Yexplicit-nulls", + "-Ysafe-init", + "-source:future", + "-Ykind-projector", + "-Vprofile" + ), + libraryDependencies += "org.scalameta" %% "munit" % "1.0.0-M10" % Test, + libraryDependencies += "org.scalameta" %% "munit-scalacheck" % "1.0.0-M10" % Test, + libraryDependencies += "org.scala-lang" %% "scala3-staging" % scalaVersion.value, + Compile / doc / scalacOptions ++= Seq("-siteroot", "docs"), + mimaPreviousArtifacts := previousStableVersion.value + .map(organization.value %% moduleName.value % _) + .toSet + ) -libraryDependencies += "org.scalameta" %% "munit" % "1.0.0-M10" % Test -libraryDependencies += "org.scalameta" %% "munit-scalacheck" % "1.0.0-M10" % Test -libraryDependencies += "org.scala-lang" %% "scala3-staging" % scalaVersion.value +lazy val copyNative = TaskKey[Set[File]]("copy shared lib") -Compile / doc / scalacOptions ++= Seq("-siteroot", "docs") -mimaPreviousArtifacts := previousStableVersion.value - .map(organization.value %% moduleName.value % _) - .toSet +lazy val examples = project + .in(file("slinc-examples")) + .dependsOn(slinc) + .settings( + publishTo := None, + publishLocal := Def.task(()), + copyNative := { + val nativeSrc = (`examples-native` / Compile / nativeCompile).value + // rename shared lib name so that it complies with SlinC convention(`{lib name}_{arch}.{ext}`). + val destName = { + val arch = + (`examples-native` / nativePlatform).value.takeWhile(_ != '-') + val (base, ext) = nativeSrc.baseAndExt + s"${base}_${arch}.${ext}" + } + val nativeDest = + (Compile / resourceDirectory).value / "native" / destName + IO.copy(Seq(nativeSrc -> nativeDest)) + }, + Compile / resourceGenerators += Def.task { + copyNative.value.toSeq + }.taskValue, + run / fork := true, + javaOptions ++= Seq( + "--add-modules=jdk.incubator.foreign", + "--enable-native-access=ALL-UNNAMED" + ), + libraryDependencies += "fr.hammons" %% "slinc-runtime" % "0.6.0" + ) + .dependsOn(`examples-native`) + +/* + * A project to build native shared library + */ +lazy val `examples-native` = project + .in(file("slinc-examples-native")) + .enablePlugins(JniNative) + .settings( + publishTo := None, + publishLocal := Def.task(()), + nativeCompile / sourceDirectory := sourceDirectory.value + ) + +lazy val root = project + .in(file(".")) + .aggregate(slinc, examples, `examples-native`) + .settings( + publishTo := None, + publishLocal := Def.task(()) + ) diff --git a/project/plugins.sbt b/project/plugins.sbt index c138792..9b4e287 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -3,3 +3,4 @@ addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.0.5") addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12") addSbtPlugin("ch.epfl.scala" % "sbt-tasty-mima" % "1.1.0") addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.3") +addSbtPlugin("com.github.sbt" % "sbt-jni" % "1.6.0") diff --git a/slinc-examples-native/src/CMakeLists.txt b/slinc-examples-native/src/CMakeLists.txt new file mode 100644 index 0000000..430a5d8 --- /dev/null +++ b/slinc-examples-native/src/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.1) + +option(SBT "Set if invoked from sbt-jni" OFF) + +project(add) + +set(PROJECT_VERSION_MAJOR 0) +set(PROJECT_VERSION_MINOR 0) +set(PROJECT_VERSION_PATCH 0) + +include_directories(.) +include_directories(include) +add_library(add MODULE add.c) + +# Sources +file(GLOB LIB_SRC + "*.c" + "*.cc" + "*.cpp" +) + +set (LIB_NAME ${PROJECT_NAME}${PROJECT_VERSION_MAJOR}) +add_library(${LIB_NAME} SHARED ${LIB_SRC}) +install(TARGETS ${LIB_NAME} LIBRARY DESTINATION .) diff --git a/slinc-examples-native/src/add.c b/slinc-examples-native/src/add.c new file mode 100644 index 0000000..f39aa20 --- /dev/null +++ b/slinc-examples-native/src/add.c @@ -0,0 +1,19 @@ +#include +#include +#include + +int add(int a,int b) { + return a + b; +} + +int add_by_callback(int a, int (*f)(void)) { + int b = f(); + return a + b; +} + +char* add_str(char* a, char* b) { + int size = strlen(a) + strlen(b) + 1; + char *buf = malloc (size); + snprintf(buf, size, "%s%s", a, b); + return buf; +} diff --git a/slinc-examples/src/main/scala/fr/hammons/slinc/CallSharedLib.scala b/slinc-examples/src/main/scala/fr/hammons/slinc/CallSharedLib.scala new file mode 100644 index 0000000..efb13b9 --- /dev/null +++ b/slinc-examples/src/main/scala/fr/hammons/slinc/CallSharedLib.scala @@ -0,0 +1,28 @@ +import fr.hammons.slinc.runtime.given +import fr.hammons.slinc.types.* +import fr.hammons.slinc.* + +import fr.hammons.slinc.annotations.NeedsResource + +@NeedsResource("libadd0") +trait libadd derives FSet: + def add(a: CInt, b: CInt): CInt + def add_by_callback(a: CInt, f: Ptr[?]): CInt + def add_str(a: Ptr[Byte], f: Ptr[Byte]): Ptr[Byte] + +@main def run = + val libadd = FSet.instance[libadd] + assert(libadd.add(21, 21) == 42) + + val callback = Scope.global: + Ptr.upcall(() => 21) + assert(libadd.add_by_callback(21, callback) == 42) + + val (hello, world) = ("Hello", "World") + val (a, b) = Scope.global: + (Ptr.copy(hello), Ptr.copy(world)) + + val c = libadd.add_str(a, b) + val result = + Ptr.copyIntoString(c)(hello.getBytes().length + world.getBytes().length + 1) + assert(result == hello + world) diff --git a/slinc-examples/src/main/scala/fr/hammons/slinc/CallStdLib.scala b/slinc-examples/src/main/scala/fr/hammons/slinc/CallStdLib.scala new file mode 100644 index 0000000..c3d0de1 --- /dev/null +++ b/slinc-examples/src/main/scala/fr/hammons/slinc/CallStdLib.scala @@ -0,0 +1,13 @@ +import fr.hammons.slinc.runtime.given +import fr.hammons.slinc.types.* +import fr.hammons.slinc.* + +case class div_t(quot: CInt, rem: CInt) derives Struct + +trait MyLib derives FSet: + def div(numer: CInt, denom: CInt): div_t +val myLib = FSet.instance[MyLib] + +@main def calc = + val div_t(quot, rem) = myLib.div(5, 2) + assert((quot, rem) == (2, 1), s"Unexpected (quot, rem): ($quot, $rem)") diff --git a/src/main/scala/fr/hammons/slinc/Alias.scala b/slinc/src/main/scala/fr/hammons/slinc/Alias.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Alias.scala rename to slinc/src/main/scala/fr/hammons/slinc/Alias.scala diff --git a/src/main/scala/fr/hammons/slinc/Allocator.scala b/slinc/src/main/scala/fr/hammons/slinc/Allocator.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Allocator.scala rename to slinc/src/main/scala/fr/hammons/slinc/Allocator.scala diff --git a/src/main/scala/fr/hammons/slinc/Bytes.scala b/slinc/src/main/scala/fr/hammons/slinc/Bytes.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Bytes.scala rename to slinc/src/main/scala/fr/hammons/slinc/Bytes.scala diff --git a/src/main/scala/fr/hammons/slinc/CFunctionDescriptor.scala b/slinc/src/main/scala/fr/hammons/slinc/CFunctionDescriptor.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/CFunctionDescriptor.scala rename to slinc/src/main/scala/fr/hammons/slinc/CFunctionDescriptor.scala diff --git a/src/main/scala/fr/hammons/slinc/CUnion.scala b/slinc/src/main/scala/fr/hammons/slinc/CUnion.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/CUnion.scala rename to slinc/src/main/scala/fr/hammons/slinc/CUnion.scala diff --git a/src/main/scala/fr/hammons/slinc/DescriptorOf.scala b/slinc/src/main/scala/fr/hammons/slinc/DescriptorOf.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/DescriptorOf.scala rename to slinc/src/main/scala/fr/hammons/slinc/DescriptorOf.scala diff --git a/src/main/scala/fr/hammons/slinc/FSet.scala b/slinc/src/main/scala/fr/hammons/slinc/FSet.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/FSet.scala rename to slinc/src/main/scala/fr/hammons/slinc/FSet.scala diff --git a/src/main/scala/fr/hammons/slinc/FunctionBindingGenerator.scala b/slinc/src/main/scala/fr/hammons/slinc/FunctionBindingGenerator.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/FunctionBindingGenerator.scala rename to slinc/src/main/scala/fr/hammons/slinc/FunctionBindingGenerator.scala diff --git a/src/main/scala/fr/hammons/slinc/FunctionContext.scala b/slinc/src/main/scala/fr/hammons/slinc/FunctionContext.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/FunctionContext.scala rename to slinc/src/main/scala/fr/hammons/slinc/FunctionContext.scala diff --git a/src/main/scala/fr/hammons/slinc/FunctionDescriptor.scala b/slinc/src/main/scala/fr/hammons/slinc/FunctionDescriptor.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/FunctionDescriptor.scala rename to slinc/src/main/scala/fr/hammons/slinc/FunctionDescriptor.scala diff --git a/src/main/scala/fr/hammons/slinc/InlineHelpers.scala b/slinc/src/main/scala/fr/hammons/slinc/InlineHelpers.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/InlineHelpers.scala rename to slinc/src/main/scala/fr/hammons/slinc/InlineHelpers.scala diff --git a/src/main/scala/fr/hammons/slinc/MacroHelpers.scala b/slinc/src/main/scala/fr/hammons/slinc/MacroHelpers.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/MacroHelpers.scala rename to slinc/src/main/scala/fr/hammons/slinc/MacroHelpers.scala diff --git a/src/main/scala/fr/hammons/slinc/Mem.scala b/slinc/src/main/scala/fr/hammons/slinc/Mem.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Mem.scala rename to slinc/src/main/scala/fr/hammons/slinc/Mem.scala diff --git a/src/main/scala/fr/hammons/slinc/MethodCompatible.scala b/slinc/src/main/scala/fr/hammons/slinc/MethodCompatible.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/MethodCompatible.scala rename to slinc/src/main/scala/fr/hammons/slinc/MethodCompatible.scala diff --git a/src/main/scala/fr/hammons/slinc/MethodHandleFacade.java b/slinc/src/main/scala/fr/hammons/slinc/MethodHandleFacade.java similarity index 100% rename from src/main/scala/fr/hammons/slinc/MethodHandleFacade.java rename to slinc/src/main/scala/fr/hammons/slinc/MethodHandleFacade.java diff --git a/src/main/scala/fr/hammons/slinc/MethodHandleTools.scala b/slinc/src/main/scala/fr/hammons/slinc/MethodHandleTools.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/MethodHandleTools.scala rename to slinc/src/main/scala/fr/hammons/slinc/MethodHandleTools.scala diff --git a/src/main/scala/fr/hammons/slinc/MethodHandler.scala b/slinc/src/main/scala/fr/hammons/slinc/MethodHandler.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/MethodHandler.scala rename to slinc/src/main/scala/fr/hammons/slinc/MethodHandler.scala diff --git a/src/main/scala/fr/hammons/slinc/Ptr.scala b/slinc/src/main/scala/fr/hammons/slinc/Ptr.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Ptr.scala rename to slinc/src/main/scala/fr/hammons/slinc/Ptr.scala diff --git a/src/main/scala/fr/hammons/slinc/Scope.scala b/slinc/src/main/scala/fr/hammons/slinc/Scope.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Scope.scala rename to slinc/src/main/scala/fr/hammons/slinc/Scope.scala diff --git a/src/main/scala/fr/hammons/slinc/SetSizeArray.scala b/slinc/src/main/scala/fr/hammons/slinc/SetSizeArray.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/SetSizeArray.scala rename to slinc/src/main/scala/fr/hammons/slinc/SetSizeArray.scala diff --git a/src/main/scala/fr/hammons/slinc/Slinc.scala b/slinc/src/main/scala/fr/hammons/slinc/Slinc.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Slinc.scala rename to slinc/src/main/scala/fr/hammons/slinc/Slinc.scala diff --git a/src/main/scala/fr/hammons/slinc/SlincImpl.scala b/slinc/src/main/scala/fr/hammons/slinc/SlincImpl.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/SlincImpl.scala rename to slinc/src/main/scala/fr/hammons/slinc/SlincImpl.scala diff --git a/src/main/scala/fr/hammons/slinc/Struct.scala b/slinc/src/main/scala/fr/hammons/slinc/Struct.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Struct.scala rename to slinc/src/main/scala/fr/hammons/slinc/Struct.scala diff --git a/src/main/scala/fr/hammons/slinc/Transform.scala b/slinc/src/main/scala/fr/hammons/slinc/Transform.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Transform.scala rename to slinc/src/main/scala/fr/hammons/slinc/Transform.scala diff --git a/src/main/scala/fr/hammons/slinc/TypeDescriptor.scala b/slinc/src/main/scala/fr/hammons/slinc/TypeDescriptor.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/TypeDescriptor.scala rename to slinc/src/main/scala/fr/hammons/slinc/TypeDescriptor.scala diff --git a/src/main/scala/fr/hammons/slinc/VarArgs.scala b/slinc/src/main/scala/fr/hammons/slinc/VarArgs.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/VarArgs.scala rename to slinc/src/main/scala/fr/hammons/slinc/VarArgs.scala diff --git a/src/main/scala/fr/hammons/slinc/VarArgsBuilder.scala b/slinc/src/main/scala/fr/hammons/slinc/VarArgsBuilder.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/VarArgsBuilder.scala rename to slinc/src/main/scala/fr/hammons/slinc/VarArgsBuilder.scala diff --git a/src/main/scala/fr/hammons/slinc/Variadic.scala b/slinc/src/main/scala/fr/hammons/slinc/Variadic.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/Variadic.scala rename to slinc/src/main/scala/fr/hammons/slinc/Variadic.scala diff --git a/src/main/scala/fr/hammons/slinc/VoidHelper.java b/slinc/src/main/scala/fr/hammons/slinc/VoidHelper.java similarity index 100% rename from src/main/scala/fr/hammons/slinc/VoidHelper.java rename to slinc/src/main/scala/fr/hammons/slinc/VoidHelper.java diff --git a/src/main/scala/fr/hammons/slinc/annotations/DependencyAnnotation.scala b/slinc/src/main/scala/fr/hammons/slinc/annotations/DependencyAnnotation.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/annotations/DependencyAnnotation.scala rename to slinc/src/main/scala/fr/hammons/slinc/annotations/DependencyAnnotation.scala diff --git a/src/main/scala/fr/hammons/slinc/annotations/NameOverride.scala b/slinc/src/main/scala/fr/hammons/slinc/annotations/NameOverride.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/annotations/NameOverride.scala rename to slinc/src/main/scala/fr/hammons/slinc/annotations/NameOverride.scala diff --git a/src/main/scala/fr/hammons/slinc/annotations/Needs.scala b/slinc/src/main/scala/fr/hammons/slinc/annotations/Needs.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/annotations/Needs.scala rename to slinc/src/main/scala/fr/hammons/slinc/annotations/Needs.scala diff --git a/src/main/scala/fr/hammons/slinc/annotations/NeedsFile.scala b/slinc/src/main/scala/fr/hammons/slinc/annotations/NeedsFile.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/annotations/NeedsFile.scala rename to slinc/src/main/scala/fr/hammons/slinc/annotations/NeedsFile.scala diff --git a/src/main/scala/fr/hammons/slinc/annotations/NeedsResource.scala b/slinc/src/main/scala/fr/hammons/slinc/annotations/NeedsResource.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/annotations/NeedsResource.scala rename to slinc/src/main/scala/fr/hammons/slinc/annotations/NeedsResource.scala diff --git a/src/main/scala/fr/hammons/slinc/container/Capabilities.scala b/slinc/src/main/scala/fr/hammons/slinc/container/Capabilities.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/container/Capabilities.scala rename to slinc/src/main/scala/fr/hammons/slinc/container/Capabilities.scala diff --git a/src/main/scala/fr/hammons/slinc/container/Container.scala b/slinc/src/main/scala/fr/hammons/slinc/container/Container.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/container/Container.scala rename to slinc/src/main/scala/fr/hammons/slinc/container/Container.scala diff --git a/src/main/scala/fr/hammons/slinc/container/ContextProof.scala b/slinc/src/main/scala/fr/hammons/slinc/container/ContextProof.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/container/ContextProof.scala rename to slinc/src/main/scala/fr/hammons/slinc/container/ContextProof.scala diff --git a/src/main/scala/fr/hammons/slinc/container/ContextSet.scala b/slinc/src/main/scala/fr/hammons/slinc/container/ContextSet.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/container/ContextSet.scala rename to slinc/src/main/scala/fr/hammons/slinc/container/ContextSet.scala diff --git a/src/main/scala/fr/hammons/slinc/container/LocationInCap.scala b/slinc/src/main/scala/fr/hammons/slinc/container/LocationInCap.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/container/LocationInCap.scala rename to slinc/src/main/scala/fr/hammons/slinc/container/LocationInCap.scala diff --git a/src/main/scala/fr/hammons/slinc/descriptors/TypeDescriptor.scala b/slinc/src/main/scala/fr/hammons/slinc/descriptors/TypeDescriptor.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/descriptors/TypeDescriptor.scala rename to slinc/src/main/scala/fr/hammons/slinc/descriptors/TypeDescriptor.scala diff --git a/src/main/scala/fr/hammons/slinc/fnutils/Fn.scala b/slinc/src/main/scala/fr/hammons/slinc/fnutils/Fn.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/fnutils/Fn.scala rename to slinc/src/main/scala/fr/hammons/slinc/fnutils/Fn.scala diff --git a/src/main/scala/fr/hammons/slinc/fnutils/NativeFn.scala b/slinc/src/main/scala/fr/hammons/slinc/fnutils/NativeFn.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/fnutils/NativeFn.scala rename to slinc/src/main/scala/fr/hammons/slinc/fnutils/NativeFn.scala diff --git a/src/main/scala/fr/hammons/slinc/fset/Dependency.scala b/slinc/src/main/scala/fr/hammons/slinc/fset/Dependency.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/fset/Dependency.scala rename to slinc/src/main/scala/fr/hammons/slinc/fset/Dependency.scala diff --git a/src/main/scala/fr/hammons/slinc/fset/FSetBacking.scala b/slinc/src/main/scala/fr/hammons/slinc/fset/FSetBacking.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/fset/FSetBacking.scala rename to slinc/src/main/scala/fr/hammons/slinc/fset/FSetBacking.scala diff --git a/src/main/scala/fr/hammons/slinc/jitc/Intrumentation.scala b/slinc/src/main/scala/fr/hammons/slinc/jitc/Intrumentation.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/jitc/Intrumentation.scala rename to slinc/src/main/scala/fr/hammons/slinc/jitc/Intrumentation.scala diff --git a/src/main/scala/fr/hammons/slinc/jitc/JitCService.scala b/slinc/src/main/scala/fr/hammons/slinc/jitc/JitCService.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/jitc/JitCService.scala rename to slinc/src/main/scala/fr/hammons/slinc/jitc/JitCService.scala diff --git a/src/main/scala/fr/hammons/slinc/jitc/OptimizableFn.scala b/slinc/src/main/scala/fr/hammons/slinc/jitc/OptimizableFn.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/jitc/OptimizableFn.scala rename to slinc/src/main/scala/fr/hammons/slinc/jitc/OptimizableFn.scala diff --git a/src/main/scala/fr/hammons/slinc/modules/CacheFile.scala b/slinc/src/main/scala/fr/hammons/slinc/modules/CacheFile.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/modules/CacheFile.scala rename to slinc/src/main/scala/fr/hammons/slinc/modules/CacheFile.scala diff --git a/src/main/scala/fr/hammons/slinc/modules/DependentTrieMap.scala b/slinc/src/main/scala/fr/hammons/slinc/modules/DependentTrieMap.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/modules/DependentTrieMap.scala rename to slinc/src/main/scala/fr/hammons/slinc/modules/DependentTrieMap.scala diff --git a/src/main/scala/fr/hammons/slinc/modules/DescriptorModule.scala b/slinc/src/main/scala/fr/hammons/slinc/modules/DescriptorModule.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/modules/DescriptorModule.scala rename to slinc/src/main/scala/fr/hammons/slinc/modules/DescriptorModule.scala diff --git a/src/main/scala/fr/hammons/slinc/modules/FSetModule.scala b/slinc/src/main/scala/fr/hammons/slinc/modules/FSetModule.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/modules/FSetModule.scala rename to slinc/src/main/scala/fr/hammons/slinc/modules/FSetModule.scala diff --git a/src/main/scala/fr/hammons/slinc/modules/LinkageModule.scala b/slinc/src/main/scala/fr/hammons/slinc/modules/LinkageModule.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/modules/LinkageModule.scala rename to slinc/src/main/scala/fr/hammons/slinc/modules/LinkageModule.scala diff --git a/src/main/scala/fr/hammons/slinc/modules/LinkageTools.scala b/slinc/src/main/scala/fr/hammons/slinc/modules/LinkageTools.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/modules/LinkageTools.scala rename to slinc/src/main/scala/fr/hammons/slinc/modules/LinkageTools.scala diff --git a/src/main/scala/fr/hammons/slinc/modules/ReadWriteModule.scala b/slinc/src/main/scala/fr/hammons/slinc/modules/ReadWriteModule.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/modules/ReadWriteModule.scala rename to slinc/src/main/scala/fr/hammons/slinc/modules/ReadWriteModule.scala diff --git a/src/main/scala/fr/hammons/slinc/modules/TransitionModule.scala b/slinc/src/main/scala/fr/hammons/slinc/modules/TransitionModule.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/modules/TransitionModule.scala rename to slinc/src/main/scala/fr/hammons/slinc/modules/TransitionModule.scala diff --git a/src/main/scala/fr/hammons/slinc/types/Arch.scala b/slinc/src/main/scala/fr/hammons/slinc/types/Arch.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/types/Arch.scala rename to slinc/src/main/scala/fr/hammons/slinc/types/Arch.scala diff --git a/src/main/scala/fr/hammons/slinc/types/Basic.scala b/slinc/src/main/scala/fr/hammons/slinc/types/Basic.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/types/Basic.scala rename to slinc/src/main/scala/fr/hammons/slinc/types/Basic.scala diff --git a/src/main/scala/fr/hammons/slinc/types/CLong.scala b/slinc/src/main/scala/fr/hammons/slinc/types/CLong.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/types/CLong.scala rename to slinc/src/main/scala/fr/hammons/slinc/types/CLong.scala diff --git a/src/main/scala/fr/hammons/slinc/types/HostDependentTypes.scala b/slinc/src/main/scala/fr/hammons/slinc/types/HostDependentTypes.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/types/HostDependentTypes.scala rename to slinc/src/main/scala/fr/hammons/slinc/types/HostDependentTypes.scala diff --git a/src/main/scala/fr/hammons/slinc/types/IntegralAlias.scala b/slinc/src/main/scala/fr/hammons/slinc/types/IntegralAlias.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/types/IntegralAlias.scala rename to slinc/src/main/scala/fr/hammons/slinc/types/IntegralAlias.scala diff --git a/src/main/scala/fr/hammons/slinc/types/OS.scala b/slinc/src/main/scala/fr/hammons/slinc/types/OS.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/types/OS.scala rename to slinc/src/main/scala/fr/hammons/slinc/types/OS.scala diff --git a/src/main/scala/fr/hammons/slinc/types/SizeT.scala b/slinc/src/main/scala/fr/hammons/slinc/types/SizeT.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/types/SizeT.scala rename to slinc/src/main/scala/fr/hammons/slinc/types/SizeT.scala diff --git a/src/main/scala/fr/hammons/slinc/types/TimeT.scala b/slinc/src/main/scala/fr/hammons/slinc/types/TimeT.scala similarity index 100% rename from src/main/scala/fr/hammons/slinc/types/TimeT.scala rename to slinc/src/main/scala/fr/hammons/slinc/types/TimeT.scala diff --git a/src/test/resources/native/test.c b/slinc/src/test/resources/native/test.c similarity index 100% rename from src/test/resources/native/test.c rename to slinc/src/test/resources/native/test.c diff --git a/src/test/scala/fr/hammons/slinc/BindingSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/BindingSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/BindingSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/BindingSpec.scala diff --git a/src/test/scala/fr/hammons/slinc/FSetRuntimeSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/FSetRuntimeSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/FSetRuntimeSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/FSetRuntimeSpec.scala diff --git a/src/test/scala/fr/hammons/slinc/FSetSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/FSetSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/FSetSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/FSetSpec.scala diff --git a/src/test/scala/fr/hammons/slinc/SetSizeArraySpec.scala b/slinc/src/test/scala/fr/hammons/slinc/SetSizeArraySpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/SetSizeArraySpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/SetSizeArraySpec.scala diff --git a/src/test/scala/fr/hammons/slinc/StdlibSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/StdlibSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/StdlibSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/StdlibSpec.scala diff --git a/src/test/scala/fr/hammons/slinc/TransferSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/TransferSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/TransferSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/TransferSpec.scala diff --git a/src/test/scala/fr/hammons/slinc/TypeDescriptorSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/TypeDescriptorSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/TypeDescriptorSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/TypeDescriptorSpec.scala diff --git a/src/test/scala/fr/hammons/slinc/TypesSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/TypesSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/TypesSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/TypesSpec.scala diff --git a/src/test/scala/fr/hammons/slinc/jitc/JitSpecification.scala b/slinc/src/test/scala/fr/hammons/slinc/jitc/JitSpecification.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/jitc/JitSpecification.scala rename to slinc/src/test/scala/fr/hammons/slinc/jitc/JitSpecification.scala diff --git a/src/test/scala/fr/hammons/slinc/modules/DescriptorSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/modules/DescriptorSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/modules/DescriptorSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/modules/DescriptorSpec.scala diff --git a/src/test/scala/fr/hammons/slinc/modules/LinkageToolsSpec.scala b/slinc/src/test/scala/fr/hammons/slinc/modules/LinkageToolsSpec.scala similarity index 100% rename from src/test/scala/fr/hammons/slinc/modules/LinkageToolsSpec.scala rename to slinc/src/test/scala/fr/hammons/slinc/modules/LinkageToolsSpec.scala