gps_freerunner.c (5)

Android なソースツリーに盛り込んで make してみたんですが、libhardware_legacy さえも出力されていない始末。今日ヤッた事を振り返ってみる事に。

ソースツリーへの盛り込み

まず、external 配下で git clone しました。

$ cd $ANDROID/external
$ git clone git://gitorious.org/android-on-freerunner/freerunner_platform_hardware_hw.git

make 前にした事

ええと、hardware/libhardware_legacy/gps/Android.mk が以下。

# Use hardware GPS implementation if available.
#
ifneq ($(BOARD_GPS_LIBRARIES),)
  LOCAL_CFLAGS           += -DHAVE_GPS_HARDWARE
  LOCAL_SHARED_LIBRARIES += $(BOARD_GPS_LIBRARIES)
endif

# Use emulator GPS implementation if QEMU_HARDWARE is set.
#
USE_QEMU_GPS_HARDWARE := $(QEMU_HARDWARE)

ifeq ($(USE_QEMU_GPS_HARDWARE),true)
    LOCAL_CFLAGS    += -DHAVE_QEMU_GPS_HARDWARE
    LOCAL_SRC_FILES += gps/gps_qemu.c
endif

LOCAL_SRC_FILES += gps/gps.cpp

BOARD_GPS_LIBRARIES という変数に freerunnner な共有ライブラリの名前が格納されていれば良いはず、と踏んで freerunner_platform_hardware_hw/gps/Android.mk の中身を確認してみた。

# hardware/libfreerunner_gps/Android.mk

ifeq ($(strip $(BOARD_HAVE_FREERUNNER_GPS)),true)

  LOCAL_PATH := $(call my-dir)

  include $(CLEAR_VARS)

  LOCAL_SRC_FILES := \
    gps_freerunner.c

  LOCAL_MODULE := libfreerunner_gps

  LOCAL_SHARED_LIBRARIES := \
    libutils \
    libcutils \
    libdl \
    libc

  include $(BUILD_SHARED_LIBRARY)

endif

libfreerunner_gps という名前な模様。これを vendor/sola/a500fx/BoardConfig.mk にて設定されてりゃ良いはず、と見て以下を追加。

BOARD_GPS_LIBRARIES := libfreerunner_gps

もうひとつ

freerunner_platform_hardware_hw/gps/Android.mk の以下の条件分岐

ifeq ($(strip $(BOARD_HAVE_FREERUNNER_GPS)),true)

ここが真でないと freerunner なソレはコンパイルされないはず。なんで strip するのかが意味不明。なんつーか面倒臭いので条件分岐をコメントアウトしてみた方が良いのかなぁ。
アタマに BOARD_ ってある位だから BoardConfig.mk で代入されてて良いんじゃね? って思ってるんですが駄目かなぁ、というか駄目でした。

  • BOARD_GPS_LIBRARIES に libfreerunner_gps
  • BOARD_HAVE_FREERUNNER_GPS に true

としてたんですが、libhardware_legacy さえも出力されない始末。

それにしても

何故に libhardware_legacy な共有ライブラリが system/lib 配下に吐き出されていないか、な根拠が全然分からん。分からんとゆーか、*.mk なソレを調べるリキ不足。