Сборка металлиба с CMake - PullRequest
       11

Сборка металлиба с CMake

0 голосов
/ 24 августа 2018

У меня есть несколько .metal файлов, и я хочу скомпилировать их в .metallib.Вся система сборки использует CMake, и я собираюсь использовать ее для компиляции .metal.

Для сборки .metallib я должен использовать следующие две команды:

xcrun -sdk macosx metal -c MyLibrary.metal -o MyLibrary.air
xcrun -sdk macosx metallib MyLibrary.air -o MyLibrary.metallib

Есть ли какая-нибудьудобный способ сделать это с CMake, где я могу установить компилятор и CMake будет делать все автоматически?Или я должен использовать add_custom_command и вручную вызвать xcrun?

1 Ответ

0 голосов
/ 25 августа 2018

TL; DR Оба подхода, использующие пользовательские команды / цели и добавление нового языка, действительны. Кажется, что выбор зависит от компромиссов между возможностью повторного использования, диапазоном распределения, целевыми пользователями и т. Д. Лично я бы изначально выбрал первый.


Сказав, что, если вы выберете метод add_custom_command / add_custom_target, он может сделать вас довольно далеко. Просто убедитесь, что вы указываете фактические цели и связываете их с OUTPUT пользовательских команд, чтобы иметь возможность устанавливать правильные зависимости и избегать ненужного повторного выполнения целей, когда зависимости все еще актуальны. Например,

set(FOO_FILE "foo.txt")

add_custom_command(OUTPUT ${FOO_FILE}
  COMMAND ${CMAKE_COMMAND} -E touch ${FOO_FILE}
  WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
  COMMENT "Creating ${FOO_FILE}"
  VERBATIM)

add_custom_target(foo DEPENDS ${FOO_FILE})

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

Однако, изучение реального языка, поддерживаемого CMake, может оказаться полезным. Я бы посоветовал взглянуть в каталог CMake Modules для CUDA (это заставит вас взглянуть и на подкаталоги Compiler и Platform).

ПРИМЕЧАНИЕ : копаясь в списке рассылки, я наткнулся на эту ветку , в которой упоминается, что второй подход может работать не так хорошо с генераторами, не основанными на Makefile. Это не ясно из потока (или существующей документации), и я не могу попробовать его, так как я не использую CMake через такой инструмент (например, MSVC или Xcode).

...