Как выразить зависимости PGO в CMake 3.7?

У меня есть программа на C ++, которую я создаю с помощью функции оптимизации профиля Clang 3.9. Вот что должно произойти:

  1. Я строю программу с включенными инструментами.
  2. Я запускаю эту программу, создавая файл с данными профиля: prof.raw,
  3. я использую llvm-profdata преобразовать prof.raw в новый файл, prof.data,
  4. Я создаю новую сборку этой же программы с несколькими изменениями:
    • При компиляции каждого файла .cpp в файл .o я использую флаг компилятора -fprofile-use=prof.data,
    • При связывании исполняемого файла я также указываю -fprofile-use,

У меня есть Gnu Makefile для этого, и он прекрасно работает. Моя проблема возникает сейчас, когда я пытаюсь портировать этот Makefile на CMake (3.7, но я могу обновить). Мне нужно решение для работы (по крайней мере) с генератором Makefiles Unix, но в идеале оно будет работать для всех генераторов.

В CMake я определил две исполняемые цели: foo-gen а также foo-use:

  • когда foo-gen выполняется, это создает prof.raw файл.
  • я использую add_custom_command создать правило для создания prof.data от prof.raw,

Моя проблема является то, что я не могу понять, как сказать CMake, что каждый из объектных файлов зависит от foo-use имеет зависимость от файла prof.data,

  • Самая многообещающая идея, которую я имел, состояла в том, чтобы (1) найти способ перечислить все .o файлы, на которых foo-use зависимости, а затем (2) перебрать каждый из этих .o файлы, звонящие add_dependency для каждого.

    Проблема с этим подходом состоит в том, что я не могу найти идиоматический способ, в моем файле CMakeLists.txt, перечислить список объектных файлов, от которых зависит исполняемый файл. Это может быть открытой проблемой с CMake.

  • Я также подумал об использовании set_source_files_properties установить OBJECT_DEPENDS недвижимость на каждом из моих .cpp файлы, используемые foo-use, добавив prof.data в список этого свойства.

    Проблема с этим (AFAICT) заключается в том, что каждый из моих .cpp файлы используются для создания двух разных .o файлы: один для foo-gen и один для foo-use, Я хочу .o файлы, которые связаны в foo-use иметь эту зависимость во время компиляции от prof.data; но .o файлы, которые связаны в foo-gen должен не иметь зависимость от времени компиляции prof.data,

    И AFAIK, set_source_files_properties не позволяет мне установить OBJECT_DEPENDS свойство иметь одно из двух значений, в зависимости от того, foo-gen или же foo-use текущая цель интереса.

Какие-нибудь предложения для чистого (ish) способа сделать эту работу?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]