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