<?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.
-->

<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.tvm</groupId>
    <artifactId>tvm4j-native-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>libtvm4j-osx-x86_64</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>TVM4J Package - Native OSX-x86_64</name>
  <url>http://maven.apache.org</url>

  <packaging>jnilib</packaging>

  <dependencies>
    <dependency>
      <groupId>org.apache.tvm</groupId>
      <artifactId>tvm4j-core</artifactId>
      <version>${project.version}</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>native-maven-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <!--  trigger javah -->
          <javahOS>darwin</javahOS>
          <compilerProvider>generic-classic</compilerProvider>
          <compilerExecutable>${cxx}</compilerExecutable>
          <linkerExecutable>${cxx}</linkerExecutable>
          <sources>
            <source>
              <directory>../src/main/native</directory>
              <fileNames>
                <fileName>org_apache_tvm_native_c_api.cc</fileName>
              </fileNames>
            </source>
          </sources>
          <compilerStartOptions>
            <compilerStartOption>-std=c++0x</compilerStartOption>
          </compilerStartOptions>
          <compilerEndOptions>
            <compilerEndOption>-I../../../include</compilerEndOption>
            <compilerEndOption>${cflags}</compilerEndOption>
          </compilerEndOptions>
          <linkerStartOptions>
            <linkerStartOption>-shared</linkerStartOption>
          </linkerStartOptions>
          <linkerMiddleOptions>
            <linkerMiddleOption>-framework JavaVM</linkerMiddleOption>
            <linkerMiddleOption>-Wl,-exported_symbol,_Java_*</linkerMiddleOption>
            <linkerMiddleOption>-undefined dynamic_lookup</linkerMiddleOption>
            <linkerMiddleOption>-Wl,-x</linkerMiddleOption>
          </linkerMiddleOptions>
          <linkerEndOptions>
            <linkerEndOption>${ldflags}</linkerEndOption>
          </linkerEndOptions>
        </configuration>

        <executions>
          <execution>
            <id>javah</id>
            <phase>generate-sources</phase>
            <configuration>
              <javahOS>darwin</javahOS>
              <javahProvider>default</javahProvider>
              <javahOutputDirectory>${project.build.directory}/custom-javah</javahOutputDirectory>
              <workingDirectory>${basedir}</workingDirectory>
              <javahOutputFileName>org_apache_tvm_native_c_api.h</javahOutputFileName>
              <javahClassNames>
                <javahClassName>org.apache.tvm.LibInfo</javahClassName>
              </javahClassNames>
            </configuration>
            <goals>
              <goal>javah</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
