Android.mk 筆記

---
  1. 不建議將 Linux kernel driver 直接放入 Android source tree.
  2. Android building system 與 Linux kernel source 兩者使用的 Building system 行為與 config/ c flag 並不相同.
  3. 所以多習慣預先編譯 .ko 檔, 然後在 products.mk 中寫明 PRODUCT_COPY_FILES

Android building system 簡單介紹

重點在於 LOCAL_MODULES 跟 LOCAL_SHARE_MODULES 這兩個參數去建構出所有需使用到的 modules
所以的 runtime library 的 LOCAL_NAME 一定要被上層 MODULES 所使用


(Jollen 所提供的 mokoid/hardware/modules/led 範例, 較簡單易懂)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# our own branch needs these headers
LOCAL_C_INCLUDES += \
vendor/mokoid/hardware/modules/include/
    編譯此 project 時所使用的 include 檔位置
    Android build system 會指名自己的 includes files path, 而各個 project 可自行指名所使用的 include path
    #include "a.h" 
    編譯系統會到 LOCAL_C_INCLUDES 找這個 header file.

LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
LOCAL_SHARED_LIBRARIES := liblog
    編譯本 modules 所需使用的其他 modules
    Android build system 會以所有 Android.mk 中的 LOCAL_MODULE 的名字命名.
    並依該 modules 所使用的 SHARED_LIBRARIES 去建立 building tree
    以這個例子來說, 要編 led.goldfish 需先編譯 liblog 這個 modules

LOCAL_SRC_FILES := led.c
    本 modules 的 c code

LOCAL_MODULE := led.goldfish
#LOCAL_MODULE := led.dma6410xp
    上述的此 modules name

include $(BUILD_SHARED_LIBRARY)



(0xdroid/hardware/alsa_sound/Android.mk, 多了一些環境變數的檢查, 比較完整也較複雜, 基本行為一樣)
# hardware/libaudio-alsa/Android.mk
# Copyright 2008 Wind River Systems
#

ifeq ($(strip $(BOARD_USES_ALSA_AUDIO)),true)
 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS)

 LOCAL_ARM_MODE := arm
 LOCAL_CFLAGS := -D_POSIX_SOURCE

 LOCAL_WHOLE_STATIC_LIBRARIES := libasound

 ifneq ($(ALSA_DEFAULT_SAMPLE_RATE),)
   LOCAL_CFLAGS += -DALSA_DEFAULT_SAMPLE_RATE=$(ALSA_DEFAULT_SAMPLE_RATE)
 endif
 ifeq ($(strip $(BOARD_HAVE_FM_ROUTING)),true)
   LOCAL_CFLAGS += -DFM_ROUTE_SUPPORT
 endif

 LOCAL_C_INCLUDES += external/alsa-lib/include

 LOCAL_SRC_FILES := AudioHardwareALSA.cpp

 LOCAL_MODULE := libaudio

 LOCAL_STATIC_LIBRARIES += libaudiointerface

 LOCAL_SHARED_LIBRARIES := \
   libcutils \
   libutils \
   libmedia \
   libhardware \
   libhardware_legacy \
   libdl \
   libc

 include $(BUILD_SHARED_LIBRARY)
 include $(CLEAR_VARS)
 LOCAL_PRELINK_MODULE := false
 LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
 LOCAL_CFLAGS := -D_POSIX_SOURCE -Wno-multichar
    給 gcc 用的 flag, 這部份詳細下法必須參考 gcc manual
    這跟 pkg-config 沒有關係

 LOCAL_C_INCLUDES += external/alsa-lib/include
 LOCAL_SRC_FILES:= acoustics_default.cpp
 LOCAL_SHARED_LIBRARIES := liblog
 LOCAL_MODULE:= acoustics.default
 include $(BUILD_SHARED_LIBRARY)
endif