【初心者向け】CMakeでSHARC/Blackfin向けプログラムをビルドする方法:Cmake_ADSP_ROOT徹底解説
CMAKE_ADSP_ROOT
は、CMakeにおける重要な変数のひとつで、クロスコンパイル環境において Analog Devices社のSHARC/Blackfinプロセッサ向けプログラム のビルドに必要な情報を格納します。具体的には、以下の役割を担います。
- 手動設定
上記の自動検出がうまく機能しない場合は、CMAKE_ADSP_ROOT
を手動で設定することで、必要なコンパイラツールへのパスを指定することができます。 - 自動検出機能
デフォルト設定では、CMakeはシステム上にインストールされているCCES(Cross Compiler Environment Suite)やVDSP++などのツールセットを自動的に検出し、CMAKE_ADSP_ROOT
にパスを設定します。 - コンパイラへのパス指定
CMAKE_ADSP_ROOT
には、cc21k.exe
とccblkfn.exe
といった、SHARC/Blackfin向けのコンパイラプログラムがインストールされているディレクトリの絶対パスが設定されます。
- 設定方法
- 自動検出
デフォルト設定では、CMakeはシステムパスを検索し、CCES や VDSP++ などのツールセットを自動的に検出します。 - 手動設定
以下のコマンドを使用して、CMAKE_ADSP_ROOT
を手動で設定することができます。
- 自動検出
- 用途
CMAKE_ADSP_ROOT
は、主に以下の状況で使用されます。- SHARC/Blackfin プロセッサ向けのプログラムをクロスコンパイルする場合
クロスコンパイラはホストOSとは異なるアーキテクチャ向けにプログラムを生成するため、コンパイラへのパスを明示的に指定する必要があります。 - CCES や VDSP++ などのツールセットを使用する場合
これらのツールセットは、SHARC/Blackfin 向けの開発環境を提供しており、コンパイラ以外にも、デバッガやリンカなどのツールが含まれています。
- SHARC/Blackfin プロセッサ向けのプログラムをクロスコンパイルする場合
cmake -DCMAKE_ADSP_ROOT=/path/to/ADSP_ROOT
- 注意点
CMAKE_ADSP_ROOT
が正しく設定されていない場合、CMakeはSHARC/Blackfin 向けプログラムをビルドできず、エラーが発生する可能性があります。- 手動設定を行う場合は、指定するディレクトリが正しいパスであることを確認する必要があります。
# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(myproject)
set(CMAKE_TOOLCHAIN_FILE ADSP.cmake)
set(SOURCE_FILES main.c)
add_executable(myprogram ${SOURCE_FILES})
target_link_libraries(myprogram adsp)
上記のコードでは、以下の処理が行われます。
cmake_minimum_required
コマンドで、必要なCMakeのバージョンを指定します。project
コマンドで、プロジェクトの名前をmyproject
に設定します。set(CMAKE_TOOLCHAIN_FILE ADSP.cmake)
コマンドで、ADSP.cmake
という名前のツールチェーンファイルを使用することを指定します。このファイルは、SHARC/Blackfin 向けのビルドルールを定義します。set(SOURCE_FILES main.c)
コマンドで、ビルド対象となるソースファイルをmain.c
に設定します。add_executable
コマンドで、myprogram
という名前の実行可能ファイルを作成します。このファイルは、main.c
をコンパイルして生成されます。target_link_libraries
コマンドで、myprogram
にadsp
ライブラリをリンクします。このライブラリは、SHARC/Blackfin 向けのプログラムに必要なライブラリ関数を提供します。
- 詳細については、CMake ドキュメントや Analog Devices社のドキュメントを参照してください。
ADSP.cmake
ファイルは、Analog Devices社の開発環境に付属しているツールチェーンファイルを使用することができます。- 上記のコードはあくまで一例であり、実際のプロジェクトでは状況に応じて変更する必要があります。
環境変数を利用する
SHARC/Blackfin 向けのコンパイラツールへのパスは、環境変数 ADSP_ROOT
に設定することもできます。CMake はビルド時にこの環境変数を参照し、コンパイラへのパスを取得します。
setx ADSP_ROOT "C:\Program Files (x86)\Analog Devices\CrossCore Embedded Studio\bin"
上記の例では、ADSP_ROOT
環境変数に C:\Program Files (x86)\Analog Devices\CrossCore Embedded Studio\bin
という値を設定しています。このディレクトリには、SHARC/Blackfin 向けのコンパイラツールが含まれています。
TOOLCHAIN_FILE を使用する
# TOOLCHAIN_FILE
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR sharc)
set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_C_COMPILER cc21k.exe)
set(CMAKE_CXX_COMPILER cc21k.exe)
set(CMAKE_FIND_LIBRARY_PATHS ${ADSP_ROOT}/lib)
上記の例では、TOOLCHAIN_FILE
内で以下の設定を行っています。
CMAKE_FIND_LIBRARY_PATHS
を使用して、ライブラリの検索パスを指定します。CMAKE_C_COMPILER
とCMAKE_CXX_COMPILER
を使用して、コンパイラへのパスを指定します。CMAKE_CROSSCOMPILING
をTRUE
に設定して、クロスコンパイルであることを指定します。CMAKE_SYSTEM_NAME
とCMAKE_SYSTEM_PROCESSOR
を使用して、ターゲットアーキテクチャを指定します。
手動でコマンドを実行する
CMake を使用せずに、コンパイラやリンカなどのツールを直接実行してプログラムをビルドすることもできます。
cc21k.exe -o myprogram main.c -L${ADSP_ROOT}/lib -ladsp
上記の例では、cc21k.exe
コンパイラを使用して main.c
ファイルをコンパイルし、adsp
ライブラリをリンクして myprogram
という名前の実行可能ファイルを作成します。
注意事項
上記で紹介した代替方法は、それぞれメリットとデメリットがあります。状況に応じて適切な方法を選択してください。
- 手動でコマンドを実行する場合
処理がわかりやすいですが、複雑なプロジェクトには向いていません。 - TOOLCHAIN_FILE を使用する
柔軟性が高いですが、ファイルの作成と管理が必要になります。 - 環境変数を利用する場合
設定が簡単ですが、他のプログラムと環境変数が競合する可能性があります。