13
Marmalade SDK Porting of The Existing Projects To All The Multiple Platforms.

Ivan Beliy, Software Engineer, Marmalade

Embed Size (px)

DESCRIPTION

Porting of The Existing Projects To All The Multiple Platforms. A Real Time Show -- Ivan Beliy, Software Engineer, Marmalade (The White Nights: Mobile Games Conference http://www.wnconf.com/)

Citation preview

Page 1: Ivan Beliy, Software Engineer, Marmalade

Marmalade SDKPorting of The Existing Projects To All The Multiple Platforms.

Page 2: Ivan Beliy, Software Engineer, Marmalade

Marmalade SDK открытый и гибкий

Черный ящик

Альтернативные движки

Доступны плагины с закрытым кодом

Marmalade System

Marmalade

Доступны плагины с открытым кодом

Модули Marmalade

Модули с открытым кодом

Page 3: Ivan Beliy, Software Engineer, Marmalade

Ваше приложениеИспользовать модули Marmalade Studio, API партнерских проектов или получить доступ к низкоуровневым APIs напрямую – ваш выбор

Платформ. расширения

Код вашего приложения

Другие модули“Marmalade Studio”

C/C++ стандартные библиотеки

ОСДрайверыOpenGL ESУстройство

Графика Кросс платформ. APIMarmaladeСистема

Page 4: Ivan Beliy, Software Engineer, Marmalade

Концепции Marmalade: загрузчикГрафикаЗагрузчик Кросс-платформенные API

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

Хранит платформенно зависимые реализации системы Marmalade для стандартного набора низкоуровневых API

Приложения получают доступ к API напрямую или через набор высокоуровневых модулей

Совсем крошечный дополнительный объем к вашему приложению, обычно около 400kb

Page 5: Ivan Beliy, Software Engineer, Marmalade

Концепции Marmalade: бинарник приложения

Кросс-платформенный, ОС-независимый пакетСодержит ваш код и дополнительные модулиКомпилируется в нативные инструкции CPUНеиспользуемый функционал выбрасывается. Приложение зря не раздуваетсяПодтверждает, что 97% кода приложения – это идентичные инструкции CPU на всех устройствахКомпонуется с платформенно зависимым загрузчиком на этапе упаковки для создания готового пакета приложенияMarmalade поддерживает сборку под ARM, x86 или MIPS

Бинарник приложения (s3e/s86 файл)

Код вашего приложения

Другие модули“Marmalade Studio”

C/C++ std lib

Page 6: Ivan Beliy, Software Engineer, Marmalade

Концепции Marmalade: Упаковка

Нативное приложение(.ipa .apk .bar etc.)

Ваши ресурсы

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

Бинарник приложения (s3e/s86 файл)

Код вашего приложения

Другие модули“Marmalade Studio”

C/C++ std lib

Платформ. расширенияГрафика Кросс платформ. API

MarmaladeСистема

Page 7: Ivan Beliy, Software Engineer, Marmalade

Развертывание проекта в Marmalade SDK

iOS Loader

iOS App

GCC

.mkb проект

бинарник

SCons

Android App

Android Loader

Симулятор

BlackBerry App

Загрузчик BlackBerry

Инструмент упаковки

MKB

IDE

MKB – Файл проекта Marmalade

Система MKB – генерирует рабочий проект для IDE из MKB файлов

IDE – Visual Studio или Xcode

Scons – система сборки проектов без участия IDE

GCC – Типичный компилятор для сборки под ARM, другие компиляторы используются для прочих архитектур

Бинарник – собранное приложение, может запускаться в симуляторе или упаковываться для устройства

Page 8: Ivan Beliy, Software Engineer, Marmalade

Ваше приложение: структура

Page 9: Ivan Beliy, Software Engineer, Marmalade

C++ библиотеки

LoadImage(const char* path)

libpng

Platform fopen

LoadImage(const char* path)

libpng

Custom fopen

Platform fopen

Проблема: путь к файлу должен меняться в зависимости от платформы

Page 10: Ivan Beliy, Software Engineer, Marmalade

Подмена функция в std lib LoadImage App Cod

e

fopennewlib

_openglue

fopen

OSПоддержка 19 системных вызовов

_exitcloseenvironexecveforkfstat

getpidisattykilllinklseekopen

readsbrkstattimesunlinkwait

write

Ошибка линковщика: символ ‘fopen’ определен несколько раз

Page 11: Ivan Beliy, Software Engineer, Marmalade

Прелинковка библиотек

Перемещаемая линковка • ld –r

Контроль видимости символов• -B reduce

Вторая линковка к системным библиотекам

prelink

link

Исполнимый файл

Код приложения libpng

newlib

Библиотеки приложения

Платформенные

библиотеки

Системные бибилотеки

Page 12: Ivan Beliy, Software Engineer, Marmalade

Отделяем бинарник

• Бинарник приложения полностью платформенно независим

• Подключается к плаформенным библиотекам на этапе выполнения

• Виртуальное окружение без дополнительных затрат производительности

Загрузчик Динамическая подгрузка кода

Библиотека приложения

Page 13: Ivan Beliy, Software Engineer, Marmalade

Richer apps are

Marmalade200 St. John Street,London, EC1V 4RNUnited Kingdome: [email protected]

www.madewithmarmalade.com