オフィスアワーがそろそろ始まるよ!()

ビルドオプション

Zenコンパイラが備えるビルドオプションについて、特によく利用するものついて説明します。一覧はzenもしくはzen --helpコマンドで表示できます。

リリースモード

オプションの指定がなければデバッグモードでビルドします。リリースモードは以下の3つです。

  • --release-fast
  • --release-small
  • --release-safe

--release-fastはバイナリサイズを犠牲に実行速度を速くします。安全性チェックはオフになります。

--release-smallは実行速度を犠牲にバイナリサイズを小さくします。安全性チェックはオフになります。

--release-safeは安全性チェックをオンにしたまま最適化を行います。実行速度はrelease-fastよりは遅くなり、バイナリサイズはrelease-smallより大きくなります。

コンパイルオプション

--builtin

コンパイラの builtin ソースコードを表示します。このオプションを指定した場合は情報の表示のみでビルド自体は実行されません。

$ zen build-exe --builtin

--c-source [オプション] [ファイル]

コンパイル対象のCソースコードを指定します。ファイルの前にC言語のビルドオプションを指定することができます。例えば、警告オプション (-Wall) を有効にする場合、次のようにします。

$ zen build-obj --c-source -Wall main.c

-fstack-check/-fno-stack-check

スタックガードを挿入し、スタックオーバーフローを検出するスタックオーバーフロー検査機能があります。これはビルドモードがDebugもしくはReleaseSafeの時にデフォルトで有効なっています。

-fstack-checkは、ReleaseFastReleaseSafeモードでのビルド時にスタックオーバーフロー検査機能を有効にします。-fno-stack-checkDebugReleaseSafeモードで該当の機能を無効化します (非推奨のオプションです) 。

--emit [asm|bin|llvm-ir]

コンパイラの中間生成物を出力します。asmを指定するとアセンブリが、llvm-irを指定するとLLVM中間表現が出力されます。

--mcmodel <model>

コード生成とデータ保存のメモリモデルを指定します。

model には jitsmallkernelmediumlarge のいずれかを指定します。

  • jit : JITを有効にしたコードを生成する
  • small : small コードモデルのコードを生成する
  • kernel : kernel コードモデルのコードを生成する
  • medium : medium コードモデルのコードを生成する
  • large : large コードモデルのコードを生成する

-fPIC/-fno-PIC

位置独立コード (position independent code) の有効/無効を切り替えるためのオプションです。

-ftime-report

コンパイルにかかった時間のプロファイルを表示します。

--name <名前>

出力バイナリの名前を指定します。

$ zen build-exe main.zen --name overriden
$ ls
main.zen  overriden

-dynamic

共有ライブラリ (.so, .dll, .dylib) をビルドする時に使用します。

--strip

デバッグシンボルをバイナリから取り除きます。

-target

ビルドするターゲット環境のターゲットトリプル(<アーキテクチャ>-<OS>-<ABI>の形式)を指定します。

ターゲット環境一覧はzen targetsコマンドで確認できます。ターゲット環境一覧から、アーキテクチャ、OS、ABI について適切なものを選んで次のように指定します。

-target thumb-freestanding-eabi

-mcpu

ターゲットの特定のCPUタイプを指定します。

ターゲットのCPUタイプ一覧は、次のようにターゲットトリプルと -mcpu help オプションを指定して zen build-exe コマンド実行することで確認できます。

zen build-exe -target thumb-freestanding-eabi -mcpu help main.zen
Available CPUs for this target:

  arm1020e      - Select the arm1020e processor.
  arm1020t      - Select the arm1020t processor.
  arm1022e      - Select the arm1022e processor.
  arm10e        - Select the arm10e processor.

# 以下略

ソースファイルは存在しないファイルを指定しても問題ありません。

Available CPUs for this target の内容から適切なものを選んで次のように指定します。

-mcpu cortex-m4

-mattr

ターゲットのアーキテクチャの属性を指定します。

指定できるアーキテクチャの属性は、-mcpu と同様にして -mcpu help を指定して zen build-exe コマンドを実行することで確認できます。-mattr には Available features for this target の内容を指定します。

$ zen build-exe -target thumb-freestanding-eabi -mcpu help main.zen
Available CPUs for this target:

  arm1020e      - Select the arm1020e processor.

# 中略

Available features for this target:

  32bit                    - Prefer 32-bit Thumb instrs.
  8msecext                 - Enable support for ARMv8-M Security Extensions.
  a12                      - Cortex-A12 ARM processors.
  a15                      - Cortex-A15 ARM processors.

# 以下略

mattr+- を前に付けることができます。+ を付けるとその属性を有効に、- を付けると無効にできます。 次のように , で区切って複数指定することができます。

-mattr +m,+a,-c

-isystem [ディレクトリパス]

C言語との相互運用を行う際、C言語のヘッダファイルを探索するパスを追加します。

-dirafter [ディレクトリパス]

-isystemと効果は同じですが、-dirafterで追加されたパスは最後に探索されます。

リンカオプション

--library [ライブラリ名]

リンクするライブラリを追加します。libcを追加する場合は--library cとなります。

--library-path [ディレクトリパス] / -L [ディレクトリパス]

リンクするライブラリを探索するパスを追加します。-L--libraryのエイリアスです。

--linker-script [ファイルパス]

リンクする際のリンカスクリプトを指定します。

Chapter 1

Chapter 2

Chapter 3

Chapter 4

Chapter 5

Chapter 6

Chapter 7

Chapter 8

Chapter 9

Chapter 10

Chapter 11

Chapter 12

Chapter 13

Chapter 14

Chapter 15

Appendix

Error Explanation

☰ 人の生きた証は永遠に残るよう ☰
Copyright © 2018-2020 connectFree Corporation. All rights reserved. | 特定商取引法に基づく表示
Zen, the Zen three-circles logo and The Zen Programming Language are trademarks of connectFree corporation in Japan and other countries.