В этой статье описывается сборка модулей с помощью компилятора Intel C++ для Android* (ICC) и их интеграция в сборку проектов Android с открытым исходным кодом (AOSP). Модуль обычно представляет собой общую библиотеку или приложение, которое войдет в состав образа Android на устройстве. В качестве примера можно назвать аудио- и видеокодеки, приложения мультимедиа.
Сборка отдельного модуля вне процесса сборки AOSP
Сборка модуля Android в компиляторе Intel® C++ для Android* аналогична сборке с помощью набора инструментов GCC. Следуйте руководству Приступая к работе для компиляции модуля с помощью системы сборки NDK или автономной цепочки инструментов.
Копирование заранее собранного модуля в образ AOSP в ходе процесса сборки
После компиляции и компоновки модуль можно интегрировать в процесс сборки AOSP в виде заранее собранной библиотеки. Он будет включен в системный образ Android.
Создайте файл Android.mk внутри корневого каталога дерева AOSP со следующим содержимым:
include $(CLEAR_VARS)
LOCAL_MODULE := <library_name>
LOCAL_MODULE_SUFFIX:=.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES := <library_file_name>
include $(BUILD_PREBUILT)
Местозаполнители <library_name> и <library_file_name> должны содержать имя файла библиотеки на хосте и в месте назначения. Обычно они одинаковы.
Сборка модуля в составе процесса сборки AOSP
Предоставляемые корпорацией Intel версии дерева исходного кода AOSP должны быть уже подготовлены к использованию ICC в составе процесса сборки. Можно определить, поддерживается ли ICC в дереве исходного кода, проверив наличие файла <AOSP_ROOT>build/core/icc_config.mk exists.
Настройка среды сборки
Перед использованием компилятора нужно настроить путь к компилятору в файле <AOSP_ROOT>build/core/icc_config.mk. Укажите путь к ICC, изменив переменную TARGET_ICC_TOOLS_PREFIX. К примеру:
TARGET_ICC_TOOLS_PREFIX := /opt/intel/cc_android_14.0.1.017/bin/
Здесь есть пара полезных для настройки переменных. Все упоминаемые переменные можно также указать напрямую в командной строке.
- ICC_MODULES
Принудительная компиляция указанных модулей с помощью ICC вне зависимости от компилятора по умолчанию. - GCC_MODULES
Принудительная компиляция указанных модулей с помощью GCC вне зависимости от компилятора по умолчанию. - ICC_IPO_MODULES
Указывает модули, которые должны быть скомпилированы с межпроцедурной оптимизацией (IPO), если модуль компилируется с помощью ICC. - ICC_FREESTANDUNG_MODULES
Указывает модули, не компонующиеся со стандартными библиотеками. Подробные сведения см. в документации. Этот параметр не следует изменять
Сборка модуля
Если модуль, который следует компилировать в ICC, уже настроен с помощью переменной ICC_MODULES, никаких дополнительных действий не требуется. Просто запустите компиляцию обычным образом:
source build/envsetup.sh lunch make flashfiles
Также можно указать модуль, который следует компилировать в ICC, непосредственно в командной строке:
source build/envsetup.sh lunch make ICC_MODULES=libskia ICC_STATIC_MODULES=libskia ICC_IPO_MODULES=libskia flashfiles
Устранение неполадок
Для компиляции модулей, входящих в состав AOSP, могут потребоваться дополнительные исправления. Обратитесь к представителю корпорации Intel при возникновении проблем.