5.6. ビルド

警告

AMD/NVIDIAデバイスについては未検証です。

JNAの一連のビルドは以下のようになります。

Makefile. 

CLASS_PATH = ../target/classes

CFLAG =

PROC = $(strip $(shell uname -m | grep 64))
OS = $(shell uname -s 2>/dev/null | tr [:lower:] [:upper:])
MACOS = $(strip $(findstring DARWIN, $(OS)))

ifneq ($(MACOS),)

TARGET= libhello.dylib
CFLAG += -dynamiclib
FRAMEWORK = -framework OpenCL

#else
#
#TARGET= libhello.so
#CFLAG += -fPIC -shared
#FRAMEWORK = -lOpenCL

endif

#ifdef AMDAPPSDKROOT
#
#INC = -I$(AMDAPPSDKROOT)/include
#ifeq ($(PROC),)
#       LIB = -L$(AMDAPPSDKROOT)/lib/x86
#else
#       LIB = -L$(AMDAPPSDKROOT)/lib/x86_64
#endif
#
#else
#
#ifdef NVSDKCOMPUTE_ROOT
#       INC = -I$(NVSDKCOMPUTE_ROOT)/OpenCL/common/inc
#endif
#
#endif

all : $(TARGET)
        mv $(TARGET) $(CLASS_PATH)/

$(TARGET) : HelloJNA.o
        gcc $(CFLAG) -o $@ $< $(INC) $(LIB) $(FRAMEWORK)

HelloJNA.o : HelloJNA.c
        gcc -O0 -g3 -Wall -c $< -o $@

clean :
        rm HelloJNA.o $(CLASS_PATH)/libhello.dylib

出力. 

$ make
gcc -O0 -g3 -Wall -c HelloJNA.c -o HelloJNA.o
gcc  -dynamiclib  -o libhello.dylib HelloJNA.o   -framework OpenCL
mv libhello.dylib ../target/classes/

このサンプルコードでは「exec-maven-plugin」を使うことにします。

pom.xml. 

<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>
  <groupId>com.book.jna</groupId>
  <artifactId>HelloJNA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
        <dependency>
                <groupId>net.java.dev.jna</groupId>
                <artifactId>jna</artifactId>
                <version>4.2.0</version>
        </dependency>
  </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.2.1</version>
                    <configuration>
                        <mainClass>com.book.jocl.HelloJNA</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
</project>

実行と出力. 

$ mvn2 compile
$ mvn2 package
$ mvn2 exec:java
CL_DEVICE_NAME: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
CL_DEVICE_NAME: HD Graphics 4000
checkDevice function returns: HD Graphics 4000
25
14
Hello World! JNA!
I'm from C language!

正しく出力されたのでJNAの正常な動作が確認できました。

Copyright 2018-2019, by Masaki Komatsu