MNEMONIC-750: Add a mnemonic-memkind-pmem-service
diff --git a/mnemonic-memory-services/mnemonic-memkind-pmem-service/build.gradle b/mnemonic-memory-services/mnemonic-memkind-pmem-service/build.gradle
new file mode 100644
index 0000000..f04b2ff
--- /dev/null
+++ b/mnemonic-memory-services/mnemonic-memkind-pmem-service/build.gradle
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+plugins {
+ id 'net.freudasoft.gradle-cmake-plugin'
+ id 'com.github.johnrengelman.shadow'
+ id 'com.google.osdetector'
+}
+
+description = 'mnemonic-memkind-pmem-service'
+
+
+dependencies {
+ implementation project(':mnemonic-common')
+ testCompileOnly 'org.testng:testng'
+}
+
+def nativeDir = "$projectDir/src/main/native"
+
+cmake {
+ sourceFolder = file("$nativeDir")
+ workingFolder = file("$nativeDir/build")
+ buildSharedLibs = true
+ buildConfig = 'Release'
+ buildTarget = 'install'
+}
+
+task copyResources(type: Copy) {
+ from "$nativeDir/dist/native"
+ into "${buildDir}/classes/java/main/native"
+}
+
+shadowJar {
+ minimize()
+ destinationDirectory = file("$projectDir/../service-dist")
+ archiveClassifier = osdetector.classifier
+}
+
+task cleanDist(type: Delete) {
+ delete "$nativeDir/dist"
+}
+
+compileJava.dependsOn cmakeBuild
+processResources.dependsOn copyResources
+build.dependsOn shadowJar
+clean.dependsOn cmakeClean
+clean.dependsOn cleanDist
+test.useTestNG()
diff --git a/mnemonic-memory-services/mnemonic-memkind-pmem-service/pom.xml b/mnemonic-memory-services/mnemonic-memkind-pmem-service/pom.xml
new file mode 100644
index 0000000..8cdea9a
--- /dev/null
+++ b/mnemonic-memory-services/mnemonic-memkind-pmem-service/pom.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.mnemonic</groupId>
+ <artifactId>mnemonic-memory-services</artifactId>
+ <version>0.18.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>mnemonic-memkind-pmem-service</artifactId>
+ <name>mnemonic-memkind-pmem-service</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>src/main/native/dist</directory>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build-native</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target>
+ <mkdir dir="src/main/native/build" />
+ <exec dir="src/main/native/build" executable="cmake" failonerror="true">
+ <arg value=".." />
+ </exec>
+ <exec dir="src/main/native/build" executable="make" failonerror="true">
+ <env key="JAVA_HOME" value="${java.home}/.." />
+ </exec>
+ </target>
+ </configuration>
+ </execution>
+ <execution>
+ <id>clean-native</id>
+ <phase>clean</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target>
+ <delete dir="src/main/native/build" />
+ <delete dir="src/main/native/dist" />
+ </target>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-scm-publish-plugin</artifactId>
+ <configuration>
+ <checkoutDirectory>${project.build.directory}/scmpublish</checkoutDirectory>
+ <checkinComment>Publishing javadoc for ${project.artifactId}:${project.version}</checkinComment>
+ <content>${project.reporting.outputDirectory}/apidocs</content>
+ <skipDeletedFiles>true</skipDeletedFiles>
+ <pubScmUrl>scm:git:https://github.com/bigdata-memory/mnenomic-project.git</pubScmUrl>
+ <scmBranch>gh-pages</scmBranch> <!-- branch with static site -->
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>doc</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <show>public</show>
+ <nohelp>true</nohelp>
+ <header>Mnenomic-MemkindPmemAllocator, ${project.version}</header>
+ <footer>Mnenomic-MemkindPmemAllocator, ${project.version}</footer>
+ <doctitle>Mnenomic, ${project.version}</doctitle>
+ </configuration>
+ <executions>
+ <execution>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>test</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <argLine>-Xmx2g -XX:MaxPermSize=1g</argLine>
+ <suiteXmlFiles>
+ <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
+ </suiteXmlFiles>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+
+</project>
diff --git a/mnemonic-memory-services/mnemonic-memkind-pmem-service/src/main/resources/META-INF/services/org.apache.mnemonic.service.memory.VolatileMemoryAllocatorService b/mnemonic-memory-services/mnemonic-memkind-pmem-service/src/main/resources/META-INF/services/org.apache.mnemonic.service.memory.VolatileMemoryAllocatorService
new file mode 100644
index 0000000..0901ac6
--- /dev/null
+++ b/mnemonic-memory-services/mnemonic-memkind-pmem-service/src/main/resources/META-INF/services/org.apache.mnemonic.service.memory.VolatileMemoryAllocatorService
@@ -0,0 +1 @@
+org.apache.mnemonic.service.memory.internal.PMDKVMemServiceImpl
diff --git a/mnemonic-memory-services/mnemonic-memkind-pmem-service/src/main/resources/log4j2.xml b/mnemonic-memory-services/mnemonic-memkind-pmem-service/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..6334f2f
--- /dev/null
+++ b/mnemonic-memory-services/mnemonic-memkind-pmem-service/src/main/resources/log4j2.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<Configuration status="INFO">
+ <Appenders>
+ <Console name="Console" target="SYSTEM_OUT">
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
+ </Console>
+ </Appenders>
+ <Loggers>
+ <Root level="warn">
+ <AppenderRef ref="Console" />
+ </Root>
+ </Loggers>
+</Configuration>