Передача аргумента -j ниндзя из градиента

Мне нужно передать аргумент -j ниндзя при создании приложения для Android с помощью gradle. (в Windows)

Зачем мне это нужно? - У нас есть огромные унифицированные файлы C++, которые требуют много памяти для компиляции. В настоящее время у меня недостаточно памяти (~ 10 ГБ свободно), чтобы скомпилировать их параллельно на 8 ядрах. Таким образом, clang терпит неудачу, когда заканчивается память.

Я вижу, что Gradle запускает cmake с ключом --build, поэтому я попытался добавить туда свой аргумент -j1. Но кажется, что поле arguments используется только для генерации cmake, потому что оно не влияет на командную строку, переданную в cmake на этапе сборки.

externalNativeBuild {
    cmake {
        cFlags "..."
        cppFlags "..."
        arguments "... -- -j1"
    }
}

Единственный способ, который я вижу сейчас, это заменить ninja какой-нибудь оболочкой, чтобы передать оттуда -j. Но это последние варианты, которые я хотел бы использовать. Цените любые идеи о том, как достичь этого действительного пути.


person Abuksigun    schedule 17.07.2019    source источник


Ответы (1)


Вы должны установить переменную окружения CMAKE_BUILD_PARALLEL_LEVEL на количество одновременных процессов, которые вы хотите использовать для сборки.

Он доступен с cmake 3.12.4.

https://cmake.org/cmake/help/v3.12/envvar/CMAKE_BUILD_PARALLEL_LEVEL.html

person zettd    schedule 17.07.2019