This service is available only in Japanese-language.
makefileファイル内でCCやCXX、LDFLAGSを変更しても、コンパイル直前でクロスコンパイル環境で上書きされます。 既存のクロスコンパイル環境に追加することはできましたが、一部のオプション(g++やsysrootなど)を採用しつつ 最適化(O)や-fstack-protector-strongなど一部削除したいオプションもあります。
どうすればクロスコンパイル環境のデフォルトオプションを削除・変更出来るでしょうか?
yakuhito
2020/3/3 (火) 16:42
https://www.yoctoproject.org/docs/3.0.1/dev-manual/dev-manual.html#new-r... で紹介されているEXTRA_OEMAKE にコンパイル時のオプションが設定です。 EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'" 上記のような記述をレシピに追記することで。その時点のCFLAGSを用いてmakeが実行されるので、EXTRA_OEMAKEの 指定を行う前段階で、CFLAGSの値を上書きすることでmakeに渡っていくと考えます。
takeda
2020/3/4 (水) 09:59
EXTRA_OEMAKEにてオプションを追加するということは、レシピの中でCFLAGSの設定などを行う感じでしょうか? CFLAGS=-lpthread EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
またはCFLAGSを空にしてMakefile側で設定するような方法でしょうか?
CXX=aarch64-poky-linux-g++ -fstack-protector-strong -Wformat -Wformat-security -Werror=format-security --sysroot=/home/share/proj/*** 上記のような値が代入されていて、aarch64-poky-linux-g++とsysroot以外削除したい場合も同様ですかね。 (sysrootなどは環境が変わると変更しなければならないため、--sysroot=${WORKDIR}/recipe-sysrootなどに変更)
どんなオプションが付与されるか1回目のlog.do_compileを確認しつつ、レシピとmakefileを変更する手順が正攻法で、 config、Yes/Noのような専用オプションなどがあるのではないかと思っていましたが、まずはこれでやっていこうと思います。
s.yamaguchi
2020/3/4 (水) 15:30
オプションの中で削除したいものがあるならばこんな感じで消してしまうという手もあります。置換も可能です。 do_compile() { # フラグから"-g"を除外 FLAGS_NOTG=`echo ${CXXFLAGS} | awk '{gsub("-g", ""); print}'`
${CXX} ${FLAGS_NOTG} -std=c++11 -fPIC -D_PROCESS_COM_EXPORTING ${LDFLAGS} -o ${WORKDIR}/HOGEHOGE \ ・ ・ ・ }
yakuhito
2020/3/3 (火) 16:42
make 時に渡されるオプションで変更します
https://www.yoctoproject.org/docs/3.0.1/dev-manual/dev-manual.html#new-r...
で紹介されているEXTRA_OEMAKE にコンパイル時のオプションが設定です。
EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
上記のような記述をレシピに追記することで。その時点のCFLAGSを用いてmakeが実行されるので、EXTRA_OEMAKEの
指定を行う前段階で、CFLAGSの値を上書きすることでmakeに渡っていくと考えます。
takeda
2020/3/4 (水) 09:59
回答ありがとうございます。
EXTRA_OEMAKEにてオプションを追加するということは、レシピの中でCFLAGSの設定などを行う感じでしょうか?
CFLAGS=-lpthread
EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
またはCFLAGSを空にしてMakefile側で設定するような方法でしょうか?
CXX=aarch64-poky-linux-g++ -fstack-protector-strong -Wformat -Wformat-security -Werror=format-security --sysroot=/home/share/proj/***
上記のような値が代入されていて、aarch64-poky-linux-g++とsysroot以外削除したい場合も同様ですかね。
(sysrootなどは環境が変わると変更しなければならないため、--sysroot=${WORKDIR}/recipe-sysrootなどに変更)
どんなオプションが付与されるか1回目のlog.do_compileを確認しつつ、レシピとmakefileを変更する手順が正攻法で、
config、Yes/Noのような専用オプションなどがあるのではないかと思っていましたが、まずはこれでやっていこうと思います。
s.yamaguchi
2020/3/4 (水) 15:30
たとえば…。
オプションの中で削除したいものがあるならばこんな感じで消してしまうという手もあります。置換も可能です。
do_compile() {
# フラグから"-g"を除外
FLAGS_NOTG=`echo ${CXXFLAGS} | awk '{gsub("-g", ""); print}'`
${CXX} ${FLAGS_NOTG} -std=c++11 -fPIC -D_PROCESS_COM_EXPORTING ${LDFLAGS} -o ${WORKDIR}/HOGEHOGE \
・
・
・
}