5.11.1. Замена программы для одной или нескольких фаз
Вы можете указать, что для одной из фаз системы компиляции должна использоваться другая программа вместо той, что ghc интегрировала в неё. Например, вы можете попробовать другой ассемблер. Следующие параметры позволяют изменить внешнюю программу, используемую для данной фазы компиляции:
-
-pgmL ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве препроцессора для литературного языка.
-
-pgmP ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве препроцессора C (только с
-cpp).
-
-pgmJSP ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве препроцессора JavaScript C (только для javascript-backend).
-
-pgmCmmP ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве препроцессора C– C.
-
-pgmc ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве компилятора C.
-
-pgmcxx ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве компилятора C++.
-
-pgmlo ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве оптимизатора LLVM.
-
-pgmlc ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве компилятора LLVM.
-
-pgmlas ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве ассемблера LLVM.
-
-pgms ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве разделителя.
-
-pgma ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве ассемблера.
-
-pgml ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве компоновщика.
-
-pgmlm ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве компоновщика при объединении объектных файлов (например, при генерации объединённых объектов для загрузки в GHCi).
-
-pgmF ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве препроцессора (только с
-F).
-
-pgmotool ⟨cmd⟩ -
Использовать ⟨cmd⟩ для проверки mach-o динамических библиотек и исполняемых файлов, чтобы прочитать зависимости динамических библиотек. Мы вычислим необходимый
runpath``s to embed for the dependencies based on the result of the ``otoolвызов.
-
-pgminstall_name_tool ⟨cmd⟩ -
Использовать ⟨cmd⟩ для вставки
runpath``s into mach-o dynamic libraries and executables. As detected by the ``otoolвызова.
-
-pgmwindres ⟨cmd⟩ -
Использовать ⟨cmd⟩ для встраивания манифестов в Windows. Обычно это программа
windres, поставляемая с установкой GHC. См.-fno-embed-manifestв Параметры, влияющие на компоновку.
-
-pgmi ⟨cmd⟩ -
Использовать ⟨cmd⟩ в качестве внешней команды интерпретатора (см. Запуск интерпретатора в отдельном процессе). По умолчанию:
ghc-iserv-profесли включён-prof,ghc-iserv-dynесли включён-dynamic, илиghc-iservв противном случае.
5.11.2. Принудительное применение параметров к определённой фазе
Параметры могут быть принудительно переданы в определённую фазу компиляции с помощью следующих флагов:
-
-optL ⟨option⟩ -
Передать ⟨option⟩ препроцессору для литературного языка.
-
-optP ⟨option⟩ -
Передать ⟨option⟩ в CPP (имеет смысл только если также установлен
-cpp).
-
-optJSP ⟨option⟩ -
Передать ⟨option⟩ в препроцессор JavaScript C (только для javascript-backend).
-
-optCmmP ⟨option⟩ -
Передать ⟨option⟩ в препроцессор C– C.
Препроцессор C– C также получает флаги компилятора C. Эти флаги будут добавлены _до_ флагов, добавленных этим параметром. В результате, чистый эффект следующей пары флагов равен нулю:
-optCmmP-UFOO -optc-DFOO.
-
-optF ⟨option⟩ -
Передать ⟨option⟩ в пользовательский препроцессор (см. Параметры, влияющие на препроцессор Haskell).
-
-optc ⟨option⟩ -
Передать ⟨option⟩ в компилятор C и, для совместимости, в препроцессор C–.
-
-pgmc-supports-no-pie -
Делает то же, что и
-pgml-supports-no-pie, который его заменил.
-
-pgml-supports-no-pie -
Когда используется
-pgml, GHC по умолчанию никогда не будет передавать-no-pieфлаг командной строки. Обоснование заключается в том, что неизвестно, будет ли поддерживать его указанный компилятор, используемый для компоновки (напомним, что мы используем компилятор C для вызова компоновщика от нашего имени). Этот флаг можно использовать для указания того, что-no-pieподдерживается. Его необходимо передать после-pgml.Этот флаг не нужен, когда
-pgmcне используется, поскольку GHC запоминает, поддерживает ли стандартный компилятор C-no-pieво внутреннем файле настроек.
-
-optcxx ⟨option⟩ -
Передать ⟨option⟩ в компилятор C++.
-
-optlo ⟨option⟩ -
Передать ⟨option⟩ в оптимизатор LLVM.
-
-optlc ⟨option⟩ -
Передать ⟨option⟩ в компилятор LLVM.
-
-optlas ⟨option⟩ -
Передать ⟨option⟩ в ассемблер LLVM (обычно clang).
-
-opta ⟨option⟩ -
Передать ⟨option⟩ в ассемблер.
-
-optl ⟨option⟩ -
Передать ⟨option⟩ в компоновщик.
-
-optlm ⟨option⟩ -
Передать ⟨option⟩ в компоновщик при объединении объектных файлов. В случае стандартного компоновщика
ldобычно необходимо включить флаг-r.
-
-optwindres ⟨option⟩ -
Передать ⟨option⟩ в
windresпри встраивании манифестов в Windows. См.-fno-embed-manifestв Параметры, влияющие на компоновку.
-
-opti ⟨option⟩ -
Передать ⟨option⟩ в подпроцесс интерпретатора (см. Запуск интерпретатора в отдельном процессе). Распространённое использование — передача параметров RTS, например,
-opti+RTS -opti-A64m, или включение подробной информации с-opti-vдля просмотра сообщений, которыми обмениваются GHC и интерпретатор.
Например, чтобы принудительно передать параметр -Ewurble в ассемблер, вы должны указать драйверу -opta-Ewurble (дефис перед E обязателен).
GHC сам является программой Haskell, поэтому если вам необходимо напрямую передать параметры в систему времени выполнения GHC, вы можете заключить их в +RTS ... -RTS (см. Параметры системы времени выполнения (RTS)).