<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacpp-presets</artifactId>
    <version>1.5.2</version>
  </parent>

  <groupId>org.bytedeco</groupId>
  <artifactId>mxnet</artifactId>
  <version>1.5.1-${project.parent.version}</version>
  <name>JavaCPP Presets for MXNet</name>

  <properties>
    <javacpp.mkldnn.platform>${javacpp.platform}</javacpp.mkldnn.platform>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.bytedeco</groupId>
      <artifactId>opencv</artifactId>
      <version>4.1.2-${project.parent.version}</version>
    </dependency>
    <dependency>
      <groupId>org.bytedeco</groupId>
      <artifactId>openblas</artifactId>
      <version>0.3.7-${project.parent.version}</version>
    </dependency>
    <dependency>
      <groupId>org.bytedeco</groupId>
      <artifactId>mkl-dnn</artifactId>
      <version>0.21.2-${project.parent.version}</version>
    </dependency>
    <dependency>
      <groupId>org.bytedeco</groupId>
      <artifactId>javacpp</artifactId>
    </dependency>
    <dependency>
      <groupId>args4j</groupId>
      <artifactId>args4j</artifactId>
      <version>2.33</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.11</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>2.11.12</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-mllib_2.11</artifactId>
      <version>1.6.3</version>
      <optional>true</optional>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.bytedeco</groupId>
        <artifactId>javacpp</artifactId>
        <dependencies>
          <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>opencv</artifactId>
            <version>4.1.2-${project.parent.version}</version>
          </dependency>
          <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>openblas</artifactId>
            <version>0.3.7-${project.parent.version}</version>
          </dependency>
          <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>mkl-dnn</artifactId>
            <version>0.21.2-${project.parent.version}</version>
          </dependency>
          <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>opencv</artifactId>
            <version>4.1.2-${project.parent.version}</version>
            <classifier>${javacpp.platform}</classifier>
          </dependency>
          <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>openblas</artifactId>
            <version>0.3.7-${project.parent.version}</version>
            <classifier>${javacpp.platform}</classifier>
          </dependency>
          <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>mkl-dnn</artifactId>
            <version>0.21.2-${project.parent.version}</version>
            <classifier>${javacpp.mkldnn.platform}</classifier>
          </dependency>
          <!-- Use JavaCPP to get correct class path for scala-maven-plugin as ${javacpp.platform.artifacts} below -->
          <dependency>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <version>3.4.4</version>
          </dependency>
          <dependency>
            <groupId>org.scalamacros</groupId>
            <artifactId>paradise_2.11.12</artifactId>
            <version>2.1.1</version>
          </dependency>
        </dependencies>
        <configuration>
          <classPaths>
            <classPath>${basedir}/../opencv/target/classes/</classPath>
            <classPath>${basedir}/../openblas/target/classes/</classPath>
            <classPath>${project.build.outputDirectory}</classPath>
          </classPaths>
          <includePaths>
            <includePath>${basedir}/../opencv/target/classes/org/bytedeco/opencv/include/</includePath>
            <includePath>${basedir}/../opencv/src/main/resources/org/bytedeco/opencv/include/</includePath>
            <includePath>${basedir}/../opencv/cppbuild/${javacpp.platform}/include/opencv/</includePath>
            <includePath>${basedir}/../opencv/cppbuild/${javacpp.platform}/include/</includePath>
            <includePath>${basedir}/../openblas/target/classes/org/bytedeco/openblas/include/</includePath>
            <includePath>${basedir}/../openblas/src/main/resources/org/bytedeco/openblas/include/</includePath>
            <includePath>${basedir}/../openblas/cppbuild/${javacpp.platform}/include/</includePath>
            <includePath>${basedir}/cppbuild/${javacpp.platform}${javacpp.platform.extension}/include/</includePath>
          </includePaths>
          <linkPaths>
            <linkPath>${basedir}/../opencv/cppbuild/${javacpp.platform}/lib/</linkPath>
            <linkPath>${basedir}/../openblas/cppbuild/${javacpp.platform}/lib/</linkPath>
            <linkPath>${basedir}/cppbuild/${javacpp.platform}${javacpp.platform.extension}/lib/</linkPath>
          </linkPaths>
          <preloadPaths>
            <preloadPath>${basedir}/../opencv/cppbuild/${javacpp.platform}/bin/</preloadPath>
            <preloadPath>${basedir}/../openblas/cppbuild/${javacpp.platform}/bin/</preloadPath>
            <preloadPath>${basedir}/cppbuild/${javacpp.platform}${javacpp.platform.extension}/bin/</preloadPath>
          </preloadPaths>
          <buildResources>
            <buildResource>/${javacpp.platform.library.path}/</buildResource>
            <buildResource>/org/bytedeco/opencv/${javacpp.platform}/</buildResource>
            <buildResource>/org/bytedeco/openblas/${javacpp.platform}/</buildResource>
          </buildResources>
          <includeResources>
            <includeResource>/${javacpp.platform.library.path}/include/</includeResource>
            <includeResource>/org/bytedeco/opencv/include/</includeResource>
            <includeResource>/org/bytedeco/opencv/${javacpp.platform}/include/</includeResource>
            <includeResource>/org/bytedeco/openblas/include/</includeResource>
            <includeResource>/org/bytedeco/openblas/${javacpp.platform}/include/</includeResource>
          </includeResources>
          <linkResources>
            <linkResource>/${javacpp.platform.library.path}/</linkResource>
            <linkResource>/${javacpp.platform.library.path}/lib/</linkResource>
            <linkResource>/org/bytedeco/opencv/${javacpp.platform}/</linkResource>
            <linkResource>/org/bytedeco/opencv/${javacpp.platform}/lib/</linkResource>
            <linkResource>/org/bytedeco/openblas/${javacpp.platform}/</linkResource>
            <linkResource>/org/bytedeco/openblas/${javacpp.platform}/lib/</linkResource>
          </linkResources>
        </configuration>
        <executions>
          <execution>
            <id>javacpp-parser</id>
            <configuration>
              <classOrPackageName>org.bytedeco.mxnet.presets.mxnet</classOrPackageName>
            </configuration>
          </execution>
          <execution>
            <id>javacpp-compiler</id>
            <configuration>
              <classOrPackageName>org.bytedeco.mxnet.**</classOrPackageName>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.4.4</version>
        <configuration>
          <scalaVersion>2.11.12</scalaVersion>
          <classifier>scaladoc</classifier>
          <compilerPlugins>
            <compilerPlugin>
              <groupId>org.scalamacros</groupId>
              <artifactId>paradise_2.11.12</artifactId>
              <version>2.1.1</version>
            </compilerPlugin>
          </compilerPlugins>
