Previous: ネイティブコンパイル関数, Up: Lispからネイティブコードへのコンパイル [Contents][Index]
このセクションではネイティブコンパイルを制御する変数について述べます。
この変数はネイティブコンパイルの最適化レベルを指定する。値は-1から3の数値であること。値0から3はコンパイラーの対応する最適化レベル-O0、-O1、...のコマンドラインオプションと等しい。値-1はネイティブコンパイルの無効化を意味する。この場合には関数およびファイルはバイトコンパイルされる。ただしバイトコード形式でコンパイルされたコードだけを含む*.elnファイルは依然として生成される((declare (speed -1))
を使えばこれを関数単位で行うこともできる。declare
フォームを参照)。デフォルト値は2。
この変数はネイティブコンパイルが生成するデバッグ情報のレベルを指定する。値は0から3の数値で、以下のような意味をもつ:
デバッグ出力なし。これがデフォルト。
ネイティブコードでデバッグシンボルを発行する。これはgdb
のようなデバッガによるネイティブコードの電話を容易にする。
1と同様だが、更に疑似Cコードをダンプする。
2と同様、更にGCC中間パス(GCC intermediate passes)とlibgccjitログファイルをダンプする。
この変数はネイティブコンパイルが発行する一部またはすべてのログメッセージを抑制することにより、ネイティブコンパイルの冗長性(verbosity)を制御する。値が0(デフォルト)なら、ログメッセージはすべて抑制される。1から3の値をセットすることにより、レベルが上述の値であるようなメッセージのロギングを可能にする。値には以下のような解釈がある:
ログなし。これがデフォルト。
コードの最終的なLIMPLE表現をログ。
LAP、最終的なLIMPLE、および追加のパス情報をログ。
最大の冗長性。すべてをログ。
この変数は同時に開始するネイティブコンパイルのサブプロセスの最大数を決定する。非負の数値であること。デフォルト値0はCPU実行ユニットの半数の使用、1は単一の実行ユニットの使用を意味する。
この変数の値が非nil
なら、ネイティブコンパイルの非同期サブプロセスからの警告とエラーは、メインのEmacsセッションの*Warnings*という名前のバッファーに報告される。デフォルト値のt
はそのバッファーへの表示を意味する。*Warnings*バッファーをポップアップせずに警告をログするには、この変数にsilent
をセットすればよい。
非同期ネイティブコンパイルで警告が生成されるのは、必要な機能にたいするrequire
が欠落したファイルのコンパイルが原因であることが多い。この機能はメインのEmacsにロードされるかもしれないが、ネイティブコンパイルは常にサブプロセスから初期状態の環境で開始されるので、サブプロセスではロードされないかもしれない。
この変数の値が非nil
なら、Emacsはexitに際して実行中のネイティブコンパイルの非同期サブプロセスをすべてkillしてexitするかどうかを尋ねる(対応する.elnファイルへの書き込みを防ぐため)。値がnil
(デフォルト)なら、Emacsは問い合わせを行わずにそれらのサブプロセスをkillする。
変数native-comp-eln-load-path
はEmacsが*.elnファイルを探すディレクトリーのリストを保持します(ライブラリー検索を参照)。これは役割りの面では*.elや*.elcのファイルを探すために使用されるload-path
と同じです。このリストにあるディレクトリーは非同期のネイティブコンパイルによって生成された*.elnファイルの書き込みにも使用されます。特にEmacsはこのリスト中の最初に書き込み可能なディレクトリーにファイルを書き込むでしょう。したがってこの変数の値を変更することで、ネイティブコンパイルが結果を格納する場所を制御することができます。