5月
01
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
が与えられます。
プロジェクトによってはもっと細かい制御が必要かもしれませんが、とりあえず自分が使う範囲ではこれで間に合っています。
no comment untill now