2011/05/04

libstagefrighthwは誰がビルドさせようとしているのか?

libstagefrighthw.soがビルドされてしまうのを止めたい。
solaさんのところからgit cloneしたものでは、ビルドされなかった。
なにかが、何かが違うようだ。

build/ 以下をgrepすると、build/core/user_tags.mkのGRANDFATHERED_USER_MODULESに含まれていた。
でも他のもたくさんあるので、libstagefrighthwだけ除外することはできない。
なにか抑制する手段があるということか。

GRANDFATHERED_USER_MODULESは、base_rules.mkで使われている。
長いけど引用。

ifneq ($(filter $(LOCAL_MODULE_TAGS),user),)
  ifeq ($(filter $(GRANDFATHERED_USER_MODULES),$(LOCAL_MODULE)),)
    $(warning *** Module name: $(LOCAL_MODULE))
    $(warning *** Makefile location: $(LOCAL_PATH))
    $(warning * )
    $(warning * Each module must use a LOCAL_MODULE_TAGS in its)
    $(warning * Android.mk. Possible tags declared by a module:)
    $(warning * )
    $(warning *     optional, debug, eng, tests, samples)
    $(warning * )
    $(warning * If the module is expected to be in all builds)
    $(warning * of a product, then it should use the)
    $(warning * "optional" tag: )
    $(warning * )
    $(warning *    Add "LOCAL_MODULE_TAGS := optional" in the)
    $(warning *    Android.mk for the affected module, and add)
    $(warning *    the LOCAL_MODULE value for that component)
    $(warning *    into the PRODUCT_PACKAGES section of product)
    $(warning *    makefile(s) where it's necessary, if)
    $(warning *    appropriate.)
    $(warning * )
    $(warning * If the component should be in EVERY build of ALL)
    $(warning * products, then add its LOCAL_MODULE value to the)
    $(warning * PRODUCT_PACKAGES section of)
    $(warning * build/target/product/core.mk)
    $(warning * )
    $(error user tag detected on new module - user tags are only supported on legacy modules)
  endif
endif


これは、Android.mkにLOCAL_MODULE_TAGSを指定してないときに出てくるメッセージだ。
ここにあったんだ。
LOCAL_MODULE_TAGSが"user"以外で、GRANDFATHERED_USER_MODULESの中にビルドしたいモジュール名があると出てくるようだ。


(2011/09/17)
最後のコンマを見逃していた。

 ifneq ($(filter $(LOCAL_MODULE_TAGS),user),)

なので、 「LOCAL_MODULE_TAGS」から「user」と一致する文字列を抜き出し、それが空文字列ではなかったらtrue、ということになる。
つまり、LOCAL_MODULE_TAGSにuserが含まれていた場合はtrue、か。

  ifeq ($(filter $(GRANDFATHERED_USER_MODULES),$(LOCAL_MODULE)),)

これも同じだ。
GRANDFATHERED_USER_MODULESの中からLOCAL_MODULEと一致する文字列を抜き出し、それが空文字だったらtrue、ということになる。
つまり、GRANDFATHERED_USER_MODULESにLOCAL_MODULEが含まれていなかった場合はtrue、か。

全然違ったわ・・・すまん。

試していないが、デフォルトではLOCAL_MODULE_TAGSはuserで、システムとしてビルドさせようと思っているモジュール名はGRANDFATHERED_USER_MODULESにあらかじめ書いてあるってことではないだろうかね。



けど、user以外で指定していれば出てこないメッセージなので、これより前にフィルタリングするしくみがあるのだろう。
ってことは、GRANDFATHERED_USER_MODULESは単なるリストで、あまり意味がないということか。

device/以下も見てみたが、crespoにしかない。
うーん、ということは、やはり自動的にビルドしているのか。。。
しかし、solaさん環境でlibstagefrighthwのAndroid.mkでエラーを出すようにしても、ビルドがうまくいく。
つまり、ビルドしようとすらしてないのだ。
ということは、その上に答えがあるはず。

1つ上のhardware/ti/omap3にもAndroid.mkがある。

ifeq ($(TARGET_BOARD_PLATFORM),omap3)
  include $(all-subdir-makefiles)
endif


ほほう。
私は自分のところで、指定している。

  TARGET_BOARD_PLATFORM := omap3


solaさんのところには、ない。
これか~。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。