origin: Android.mk 筆記
---- 不建議將 Linux kernel driver 直接放入 Android source tree.
- Android building system 與 Linux kernel source 兩者使用的 Building system 行為與 config/ c flag 並不相同.
- 所以多習慣預先編譯 .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