Перейти к основному содержимому

Кросс-компиляция для iOS

Эта страница служит кратким введением в процесс сборки V8 для целевых устройств iOS.

Требования

  • Компьютер на базе macOS (OS X) с установленным Xcode.
  • Целевое iOS-устройство с 64-битной архитектурой (устаревшие 32-битные устройства iOS не поддерживаются).
  • Версия V8 7.5 или новее.
  • jitless является строгим требованием для iOS (по состоянию на декабрь 2020 года). Поэтому используйте флаги '--expose_gc --jitless'

Первоначальная настройка

Следуйте инструкциям по сборке V8.

Получите дополнительные инструменты, необходимые для кросс-компиляции под iOS, добавив target_os в ваш файл конфигурации .gclient, который находится в родительской директории исходного каталога v8:

# [... другие содержимое .gclient, такие как переменная 'solutions' ...]
target_os = ['ios']

После обновления .gclient, выполните команду gclient sync, чтобы загрузить дополнительные инструменты.

Ручная сборка

Этот раздел демонстрирует, как собрать монолитную версию V8 для использования либо на физическом устройстве iOS, либо в симуляторе Xcode для iOS. Результат этой сборки — это файл libv8_monolith.a, который содержит все библиотеки V8, а также снимок V8.

Настройте файлы сборки GN, выполнив команду gn args out/release-ios и вставив следующие ключи:

ios_deployment_target = 10
is_component_build = false
is_debug = false
target_cpu = "arm64" # "x64" для сборки симулятора.
target_os = "ios"
use_custom_libcxx = false # Использование libcxx из Xcode.
v8_enable_i18n_support = false # Создает меньший бинарный файл.
v8_monolithic = true # Включение целевого объекта v8_monolith.
v8_use_external_startup_data = false # Снимок включен в бинарный файл.
v8_enable_pointer_compression = false # Не поддерживается на iOS.

Теперь выполните сборку:

ninja -C out/release-ios v8_monolith

Наконец, добавьте созданный файл libv8_monolith.a в ваш проект Xcode как статическую библиотеку. Для получения дополнительной документации о внедрении V8 в ваше приложение ознакомьтесь с Началом работы с внедрением V8.