このバージョンでは、建築プロジェクトクーダは、多くの改善を行い、LEX / yaccのコンパイラのサポートのためのサポートが追加されますが、また新しい目標のために、主のためであるon_link
、 before_link
とafter_link
カスタマイズがリンク段階をサポートしています。
ここで、私はまた、@の下に感謝したいと思いますOpportunityLiuこのバージョンのxmakeのサポートOpportunityLiuがサポートクーダを改善するために多くのコードを貢献しました。また、彼はまた、より効率的かつ安定的な反復xmakeを更新作り、全体のユニットテストフレームワークのxmake、自己更新、タブ補完とコマンドラインCIスクリプトを改善するために役立っています。
新機能導入します
改善を構築するためのCUDAプロジェクト
ヘッダファイルは、検出およびインクリメンタル・コンパイルを頼ります
前の2.2.6バージョンは、少なくとも彼の頭ファイルでCUDAコードが複数ある場合、それぞれの変更は、すべてをコンパイルしますので、検出は、利用できない依存し、C / C ++のコードのようにある好きではないのCUDAのためのサポート完璧ではないの構築しますこれは、変更、インクリメンタル・コンパイルを検出します。
新バージョンでは、依存関係を処理し、同様に異なるプラットフォームの下に今であり、これは改善毎日コンパイルと開発効率の多くを持っているだろう、その支援をxmake。
APIに関連する新しいgencodes設定
以前のバージョン、gencodesの設定を追加するには、外観を設定する前に、簡単な、非常に複雑ではありません。
target("cuda_console")
set_kind("binary")
add_files("src/*.cu")
add_cuflags("-gencode arch=compute_30,code=sm_30", "-gencode arch=compute_35,code=sm_35")
add_cuflags("-gencode arch=compute_37,code=sm_37", "-gencode arch=compute_50,code=sm_50")
add_cuflags("-gencode arch=compute_52,code=sm_52", "-gencode arch=compute_60,code=sm_60")
add_cuflags("-gencode arch=compute_61,code=sm_61", "-gencode arch=compute_70,code=sm_70")
add_cuflags("-gencode arch=compute_70,code=compute_70")
add_ldflags("-gencode arch=compute_30,code=sm_30", "-gencode arch=compute_35,code=sm_35")
add_ldflags("-gencode arch=compute_37,code=sm_37", "-gencode arch=compute_50,code=sm_50")
add_ldflags("-gencode arch=compute_52,code=sm_52", "-gencode arch=compute_60,code=sm_60")
add_ldflags("-gencode arch=compute_61,code=sm_61", "-gencode arch=compute_70,code=sm_70")
add_ldflags("-gencode arch=compute_70,code=compute_70")
したがって、増加するCUDAプロジェクトのxmake.luaの構成を合理化するために、add_cugencodes
次のような構成を簡素化するためのAPIを、改良点は以下のとおりです。
target("cuda_console")
set_kind("binary")
add_files("src/*.cu")
-- generate SASS code for each SM architecture
add_cugencodes("sm_30", "sm_35", "sm_37", "sm_50", "sm_52", "sm_60", "sm_61", "sm_70")
-- generate PTX code from the highest SM architecture to guarantee forward-compatibility
add_cugencodes("compute_70")
設定されている場合に加えて、add_cugencodes("native")
時間、xmakeが自動的に現在のデバイスがgencodesをサポート検出し、自動的に追加、より便利で効率的であろう。
これ、また次のおかげOpportunityLiuのと同様に設けられた検出コードをadd_cugencodes
実装。
デバイスリンクデバイスサポートリンク
新バージョン、xmake基本的に全体のビルドプロセスのCUDAを再構築するには、デバイスリンクリンク道に別の建物切り離さ建物維持するために、CUDAでのルール、およびデフォルトに関連するCUDAます。
デバイスリンクの説明と関連する公式な説明を参照することができますメリットについてます。https://devblogs.nvidia.com/separate-compilation-linking-cuda-device-code/
私たちは、コンパイル時にクロスコンパイル単位を含める __global__
か __device__
xmakeで、現在はデフォルトのdevlinkでオンになっているので、必要なdevlinkある時間の関数を呼び出します。
ユーザーが手動でdevlinkを無効にしたい場合は、もちろん、すべての変更のxmake.luaを加える必要はありませんについては、可能です。
target("test")
set_kind("binary")
add_files("src/*.cu")
add_values("cuda.devlink", false) -- 显式禁用默认的device-link行为
打ち鳴らすコンパイラCUDAとサポートプロジェクト
打ち鳴らすコンパイラもある.cuファイル*のためにサポートしていますが、打ち鳴らすのCUDAバージョンの異なるバージョンは、clang7のみ、10にcuda7-9.2,8支援をサポートする10.1 clang9を取得する必要性をサポートするために、一定の制限によってサポートされています。
プロジェクトをコンパイルするNVCCをサポートしてxmakeコールCUDAに加えて、例えば、コンパイル打ち鳴らすに直接切ることができます。
xmake f --cu=clang
xmake
しかしdevlinkに、それはNVCCを頼るように見える、打ち鳴らすはサポートされていません。
NVCCを使用C ++コンパイラ設定可能なスイッチ
加えxmake --ccbin=
使用されるパラメータを切り替えるように構成することができ、NVCCデフォルトのC ++コンパイラ、リンカ、次のように使用されます。
xmake f --ccbin=clang++
xmake
これは、NVCCのCUDAコンパイルされたコード、内部コール打ち鳴らす++コンパイラを作ることができます。
カスタマイズされたリンク処理
新バージョンでは、我々はフェーズを結ぶリンクに関連付けられているカスタム処理を追加して、ユーザーがすることにより、ターゲット/ルールで実装することができon_link
、 before_link
かつafter_link
そのリンクプロセスをカスタマイズ展開します。
たとえば、私たちは、あなたがライン上で自分自身のluaスクリプトbefore_linkステージの一部を書くことができ、そのような* .oファイルを扱うためにどうするかなど、いくつかの他のものを前処理、通常のC / C ++コードの前のステージをリンクします:
target("test")
before_link(function (target)
print("process objects", target:objectfiles())
end)
それとも、私たちは、組み込みリンク処理を書き換えたい、あなたが使用することができますon_link
:
target("test")
on_link(function (target)
print("link objects", target:objectfiles())
end)
そこafter_link
、リンクが完了した後、いくつかのカスタマイズ作業を行います。
レックス/ Yaccのコンパイラのサポート
現在xmakeすでにネイティブサポートLEX /フレックス、yaccの/バイソンなど.L /コンパイルプロセス.Yファイルはすぐに、コンパイラ関連のプロジェクトといくつかを開発します。
私たちは、それが処理できるように、二つにターゲットにLEX、yaccのルールを追加する必要があります.L /もちろん、.Yファイルをの.ll / .yyもサポート。
target("calc")
set_kind("binary")
add_rules("lex", "yacc")
add_files("src/*.l", "src/*.y")
ここでのコードの例は、参考のため、である。lex_yacc_example
改善された動作環境の設定
実行ディレクトリを設定します
我々はできるset_rundir
、デフォルトで設定されていない場合は現在、ディレクトリを実行し、デフォルトのインタフェースは、ターゲットプログラムを実行するために使用されて設定され、ターゲットディレクトリは、実行可能ファイルを実行するためにロードされます。
ユーザーがロードするディレクトリを変更したい場合は、1がであるon_run()
ないスイッチカスタム・ロジックの操作の仕方が、あまりにも面倒、そうするためのディレクトリをカットします。
だから、すぐにデフォルトのディレクトリ環境がインタフェースを切り替えることによって、これを行うために設定されて実行することができます。
target("test")
set_kind("binary")
add_files("src/*.c")
set_rundir("$(projectdir)/xxx")
ランタイム環境変数を追加します。
もう一つの新しいインターフェイスは、add_runenvs
デフォルトの実行ターゲットプログラムを設定するには、環境変数を追加するために使用することができます。
target("test")
set_kind("binary")
add_files("src/*.c")
add_runenvs("PATH", "/tmp/bin", "xxx/bin")
add_runenvs("NAME", "value")
コマンドラインのサポートタブ補完
ユーザーエクスペリエンスを向上させるためには、新しいバージョンのコマンドラインxmakeコマンドパラメータ]タブの完了は、すべてのコマンドパラメータのユーザーすることができ、容易かつ迅速にタブxmakeをサポートを行っています。
現在のzsh / bashの/ shをしてPowerShellをサポート。
もっと便利なセルフリフレッシュコマンド
以前のバージョンでは、xmakeは便利な自己updateコマンドを提供しているxmake update
例えば、xmake独自のバージョンを更新し、さらに指定された分岐バージョンを更新します:xmake update dev/master
しかし、場所のいくつか不足しています:
- 各アップデートは、コアを再コンパイルする必要がありますので、更新は、多くの場合、しかし、スクリプトのみの変更と新バージョン遅い、コアはなりません。
- 窓の上に実装され、指定されたDEV / masterブランチを更新しますが、少し遅れ完璧ではない、とすぐにラインDEV /マスターバージョンに同期させることはできません。
したがって、このOpportunityLiuは多くの改善を支援します。
- 提供
xmake update -s/--scriptonly
パラメータ、唯一の更新のluaスクリプトではなく、追加のコンパイラのコアを、高速で反復更新 - 改善されたスクリプトciは、窓の上に構築された自動化を実現CI
xmake update dev
自動更新をダウンロードするには、CIの良い事前に構築されたインストールパッケージを引っ張ります - あなたは、彼らのバージョンを更新するために、他のgithubのレポ、便利なフォーク貢献者からの更新xmakeを指定するだけでなく、ミラーレポを切り替えるために、ユーザーを容易にすることができます
xmake update gitee:tboox/xmake
アップデート
新機能
- 440#:/ RUNターゲットの追加
set_rundir()
やadd_runenvs()
インターフェースの設定を - #443:追加のコマンドライン]タブのオートコンプリートのサポート
- ルール/追加するターゲットとして
on_link
、before_link
そしてafter_link
、ステージカスタムスクリプトのサポート - #190:追加
add_rules("lex", "yacc")
のlex / yaccのプロジェクトをサポートするためのルールを