2015-06-15 3 views
1

Возможно ли выполнить emcc (из emscripten) в исполняемом компиляторе clang?Использовать emscripten из Clang скомпилированного исполняемого файла

Я попытался, но результат:

ERROR root: pdfium_test: Input file has an unknown suffix, don't know what to do with it! 

Я стараюсь, что, потому что я не в состоянии найти решение, чтобы скомпилировать проект PDFium с EMCC, но с лязгом все нормально.

Причина заключается в том:

Emscripten является кросс-компилятор, и, следовательно, ОС-специфические макросы из хост-системы должны все быть определено при создании C/C++ код. Если вы посмотрите на инструменты/shared.py, Emscripten уделяет особое внимание -U всех принимающих конкретных флагов, Clang может автоматически попытаться добавить.

Но есть много платформы конкретного кода в PDFium, так что я получаю:

#error Sorry, can not figure out target OS. Please specify _FX_OS_ macro. 

Этот макрос определяется если __linux__ макросъемки (например) определяется, вот фрагмент кода:

#ifndef _FX_OS_ 
#if defined(__ANDROID__) 
#define _FX_OS_ _FX_ANDROID_ 
#define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_ 
#elif defined(_WIN32) 
#define _FX_OS_ _FX_WIN32_DESKTOP_ 
#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_ 
#elif defined(_WIN64) 
#define _FX_OS_ _FX_WIN64_DESKTOP_ 
#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_ 
#elif defined(__linux__) 
#define _FX_OS_ _FX_LINUX_DESKTOP_ 
#define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_ 
#elif defined(__APPLE__) 
#define _FX_OS_ _FX_MACOSX_ 
#define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_ 
#endif 
#endif // _FX_OS_ 

#if !defined(_FX_OS_) || _FX_OS_ == 0 
#error Sorry, can not figure out target OS. Please specify _FX_OS_ macro. 
#endif 

Итак, я попытался определить вручную __linux__ макрос:

emmake make -j5 BUILDTYPE=Release __linux__=1 

... но та же ошибка. Может быть, это не лучший способ?

Заранее спасибо.

EDIT: Ответ JF Bastien мне очень помогает. Но теперь у меня такая ошибка сборки, и я знаю, что делать. Если кто-то есть идея ...

clang-3.7: warning: argument unused during compilation: '-msse2' 
clang-3.7: warning: argument unused during compilation: '-mmmx' 
error: unknown FP unit 'sse' 

EDIT 2: решение для указанной задачи: удалить "-msse2, -mmmx и -mfpmath" флаги v8/строить/toolchain.gypi

ответ

3

Портирование из для Emscripten - это то же самое, что переносить на любую другую платформу: вы должны использовать собственные платформы для платформы. У некоторых будут хорошие эквиваленты, а некоторые - нет.

В большинстве случаев вам необходимо найти эти цепочки для платформы #if defined(...) и добавить #elif defined(__EMSCRIPTEN__) и сделать правильные вещи там. Это сложнее, чем кажется: вы не можете делать встроенную сборку, вы не можете полагаться на (большинство) специфичных для платформы заголовков ... Но в некоторых случаях это легко.

Emscripten имеет examples which do this и имеет porting guide.

Для PDFium, в частности, вам придется избегать всех видов обработки шрифтов, относящихся к конкретной платформе, любых связанных с потоками вещей и песочницы (безопасность не должна быть такой же большой проблемой, поскольку сам JavaScript представляет собой изолированную среду) , Вам также нужно будет выяснить, как делать ввод-вывод файлов, и, возможно, хотите отключить весь сетевой код.

Или вы можете использовать other ports of PDFium to Emscripten.

+0

Большое спасибо за ваш ответ. Я бы добавил и EDIT в моем оригинальном посте. Если у вас есть представление о моей проблеме, это будет здорово. – Slot

Смежные вопросы