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