Как стать автором
Обновить

Выпущен CrystaX NDK 10.3.0

Время на прочтение 4 мин
Количество просмотров 5.6K
Новая версия CrystaX NDK 10.3.0 доступна для скачивания.

Наиболее важные изменения в этом выпуске:

  • Новые GCC и LLVM/clang.
  • Сильно улучшена поддержка Objective-C v2.
  • Добавлена поддержка Python (2.7 и 3.5) для Android.


Кроме этого, починено много ошибок и сделано огромное количество улучшений. Ниже вы можете ознакомиться с более подробной информацией.


Новые GCC и LLVM/clang



В этом выпуске мы добавили новые тулчейны, основанные на gcc-5.3 и llvm-3.7. Старые gcc-4.9 и llvm-3.6 также присутствуют для совместимости, но будут удалены в следующем релизе.

Нет нужды говорить, что это значит для разработчиков, особенно в свете активно развивающихся gcc и clang в плане поддержки новых стандартов C, C++ и Objective-C. Теперь вы можете использовать наиболее передовые языковые фичи и для Android.

Также, в этом релизе мы перешли полностью на собственные ветки GCC и LLVM/clang, которые основаны на upstream с минимальными точечными правками (ранее gcc и clang в CrystaX NDK были ответвлены от Google's gcc и clang). Принять такое решение помог тот факт, что у нас накопилась довольно большая «тестовая масса», позволяющая с определенной степенью уверенности утверждать, что компилятор, справляющийся со всеми нашими тестами — это годный, рабочий компилятор.

Это решение, хоть и было трудным, тем не менее оказалось очень верным, т.к. теперь процесс обновления gcc и clang до новых версий очень прост и происходит в полуавтоматическом режиме. Так, обновление до gcc-5.3 заняло всего три дня, из которых 20 минут заняло слияние с upstream-ом, следующие 20 часов — сборка нового билда и еще двое суток — полный прогон автоматических тестов. Из них только первая часть потребовала ручной работы.

$ $NDK/toolchains/arm-linux-androideabi-5/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --version
arm-linux-androideabi-gcc (GCC) 5.3 20151204
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ $NDK/toolchains/llvm-3.7/prebuilt/linux-x86_64/bin/clang -target armv7-none-linux-androideabi --version
clang version 3.7
Target: armv7-none-linux-android
Thread model: posix


Улучшенный Objective-C v2



Мы очень сильно улучшили рантайм Objective-C v2 и это позволило нам включить все языковые возможности современного Objective-C — Automatic Reference Counting, Objective-C Literals syntax и т.д. Также, в этом выпуске мы добавили Objective-C фреймворки CoreData, CoreText, CoreGraphics и CoreVideo, в дополнение к ранее добавленным Foundation и CoreFoundation.

Для удобства был создан пример, показывающий, как можно использовать Objective-C для разработки проекта сразу для iOS и Android.

ВНИМАНИЕ! Все заявленные возможности современного Objective-C v2 доступны только при использовании LLVM/clang. Если вы используете ndk-build, простейшим способом указать это будет добавление следующих строк в Application.mk:

# Application.mk
NDK_TOOLCHAIN_VERSION := clang


Python для Android



Мы предоставляем собранные бинарники python-2.7 и python-3.5 (исполняемые файлы, библиотеки и заголовочные файлы) для всех поддерживаемых Android ABI. Как и все остальные подобные пакеты в CrystaX NDK, Python был собран из официальных исходников, без единого изменения в его коде. Это прямое следствие нашего подхода: когда что-либо не собирается, мы не правим собираемый код. Вместо этого мы чиним CrystaX NDK, делая поведение нижнеуровневых библиотек соответствующим стандартам (POSIX и де-факто стандартам, таким как GNU/Linux).

Python в CrystaX NDK пока находится в экспериментальном состоянии, хотя он и работает довольно хорошо, насколько мы видим. Тем не менее, он пока еще не настолько хорошо оттестирован, как остальные компоненты, поэтому в нем могут быть ошибки или частично отсутствующая функциональность. В случае, если вы найдете подобные огрехи, не стесняйтесь сообщать нам о них!

Мы хотим сказать огромное спасибо Виталию Мурашеву (@vitaly-murashev) — Python появился в CrystaX NDK главным образом благодаря его помощи. Это и есть то, как работает open source: сделать что-либо для удовольствия и поделиться результатами с сообществом. Виталий, еще раз спасибо!

Собранные бинарники Python лежат в каталогах $NDK/sources/python/2.7 и $NDK/sources/python/3.5. Если вы используете ndk-build, вот пример использования Python в вашем проекте:

# Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE           := mymodule
LOCAL_SRC_FILES        := ...
LOCAL_SHARED_LIBRARIES := python_shared
include $(BUILD_SHARED_LIBRARY)

# Replace 3.5 by 2.7 if needed
$(call import-module,python/3.5)


Поддержка POSIX



Мы продолжаем улучшать поддержку POSIX в CrystaX NDK. В этом выпуске мы перенесли в libcrystax.so (сердце CrystaX NDK) еще больше POSIX интерфейсов, поэтому теперь она зависит от Google libc еще меньше. Фактически, единственная большая часть POSIX, еще не реализованная в libcrystax.so — это POSIX threads. Это — то, что мы собираемся исправить в следующем релизе. Тем самым мы сможем избавиться от зависимости от Google libc, полностью заменив ее на libcrystax.so.

В рамках нашей работы по улучшению поддержки POSIX, мы интегрировали Open POSIX Test Suite в процесс автоматического тестирования CrystaX NDK. Благодаря этому, мы можем быть уверены, что libcrystax.so предоставляет реализацию, действительно соответствующую POSIX.

Boost 1.59.0



Мы включили в состав CrystaX NDK собранные библиотеки и заголовочные файлы Boost 1.59.0. Теперь они собираются в двух вариантах — с использованием GNU libstdc++ и LLVM libc++ реализаций стандартной библиотеки C++. Ранее мы предоставляли библиотеки Boost, собранные только с GNU libstdc++, тем самым вынуждая пользователей указывать gnustl в своих проектах. Теперь вы можете указывать любую из двух: ndk-build автоматически определит предпочтительный вариант и подключит правильные версии библиотек Boost.

Также, в связи с тем, что у нас теперь есть Python для Android, мы начали собирать и тестировать Boost.Python. Эта работа еще не доведена до конца, но мы продолжаем работать над этим и со временем ситуация будет улучшаться.

CrystaX — официально одобренный тестер для проекта Boost. Это означает, что мы в непрерывном режиме тестируем библиотеки Boost, публикуя результаты на официальном сайте (master, develop). Это работает на пользу как Boost, так и CrystaX NDK. Пользователи Boost получают возможность использовать оттестированные библиотеки Boost на Android, а пользователи CrystaX NDK выигрывают оттого, что CrystaX NDK в свою очередь тестируется Boost тестами и тем самым практически доказывается хорошая степень соответствия стандартам POSIX и C++.

Итого



Кроме этого, в этом выпуске было сделано большое количество мелких улучшений и исправлений. Полный список закрытых тикетов находится здесь.
Теги:
Хабы:
+9
Комментарии 5
Комментарии Комментарии 5

Публикации

Истории

Работа

Программист C++
122 вакансии
QT разработчик
13 вакансий
Программист С
42 вакансии

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн