【初心者向け】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.execcblkfn.exe といった、SHARC/Blackfin向けのコンパイラプログラムがインストールされているディレクトリの絶対パスが設定されます。
  • 設定方法
    • 自動検出
      デフォルト設定では、CMakeはシステムパスを検索し、CCES や VDSP++ などのツールセットを自動的に検出します。
    • 手動設定
      以下のコマンドを使用して、CMAKE_ADSP_ROOT を手動で設定することができます。
  • 用途
    CMAKE_ADSP_ROOT は、主に以下の状況で使用されます。
    • SHARC/Blackfin プロセッサ向けのプログラムをクロスコンパイルする場合
      クロスコンパイラはホストOSとは異なるアーキテクチャ向けにプログラムを生成するため、コンパイラへのパスを明示的に指定する必要があります。
    • CCES や VDSP++ などのツールセットを使用する場合
      これらのツールセットは、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)

上記のコードでは、以下の処理が行われます。

  1. cmake_minimum_required コマンドで、必要なCMakeのバージョンを指定します。
  2. project コマンドで、プロジェクトの名前を myproject に設定します。
  3. set(CMAKE_TOOLCHAIN_FILE ADSP.cmake) コマンドで、ADSP.cmake という名前のツールチェーンファイルを使用することを指定します。このファイルは、SHARC/Blackfin 向けのビルドルールを定義します。
  4. set(SOURCE_FILES main.c) コマンドで、ビルド対象となるソースファイルを main.c に設定します。
  5. add_executable コマンドで、myprogram という名前の実行可能ファイルを作成します。このファイルは、main.c をコンパイルして生成されます。
  6. target_link_libraries コマンドで、myprogramadsp ライブラリをリンクします。このライブラリは、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_COMPILERCMAKE_CXX_COMPILER を使用して、コンパイラへのパスを指定します。
  • CMAKE_CROSSCOMPILINGTRUE に設定して、クロスコンパイルであることを指定します。
  • CMAKE_SYSTEM_NAMECMAKE_SYSTEM_PROCESSOR を使用して、ターゲットアーキテクチャを指定します。

手動でコマンドを実行する

CMake を使用せずに、コンパイラやリンカなどのツールを直接実行してプログラムをビルドすることもできます。

cc21k.exe -o myprogram main.c -L${ADSP_ROOT}/lib -ladsp

上記の例では、cc21k.exe コンパイラを使用して main.c ファイルをコンパイルし、adsp ライブラリをリンクして myprogram という名前の実行可能ファイルを作成します。

注意事項

上記で紹介した代替方法は、それぞれメリットとデメリットがあります。状況に応じて適切な方法を選択してください。

  • 手動でコマンドを実行する場合
    処理がわかりやすいですが、複雑なプロジェクトには向いていません。
  • TOOLCHAIN_FILE を使用する
    柔軟性が高いですが、ファイルの作成と管理が必要になります。
  • 環境変数を利用する場合
    設定が簡単ですが、他のプログラムと環境変数が競合する可能性があります。