Skip to content
/ jnr Public

jextractを呼び出すGradleプラグイン

Notifications You must be signed in to change notification settings

Javakky/jnr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jnr-ffi Plugin

このプラグインはProject Panamaで開発中(Java13で実装予定)の機能を使いやすくするものです。

特に、JEP 191: Foreign Function Interfaceの利便化を目的としています。

JNR関連記事はこちらのQiitaにまとめたりしているのでよければどうぞ

紹介記事を書きました。

Gradle に公開しました。

動作環境

システムのJDK・プロジェクトのJDKともにバージョン13以上?

動作保証のJDKは Project Panama Early-Access Builds だけです。

JDKのバージョンが12以下の場合警告文、jextractがシステムのJDKに存在しない場合にはエラー文を出します。

設定

plugins {
  id "com.github.Javakky.jnr-ffi" version "1.0.5-SNAPSHOT"
}

jextract

jextractとは?

jextractとは、C言語などの.hファイルから対応するJavaのインターフェースを生成するツールです。

early-access版のJDKに付属しており、ServiceLoaderを利用することでプログラムからも呼び出すことができます。

jextractタスク

このプラグインではjextractというタスクが定義されています。

jextractタスクでは、指定されたフォルダ内にある.hファイルからjextractでjarファイル(対応するインターフェース)を生成するものです。

(入れ子になっているファイルも検索し、ディレクトリをパッケージと対応させてjarを生成します)

jextractタスクのオプションは、build.gradleで以下のように指定できます。

jextract{
    // .hファイルを含むディレクトリのパス
    // 初期値は"src/main/resources/"
    sourceRoot = "head/"
    // 生成したjarを置くディレクトリのパス
    // 初期値は"libs/"
    outPath = "jar"
    // 生成するインターフェースが属するパッケージのルート名
    // <packageRoot>.<ディレクトリ名>.<ディレクトリ名>という風に命名される
    // 初期値は""
    packageRoot = "pkg"
    // パッケージ名にsourceRootディレクトリを含むかどうか
    // falseにすると、SourceRoot直下の.hファイルのパッケージはpackageRootとなる
    // 初期値はfalse
    includeRoot = false
}

compileC

実装予定のタスクです。

C言語のJava処理系があればすぐに実装します。

見つかるまではProcessから既に開発環境にインストールされたbccgccを呼び出すタスクを簡易的に実装しようと考えています。

UseC4ffi4Windows

このプラグインと合わせて使えるライブラリ作りました。(なお簡易版)

対応OSはWindowsだけ(コード的に別のOSでも動くかもしれませんがテストしていない)です。

resouceフォルダに置いた.dllファイルとjextractで生成したインターフェースからCのコードを呼び出す際、 dllの設定を省略できます。

詳しくはこちら

About

jextractを呼び出すGradleプラグイン

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages