Open4

Reposoup: ヘッダ/ライブラリのグルーピングを2段階に変更

okuokuokuoku

シンボルプール(呼出せる関数の集合)作成 → プールごとにヘッダやライブラリファイルを割り当て の順だと上手く分類できなさそうなので、ヘッダとライブラリをそれぞれ独立して集計し、消し込みの後でアサインする方向にしてみる。

okuokuokuoku

ルールの単純化

https://github.com/okuoku/rs-checker-proto/commit/2ad6b18acc243606073b81a48262050bd1a6b06d

もっとヘッダ包含関係のルールを単純化できることに気付いたのでそれを実装してみた。

  • 全てのヘッダはTierに分割され、最も高い数字のTierに所属すると見做される。
  • 全てのライブラリは Tier 2N に直接提供ヘッダ、 Tier2N+1 に間接的な依存ヘッダを配置する
-- GRP: ANDROID_HARDWARE_BUFFER
-- DEP:  ANDROID_BINDER
-- DEP:  ANDROID_DATASPACE
-- DEP:  ANDROID_NATIVE_ACTIVITY
-- CSTD:android/hardware_buffer.h
-- CSTD:android/hardware_buffer_aidl.h
--   CSTD:android/binder_parcel.h
--   CSTD:android/binder_status.h
--   CSTD:android/data_space.h
--   CSTD:android/rect.h

おおむね正しくライブラリのヘッダが抽出できているが、例えば rect.h は他のライブラリでも提供していることになってしまっている。

-- GRP: ANDROID_NEURALNETWORKS
-- DEP:  ANDROID_DATASPACE
-- DEP:  ANDROID_HARDWARE_BUFFER_JNI
-- DEP:  ANDROID_NATIVE_ACTIVITY
-- CSTD:android/NeuralNetworks.h
-- CSTD:android/NeuralNetworksTypes.h
--   CSTD:android/data_space.h
--   CSTD:android/hardware_buffer.h
--   CSTD:android/rect.h
okuokuokuoku

中間ライブラリの作成

仕様通りにライブラリを分割するとどうしても重複が出るので記述を整理する。

-- WARN: Unresolvable export [CSTD:android/hardware_buffer.h][ANDROID_HARDWARE_BUFFER => ANDROID_HARDWARE_BUFFER_JNI]

これは優先順位を付ければOK。 ANDROID_HARDWARE_BUFFER_JNI を優先する。

https://github.com/okuoku/rs-checker-proto/blob/2ad6b18acc243606073b81a48262050bd1a6b06d/platforms/ndk.cmake#L215-L221

-- WARN: DUPE CSTD:GLES3/gl3platform.h
-- WARN: DUPE CSTD:KHR/khrplatform.h
-- WARN: DUPE CSTD:android/asset_manager.h
-- WARN: DUPE CSTD:android/binder_parcel.h
-- WARN: DUPE CSTD:android/binder_status.h
-- WARN: DUPE CSTD:android/data_space.h
-- WARN: DUPE CSTD:android/hardware_buffer.h
-- WARN: DUPE CSTD:android/looper.h
-- WARN: DUPE CSTD:android/native_window.h
-- WARN: DUPE CSTD:android/rect.h
-- WARN: DUPE CSTD:jni.h

jni.h と Khronos系のヘッダ以外はバグ(優先度付けで良い)。 jni.h や Khronos platformヘッダ類は(建前上)公開APIが無いが仮想的なライブラリを宣言する。

okuokuokuoku

おおむね納得の行く結果になった

https://github.com/okuoku/rs-checker-proto/commit/ee85edced23ba08cf2a83bb856a7ae9bdfdec4fc

-- GRP: ANDROID_NATIVE_ACTIVITY
--  DEP:  ANDROID_ASSET
--  DEP:  ANDROID_CHOREOGRAPHER
--  DEP:  ANDROID_DATASPACE
--  DEP:  ANDROID_HARDWARE_BUFFER_JNI
--  DEP:  ANDROID_INPUT
--  DEP:  ANDROID_LOOPER
--  DEP:  ANDROID_NATIVE_WINDOW
--  DEP:  ANDROID_RECT__VIR
--  DEP:  JAVA_JNI__VIR
--  CSTD:android/input_transfer_token_jni.h
--  CSTD:android/native_activity.h
--  CSTD:android/native_window_jni.h
--  CSTD:android/surface_control.h
--  CSTD:android/surface_control_input_receiver.h
--  CSTD:android/surface_control_jni.h
--  CSTD:android/window.h
--    CSTD:android/hdr_metadata.h
--    ___ CSTD:android/rect.h (ANDROID_RECT__VIR)
--    ___   CSTD:android/asset_manager.h (ANDROID_ASSET)
--    ___   CSTD:android/choreographer.h (ANDROID_CHOREOGRAPHER)
--    ___   CSTD:android/data_space.h (ANDROID_DATASPACE)
--    ___   CSTD:android/hardware_buffer.h (ANDROID_HARDWARE_BUFFER_JNI)
--    ___   CSTD:android/input.h (ANDROID_INPUT)
--    ___   CSTD:android/keycodes.h (ANDROID_INPUT)
--    ___   CSTD:android/looper.h (ANDROID_LOOPER)
--    ___   CSTD:android/native_window.h (ANDROID_NATIVE_WINDOW)
--    ___   CSTD:jni.h (JAVA_JNI__VIR)

___ は他のライブラリに由来するヘッダで、ライブラリの依存関係で提供される。インデントされている android/hdr_metadata.h はimplicitなexportで、ドキュメンテーションでは言及されていないものの利用に必要なヘッダ。

android/native_window_jni.hANDROID_NATIVE_WINDOW に分類されていないのは微妙に釈然としないが、ドキュメントされている関数がNative Activity側にしかないようだ。

ライブラリ JAVA_JNI__VIRANDROID_RECT__VIR は仮想のライブラリで、ドキュメントは無い。ただし rect.h については Native Activityのドキュメントで言及があるのでこちらに明示的なexportとしても配置されている。