прогрев кэша emscripten для более быстрой сборки

#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 Я обновил свой ответ, чтобы решить эту проблему.