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

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

ルールの単純化
もっとヘッダ包含関係のルールを単純化できることに気付いたのでそれを実装してみた。
- 全てのヘッダは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

中間ライブラリの作成
仕様通りにライブラリを分割するとどうしても重複が出るので記述を整理する。
-- WARN: Unresolvable export [CSTD:android/hardware_buffer.h][ANDROID_HARDWARE_BUFFER => ANDROID_HARDWARE_BUFFER_JNI]
これは優先順位を付ければOK。 ANDROID_HARDWARE_BUFFER_JNI
を優先する。
-- 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が無いが仮想的なライブラリを宣言する。

おおむね納得の行く結果になった
-- 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.h
が ANDROID_NATIVE_WINDOW
に分類されていないのは微妙に釈然としないが、ドキュメントされている関数がNative Activity側にしかないようだ。
ライブラリ JAVA_JNI__VIR
と ANDROID_RECT__VIR
は仮想のライブラリで、ドキュメントは無い。ただし rect.h
については Native Activityのドキュメントで言及があるのでこちらに明示的なexportとしても配置されている。