blob: 0c7e8fa7e2da105fd3e7b399c694a4148f8659a6 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed 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. See accompanying LICENSE file.
-->
<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.ozone</groupId>
<artifactId>hdds</artifactId>
<version>2.1.0-SNAPSHOT</version>
</parent>
<artifactId>hdds-rocks-native</artifactId>
<name>Apache Ozone HDDS RocksDB Tools</name>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.ozone</groupId>
<artifactId>hdds-common</artifactId>
</dependency>
<dependency>
<groupId>org.apache.ozone</groupId>
<artifactId>hdds-managed-rocksdb</artifactId>
</dependency>
<dependency>
<groupId>org.rocksdb</groupId>
<artifactId>rocksdbjni</artifactId>
<!-- <scope>test</scope> but transitive via hdds-managed-rocksdb -->
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>org.apache.ozone</groupId>
<artifactId>hdds-test-utils</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<configuration>
<excludeFilterFile>${basedir}/dev-support/findbugsExcludeFile.xml</excludeFilterFile>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<proc>none</proc>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>cpu-count</id>
<activation>
<property>
<name>!system.numCores</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>get-cpu-count</id>
<goals>
<goal>cpu-count</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<cpuCount>system.numCores</cpuCount>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>rocks_tools_native</id>
<activation>
<property>
<name>rocks_tools_native</name>
</property>
</activation>
<properties>
<cmake.standards>20</cmake.standards>
<sstDump.include>true</sstDump.include>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>set-property</id>
<goals>
<goal>java</goal>
</goals>
<phase>initialize</phase>
<configuration>
<mainClass>org.apache.hadoop.hdds.utils.db.managed.JniLibNamePropertyWriter</mainClass>
<arguments>
<argument>${project.build.directory}/propertyFile.txt</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<executions>
<execution>
<id>read-property-from-file</id>
<goals>
<goal>read-project-properties</goal>
</goals>
<phase>initialize</phase>
<configuration>
<files>
<file>${project.build.directory}/propertyFile.txt</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependency</id>
<goals>
<goal>unpack</goal>
</goals>
<phase>initialize</phase>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.rocksdb</groupId>
<artifactId>rocksdbjni</artifactId>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/rocksdbjni</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.googlecode.maven-download-plugin</groupId>
<artifactId>download-maven-plugin</artifactId>
<executions>
<execution>
<id>rocksdb source download</id>
<goals>
<goal>wget</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<url>https://github.com/facebook/rocksdb/archive/refs/tags/v${rocksdb.version}.tar.gz</url>
<outputFileName>rocksdb-v${rocksdb.version}.tar.gz</outputFileName>
<outputDirectory>${project.build.directory}/rocksdb</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-patch-plugin</artifactId>
<configuration>
<patchFile>${basedir}/src/main/patches/rocks-native.patch</patchFile>
<strip>1</strip>
<targetDirectory>${project.build.directory}/rocksdb/rocksdb-${rocksdb.version}</targetDirectory>
</configuration>
<executions>
<execution>
<id>patch</id>
<goals>
<goal>apply</goal>
</goals>
<phase>process-sources</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>unzip-artifact</id>
<goals>
<goal>run</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<target>
<untar compression="gzip" dest="${project.build.directory}/rocksdb/" src="${project.build.directory}/rocksdb/rocksdb-v${rocksdb.version}.tar.gz" />
</target>
</configuration>
</execution>
<execution>
<id>build-rocksjava</id>
<goals>
<goal>run</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<target>
<exec executable="chmod" failonerror="true">
<arg line="-R" />
<arg line="775" />
<arg line="${project.build.directory}/rocksdb/rocksdb-${rocksdb.version}" />
</exec>
<exec dir="${project.build.directory}/rocksdb/rocksdb-${rocksdb.version}" executable="make" failonerror="true">
<arg line="PORTABLE=1" />
<arg line="DEBUG_LEVEL=0" />
<arg line="EXTRA_CXXFLAGS='-fPIC -D_GLIBCXX_USE_CXX11_ABI=0'" />
<arg line="-j${system.numCores}" />
<arg line="tools_lib" />
</exec>
</target>
</configuration>
</execution>
<execution>
<id>build-rocks-tools</id>
<goals>
<goal>run</goal>
</goals>
<phase>process-classes</phase>
<configuration>
<target>
<mkdir dir="${project.build.directory}/native/rocksdb" />
<copy file="${project.build.directory}/rocksdbjni/${rocksdbLibName}" tofile="${project.build.directory}/native/rocksdb/${rocksdbLibName}" />
<exec dir="${project.build.directory}/native/rocksdb" executable="cmake" failonerror="true">
<env key="CFLAGS" value="-fPIC" />
<env key="CXXFLAGS" value="-fPIC" />
<arg line="${basedir}/src" />
<arg line="-DGENERATED_JAVAH=${project.build.directory}/native/javah" />
<arg line="-DNATIVE_DIR=${basedir}/src/main/native" />
<arg line="-DSST_DUMP_INCLUDE=${sstDump.include}" />
<arg line="-DCMAKE_STANDARDS=${cmake.standards}" />
<arg line="-DROCKSDB_HEADERS=${project.build.directory}/rocksdb/rocksdb-${rocksdb.version}/include" />
<arg line="-DROCKSDB_TOOLS_LIB=${project.build.directory}/rocksdb/rocksdb-${rocksdb.version}" />
<arg line="-DROCKSDB_LIB=${project.build.directory}/native/rocksdb/${rocksdbLibName}" />
</exec>
<exec dir="${project.build.directory}/native/rocksdb" executable="make" failonerror="true" />
<delete dir="${project.build.directory}/rocksdb/rocksdb-${rocksdb.version}" includeemptydirs="true" />
</target>
</configuration>
</execution>
<execution>
<id>copy-lib-file</id>
<goals>
<goal>run</goal>
</goals>
<phase>process-classes</phase>
<configuration>
<target>
<copy toDir="${project.build.outputDirectory}">
<fileset dir="${project.build.directory}/native/rocksdb" includes="**/lib*.*" />
</copy>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<goals>
<goal>compile</goal>
</goals>
<phase>compile</phase>
<configuration>
<compilerArgs>
<arg>-h</arg>
<arg>${project.build.directory}/native/javah</arg>
</compilerArgs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<includes>
<include>**/*.class</include>
<include>**/lib*.dylib</include>
<include>**/lib*.so</include>
<include>**/lib*.jnilib</include>
<include>**/lib*.dll</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>${maven-surefire-plugin.argLine} @{argLine} -Djava.library.path=${project.build.directory}/native/rocksdb</argLine>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>