Не могу скомпилировать libpd с помощью emmake (Emscripten SDK) - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь скомпилировать libpd в javascript или веб-сборку, используя emscripten sdk.Согласно некоторым документам, если есть Makefile, его можно скомпилировать с помощью emmake make, (emconfigure не используется, потому что нет файла ./configure), но я получаю следующую ошибку:

/home/ian/Documents/emsdk/emscripten/1.37.37/emcc.py -DPD -DHAVE_UNISTD_H -DUSEAPI_DUMMY -I./pure-data/src -I./libpd_wrapper -I./libpd_wrapper/util -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -fPIC -I"/usr/lib/jvm/default-java/include/linux" -DHAVE_LIBDL -ffast-math -funroll-loops -fomit-frame-pointer -O3 -DLIBPD_EXTRA      -c -o pure-data/src/d_array.o pure-data/src/d_array.c
pure-data/src/d_array.c:523:2: error: No byte order defined
#error No byte order defined
 ^
1 error generated.
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting
<integrado>: fallo en las instrucciones para el objetivo 'pure-data/src/d_array.o'
make: *** [pure-data/src/d_array.o] Error 1

Есть идеи?Как вы думаете, возможно ли скомпилировать эту библиотеку?

ОБНОВЛЕНИЕ: После настройки каждого файла жалобы, как предложено в ответе @zakki, я получаю еще одну ошибку:

libpd_wrapper/util/ringbuffer.c:18:12: fatal error: 'stdatomic.h' file not found
  #include <stdatomic.h>

Этот файл имеет это содержимое:

#if __STDC_VERSION__ >= 201112L // use stdatomic if C11 is available
  #include <stdatomic.h> // HERE IS WHERE ERROR GOES
  #define SYNC_FETCH(ptr) atomic_fetch_or((_Atomic int *)ptr, 0)
  #define SYNC_COMPARE_AND_SWAP(ptr, oldval, newval) \
          atomic_compare_exchange_strong((_Atomic int *)ptr, &oldval, newval)
//Some other definitions that I didn't put here

Некоторое время назад я читал некоторые темы об этой проблеме с C ++ 11, как я могу это исправить?

ОБНОВЛЕНИЕ 2: После добавления && !defined(__EMSCRIPTEN__) теперь можетскомпилировать, но я получаю это предупреждение, которое я не понимаю:

ПРЕДУПРЕЖДЕНИЕ: root: Динамические библиотеки (.so, .dylib, .dll) в настоящее время не поддерживаются Emscripten.В целях эмуляции системы сборки Emscripten теперь сгенерирует файл статической библиотеки (.bc) с суффиксом «.so».Для получения лучших рекомендаций, пожалуйста, адаптируйте свою систему сборки для прямой генерации статической библиотеки битовых кодов LLVM, установив для суффикса вывода значение «.bc.»)

1 Ответ

0 голосов
/ 22 мая 2018

Emscripten имеет endian.h.Так что добавьте defined(__EMSCRIPTEN__) к ifdef.

#if defined(__linux__) || defined(__CYGWIN__) || defined(__GNU__) || \
    defined(ANDROID) || defined(__EMSCRIPTEN__)
#include <endian.h>
#endif

Во-вторых, похоже, что Emscripten bug .

#if __STDC_VERSION__ >= 201112L && !defined(__EMSCRIPTEN__)
...