#emscripten
#emscripten
Вопрос:
Чистая установка emscripten будет компилировать программы намного медленнее, поскольку для этого необходимо создать кэш системных библиотек. Он будет выводить строки, подобные этой:
cache:INFO: generating system library: libc.a... (this will be cached in "/emsdk_portable/.data/cache/wasm/libc.a" for subsequent builds)
Существует флаг (https://emscripten.org/docs/tools_reference/emcc.html ), --clear-cache
однако я хотел бы сделать обратное. Я ищу команду для заполнения кэша emscripten для всех системных библиотек. Я хочу сделать это, чтобы я мог записывать выходные данные в docker, а затем использовать его для более быстрых сборок CI.
Кто-нибудь знает, как я мог бы подойти к этому?
Ответ №1:
Обновить:
embuilder.py
Инструмент отвечает за сборку библиотек emscripten. Вы можете запустить это, чтобы разогреть кеш с системными библиотеками:
embuilder.py build MINIMAL
Или, если вы используете emscripten/emsdk
образ Docker и хотите сохранить содержимое кэша /my/own/cache
для сохранения, вы можете запустить:
docker run --rm
-v /my/own/cache:/emsdk/upstream/emscripten/cache
emscripten/emsdk
/emsdk/upstream/emscripten/embuilder.py build MINIMAL
Вы можете найти более подробную информацию о команде, просмотрев исходный код или передав --help
флаг.
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Если вы используете emscripten/emsdk
образ Docker и хотите, чтобы кэш сохранялся во всех компиляциях, вы можете просто использовать переопределение папки кэша контейнера с помощью привязки / монтирования тома:
cd /my/project/folder
docker run --rm
-v $(pwd):/src
-v $(pwd)/my_emscripten_cache:/emsdk/upstream/emscripten/cache
emscripten/emsdk
make
Очевидно, что при первом запуске это будет медленно, но последующие запуски должны использовать кеш и выполняться значительно быстрее.
Комментарии:
1. Спасибо! Это действительно полезно. Знаете ли вы способ получить ВСЕ системные библиотеки? Может быть, мне просто нужна поддельная цель make, которая компилирует и связывает все…
2. @portforwardpodcast Я обновил свой ответ, чтобы решить эту проблему.