<!--        <displayCmd>true</displayCmd>-->
          <jvmArgs>
            <arg>-cp</arg>
            <arg>${project.build.directory}/native${path.separator}${javacpp.platform.artifacts}</arg>
<!--          <arg>-verbose</arg>-->
            <arg>-Dorg.bytedeco.javacpp.logger.debug=true</arg>
          </jvmArgs>
          <args>
            <arg>-nobootcp</arg>
            <arg>-usejavacp</arg>
          </args>
        </configuration>
        <executions>
          <execution>
            <id>scala-compile-init</id>
            <phase>process-classes</phase>
            <goals>
              <goal>compile</goal>
            </goals>
            <configuration>
              <sourceDir>${basedir}/cppbuild/${javacpp.platform}${javacpp.platform.extension}/scala/init/</sourceDir>
            </configuration>
          </execution>
          <execution>
            <id>scala-compile-core</id>
            <phase>process-classes</phase>
            <goals>
              <goal>compile</goal>
            </goals>
            <configuration>
              <sourceDir>${basedir}/cppbuild/${javacpp.platform}${javacpp.platform.extension}/scala/core/</sourceDir>
            </configuration>
          </execution>
          <execution>
            <id>scala-add-source-init</id>
            <phase>process-classes</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sourceDir>${basedir}/cppbuild/${javacpp.platform}${javacpp.platform.extension}/scala/init/</sourceDir>
            </configuration>
          </execution>
          <execution>
            <id>scala-doc-jar-core</id>
            <phase>process-classes</phase>
            <goals>
              <goal>doc-jar</goal>
            </goals>
            <configuration>
              <sourceDir>${basedir}/cppbuild/${javacpp.platform}${javacpp.platform.extension}/scala/core/</sourceDir>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <id>default-jar</id>
            <configuration>
              <includes>
                <include>org/apache/mxnet/**</include>
                <include>org/bytedeco/mxnet/**</include>
              </includes>
            </configuration>
          </execution>
          <execution>
            <id>javacpp-${javacpp.platform}${javacpp.platform.extension}</id>
            <phase>package</phase>
            <configuration>
              <excludes>
                <exclude>org/bytedeco/mxnet/${javacpp.platform}${javacpp.platform.extension}/*.exp</exclude>
                <exclude>org/bytedeco/mxnet/${javacpp.platform}${javacpp.platform.extension}/*.lib</exclude>
                <exclude>org/bytedeco/mxnet/${javacpp.platform}${javacpp.platform.extension}/*.obj</exclude>
                <exclude>org/bytedeco/mxnet/${javacpp.platform}${javacpp.platform.extension}/*mklml*</exclude>
                <exclude>org/bytedeco/mxnet/${javacpp.platform}${javacpp.platform.extension}/*omp*</exclude>
              </excludes>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.moditect</groupId>
        <artifactId>moditect-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-javadoc-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  <!-- Scala build for linux-x86 requires a 32-bit JDK, and for CUDA, an actual GPU, so use binaries from another build -->
  <profiles>
    <profile>
      <id>mxnet-linux-x86</id>
      <activation>
        <property>
          <name>javacpp.platform</name>
          <value>linux-x86</value>
        </property>
      </activation>
      <properties>
        <javacpp.mkldnn.platform>linux-x86_64</javacpp.mkldnn.platform>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
            <dependencies>
              <dependency>
                <groupId>org.bytedeco</groupId>
                <artifactId>opencv</artifactId>
                <version>4.1.2-${project.parent.version}</version>
                <classifier>linux-x86_64</classifier>
              </dependency>
              <dependency>
                <groupId>org.bytedeco</groupId>
                <artifactId>openblas</artifactId>
                <version>0.3.7-${project.parent.version}</version>
                <classifier>linux-x86_64</classifier>
              </dependency>
              <dependency>
                <groupId>org.bytedeco</groupId>
                <artifactId>mxnet</artifactId>
                <version>${project.version}</version>
                <classifier>linux-x86_64</classifier>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>mxnet-gpu</id>
      <activation>
        <property>
          <name>javacpp.platform.extension</name>
          <value>-gpu</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
            <dependencies>
              <dependency>
                <groupId>org.bytedeco</groupId>
                <artifactId>mxnet</artifactId>
                <version>${project.version}</version>
                <classifier>${javacpp.platform}<!-- no -gpu --></classifier>
              </dependency>
            </dependencies>
          </plugin>
          <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <configuration>
              <jvmArgs>
                <arg>-cp</arg>
                <arg>${javacpp.platform.artifacts}</arg>
                <arg>-Dorg.bytedeco.javacpp.platform.extension=<!-- no -gpu --></arg>
<!--              <arg>-verbose</arg>-->
                <arg>-Dorg.bytedeco.javacpp.logger.debug=true</arg>
              </jvmArgs>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
