Ut Video Codec Suite のために CMakeLists.txt を書こうとしています。サポートするプラットフォームを増やすわけではないので、 UtVideo 全体をビルドすることは考えていません。(単なる技術的興味、に近い)

さて、UtVideo では AVX 版 AVX2 版…などと、CPU がサポートする命令セットごとに最適化ルーチンを持っていますが、これを実現するにはソースファイルごとに異なるコンパイルオプションを与える必要があります。たとえば GCC/Clang だとすると、AVX2 版のソースファイルには -mavx2 -mbmi -bmi2 を与え、AVX 版には -mavx を与える必要があります。

で、以下のようにすると実現可能です。

add_library(libname STATIC
    libname.cpp
    routine_avx2.cpp
)
set_target_properties(libname PROPERTIES
    COMPILE_FLAGS "-Wall"
)
set_source_files_properties(routine_avx2.cpp PROPERTIES
    COMPILE_FLAGS "-mavx2 -mbmi -mbmi2"
)

set_target_properties で libname を構成する全てのソースファイル(libname.cpp と routine_avx2.cpp の両方)に適用されるオプション、set_source_files_properties で routine_avx2.cpp にのみ適用されるオプションを記述しています。結果として、 libname.cpp のコンパイルでは -Wall 、routine_avx2.cpp のコンパイルでは -Wall -mavx2 -mbmi -mbmi2 が与えられます。

プロジェクトによってはもっと細かい制御が必要かもしれませんが、とりあえず自分が使う範囲ではこれで間に合っています。

Trackback

no comment untill now

Add your comment now