Message ID | 20180424152405.10304-4-alex.bennee@linaro.org |
---|---|
State | New |
Headers | show |
Series | fix building of tests/tcg | expand |
On 04/24/2018 05:23 AM, Alex Bennée wrote: > @@ -675,10 +687,12 @@ case "$cpu" in > i386|i486|i586|i686|i86pc|BePC) > cpu="i386" > supported_cpu="yes" > + cross_cc_i386=gcc > ;; > x86_64|amd64) > cpu="x86_64" > supported_cpu="yes" > + cross_cc_x86_64=gcc > ;; > armv*b|armv*l|arm) > cpu="arm" Isn't this hunk taken care of in the next patch, where you set these to $cc? And if not, surely bare "gcc" isn't correct... Otherwise, Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
Richard Henderson <richard.henderson@linaro.org> writes: > On 04/24/2018 05:23 AM, Alex Bennée wrote: >> @@ -675,10 +687,12 @@ case "$cpu" in >> i386|i486|i586|i686|i86pc|BePC) >> cpu="i386" >> supported_cpu="yes" >> + cross_cc_i386=gcc >> ;; >> x86_64|amd64) >> cpu="x86_64" >> supported_cpu="yes" >> + cross_cc_x86_64=gcc >> ;; >> armv*b|armv*l|arm) >> cpu="arm" > > Isn't this hunk taken care of in the next patch, where you set these to $cc? > And if not, surely bare "gcc" isn't correct... Woops, I'll fix that. > > Otherwise, > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > > > r~ -- Alex Bennée
On 04/24/2018 12:23 PM, Alex Bennée wrote: > This allows us to specify cross compilers for our guests. This is > useful for building test images/programs. Currently we re-run the > compile test for each target. I couldn't think of a way to cache the > value for a given arch without getting messier configure code. > > The cross compiler for the guest is visible to each target as > CROSS_CC_GUEST in config-target.mak. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > > --- > v3 > - --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit... > - --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} > - add remaining target_compiler definitions > --- > configure | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 79 insertions(+) > > diff --git a/configure b/configure > index b0ae632ee4..caa838a0d0 100755 > --- a/configure > +++ b/configure > @@ -453,6 +453,13 @@ vxhs="" > libxml2="" > docker="no" > > +# cross compilers defaults, can be overridden with --cross-cc-ARCH > +cross_cc_aarch64="aarch64-linux-gnu-gcc" > +cross_cc_arm="arm-linux-gnueabihf-gcc" > +cross_cc_powerpc="powerpc-linux-gnu-gcc" Do we need to have default values for all targets? > + > +enabled_cross_compilers="" > + > supported_cpu="no" > supported_os="no" > bogus_os="no" > @@ -483,6 +490,11 @@ for opt do > ;; > --disable-debug-info) debug_info="no" > ;; > + --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" > + ;; > + --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} > + eval "cross_cc_${cc_arch}=\$optarg" > + ;; Do we need to verify if a valid --cross-cc-FOO was passed, in case of a typo? > esac > done > # OS specific > @@ -675,10 +687,12 @@ case "$cpu" in > i386|i486|i586|i686|i86pc|BePC) > cpu="i386" > supported_cpu="yes" > + cross_cc_i386=gcc > ;; > x86_64|amd64) > cpu="x86_64" > supported_cpu="yes" > + cross_cc_x86_64=gcc > ;; > armv*b|armv*l|arm) > cpu="arm" > @@ -912,6 +926,8 @@ for opt do > ;; > --disable-debug-info) > ;; > + --cross-cc-*) > + ;; > --enable-modules) > modules="yes" > ;; > @@ -6777,6 +6793,8 @@ case "$target" in > ;; > esac > > +target_compiler="" > + > mkdir -p $target_dir > echo "# Automatically generated by configure - do not modify" > $config_target_mak > > @@ -6792,19 +6810,23 @@ TARGET_ABI_DIR="" > case "$target_name" in > i386) > gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" > + target_compiler=$cross_cc_i386 > ;; > x86_64) > TARGET_BASE_ARCH=i386 > gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" > + target_compiler=$cross_cc_x86_64 > ;; > alpha) > mttcg="yes" > + target_compiler=$cross_cc_alpha > ;; > arm|armeb) > TARGET_ARCH=arm > bflt="yes" > mttcg="yes" > gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" > + target_compiler=$cross_cc_arm > ;; > aarch64|aarch64_be) > TARGET_ARCH=aarch64 > @@ -6812,58 +6834,73 @@ case "$target_name" in > bflt="yes" > mttcg="yes" > gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" > + target_compiler=$cross_cc_aarch64 > ;; > cris) > + target_compiler=$cross_cc_cris > ;; > hppa) > mttcg="yes" > + target_compiler=$cross_cc_hppa > ;; > lm32) > + target_compiler=$cross_cc_lm32 > ;; > m68k) > bflt="yes" > gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" > + target_compiler=$cross_cc_m68k > ;; > microblaze|microblazeel) > TARGET_ARCH=microblaze > bflt="yes" > + target_compiler=$cross_cc_microblaze > ;; > mips|mipsel) > TARGET_ARCH=mips > + target_compiler=$cross_cc_mips > echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak > ;; > mipsn32|mipsn32el) > TARGET_ARCH=mips64 > TARGET_BASE_ARCH=mips > + target_compiler=$cross_cc_mipsn32 > echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak > echo "TARGET_ABI32=y" >> $config_target_mak > ;; > mips64|mips64el) > TARGET_ARCH=mips64 > TARGET_BASE_ARCH=mips > + target_compiler=$cross_cc_mips64 > echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak > ;; > moxie) > + target_compiler=$cross_cc_moxie > ;; > nios2) > + target_compiler=$cross_cc_nios2 > ;; > or1k) > + target_compiler=$cross_cc_or1k > TARGET_ARCH=openrisc > TARGET_BASE_ARCH=openrisc > ;; > ppc) > gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" > + target_compiler=$cross_cc_powerpc > ;; > ppcemb) > TARGET_BASE_ARCH=ppc > TARGET_ABI_DIR=ppc > gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" > + target_compiler=$cross_cc_ppcemb > ;; > ppc64) > TARGET_BASE_ARCH=ppc > TARGET_ABI_DIR=ppc > mttcg=yes > gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > + target_compiler=$cross_cc_ppc64 > ;; > ppc64le) > TARGET_ARCH=ppc64 > @@ -6871,6 +6908,7 @@ case "$target_name" in > TARGET_ABI_DIR=ppc > mttcg=yes > gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > + target_compiler=$cross_cc_ppc64le > ;; > ppc64abi32) > TARGET_ARCH=ppc64 > @@ -6878,45 +6916,57 @@ case "$target_name" in > TARGET_ABI_DIR=ppc > echo "TARGET_ABI32=y" >> $config_target_mak > gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > + target_compiler=$cross_cc_ppc64abi32 > ;; > riscv32) > TARGET_BASE_ARCH=riscv > TARGET_ABI_DIR=riscv > mttcg=yes > + target_compiler=$cross_cc_riscv32 > ;; > riscv64) > TARGET_BASE_ARCH=riscv > TARGET_ABI_DIR=riscv > mttcg=yes > + target_compiler=$cross_cc_riscv64 > ;; > sh4|sh4eb) > TARGET_ARCH=sh4 > bflt="yes" > + target_compiler=$cross_cc_sh4 > ;; > sparc) > + target_compiler=$cross_cc_sparc > ;; > sparc64) > TARGET_BASE_ARCH=sparc > + target_compiler=$cross_cc_sparc64 > ;; > sparc32plus) > TARGET_ARCH=sparc64 > TARGET_BASE_ARCH=sparc > TARGET_ABI_DIR=sparc > + target_compiler=$cross_cc_sparc32plus > echo "TARGET_ABI32=y" >> $config_target_mak > ;; > s390x) > mttcg=yes > gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" > + target_compiler=$cross_cc_s390x > ;; > tilegx) > + target_compiler=$cross_cc_tilegx > ;; > tricore) > + target_compiler=$cross_cc_tricore > ;; > unicore32) > + target_compiler=$cross_cc_unicore32 > ;; > xtensa|xtensaeb) > TARGET_ARCH=xtensa > mttcg="yes" > + target_compiler=$cross_cc_xtensa > ;; > *) > error_exit "Unsupported target CPU" > @@ -6927,6 +6977,25 @@ if [ "$TARGET_BASE_ARCH" = "" ]; then > TARGET_BASE_ARCH=$TARGET_ARCH > fi > > +# Do we have a cross compiler for this target? > +if has $target_compiler; then > + > + cat > $TMPC << EOF > +#include <stdio.h> > +int main(void) { > + printf("Hello World!\n"); > +} > +EOF Can this be replaced by write_c_skeleton? > + > + if ! do_compiler $target_compiler -o $TMPE $TMPC -static ; then > + target_compiler="" > + else > + enabled_cross_compilers="${enabled_cross_compilers} ${target_compiler}" > + fi > +else > + target_compiler="" > +fi > + > symlink "$source_path/Makefile.target" "$target_dir/Makefile" > > upper() { > @@ -7000,6 +7069,10 @@ if test "$target_bsd_user" = "yes" ; then > echo "CONFIG_BSD_USER=y" >> $config_target_mak > fi > > +if test -n "$target_compiler"; then > + echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak > +fi > + > # generate QEMU_CFLAGS/LDFLAGS for targets > > cflags="" > @@ -7122,6 +7195,12 @@ echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak > > done # for target in $targets > > +if test -n "$enabled_cross_compilers"; then > + echo > + echo "NOTE: cross-compilers enabled:" > + printf '%s\n' $enabled_cross_compilers | sort -u > +fi > + > if [ "$dtc_internal" = "yes" ]; then > echo "config-host.h: subdir-dtc" >> $config_host_mak > fi >
On 24 April 2018 at 16:23, Alex Bennée <alex.bennee@linaro.org> wrote: > This allows us to specify cross compilers for our guests. This is > useful for building test images/programs. Currently we re-run the > compile test for each target. I couldn't think of a way to cache the > value for a given arch without getting messier configure code. > > The cross compiler for the guest is visible to each target as > CROSS_CC_GUEST in config-target.mak. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > > --- > v3 > - --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit... > - --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} > - add remaining target_compiler definitions > --- > configure | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 79 insertions(+) > > diff --git a/configure b/configure > index b0ae632ee4..caa838a0d0 100755 > --- a/configure > +++ b/configure > @@ -453,6 +453,13 @@ vxhs="" > libxml2="" > docker="no" > > +# cross compilers defaults, can be overridden with --cross-cc-ARCH > +cross_cc_aarch64="aarch64-linux-gnu-gcc" > +cross_cc_arm="arm-linux-gnueabihf-gcc" > +cross_cc_powerpc="powerpc-linux-gnu-gcc" > + > +enabled_cross_compilers="" > + > supported_cpu="no" > supported_os="no" > bogus_os="no" > @@ -483,6 +490,11 @@ for opt do > ;; > --disable-debug-info) debug_info="no" > ;; > + --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" > + ;; > + --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} > + eval "cross_cc_${cc_arch}=\$optarg" > + ;; Could we have --help text for the new configure options, please? thanks -- PMM
Murilo Opsfelder Araujo <muriloo@linux.ibm.com> writes: > On 04/24/2018 12:23 PM, Alex Bennée wrote: >> This allows us to specify cross compilers for our guests. This is >> useful for building test images/programs. Currently we re-run the >> compile test for each target. I couldn't think of a way to cache the >> value for a given arch without getting messier configure code. >> >> The cross compiler for the guest is visible to each target as >> CROSS_CC_GUEST in config-target.mak. >> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> >> >> --- >> v3 >> - --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit... >> - --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} >> - add remaining target_compiler definitions >> --- >> configure | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 79 insertions(+) >> >> diff --git a/configure b/configure >> index b0ae632ee4..caa838a0d0 100755 >> --- a/configure >> +++ b/configure >> @@ -453,6 +453,13 @@ vxhs="" >> libxml2="" >> docker="no" >> >> +# cross compilers defaults, can be overridden with --cross-cc-ARCH >> +cross_cc_aarch64="aarch64-linux-gnu-gcc" >> +cross_cc_arm="arm-linux-gnueabihf-gcc" >> +cross_cc_powerpc="powerpc-linux-gnu-gcc" > > Do we need to have default values for all targets? > >> + >> +enabled_cross_compilers="" >> + >> supported_cpu="no" >> supported_os="no" >> bogus_os="no" >> @@ -483,6 +490,11 @@ for opt do >> ;; >> --disable-debug-info) debug_info="no" >> ;; >> + --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" >> + ;; >> + --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} >> + eval "cross_cc_${cc_arch}=\$optarg" >> + ;; > > Do we need to verify if a valid --cross-cc-FOO was passed, in case of a > typo? How so? We do attempt to build with these options later. >> >> +# Do we have a cross compiler for this target? >> +if has $target_compiler; then >> + >> + cat > $TMPC << EOF >> +#include <stdio.h> >> +int main(void) { >> + printf("Hello World!\n"); >> +} >> +EOF > > Can this be replaced by write_c_skeleton? Sure. Thanks. -- Alex Bennée
On Wed, May 16, 2018 at 04:18:56PM +0100, Alex Bennée wrote: > > Murilo Opsfelder Araujo <muriloo@linux.ibm.com> writes: > > > On 04/24/2018 12:23 PM, Alex Bennée wrote: > >> This allows us to specify cross compilers for our guests. This is > >> useful for building test images/programs. Currently we re-run the > >> compile test for each target. I couldn't think of a way to cache the > >> value for a given arch without getting messier configure code. > >> > >> The cross compiler for the guest is visible to each target as > >> CROSS_CC_GUEST in config-target.mak. > >> > >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > >> > >> --- > >> v3 > >> - --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit... > >> - --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} > >> - add remaining target_compiler definitions > >> --- > >> configure | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > >> 1 file changed, 79 insertions(+) > >> > >> diff --git a/configure b/configure > >> index b0ae632ee4..caa838a0d0 100755 > >> --- a/configure > >> +++ b/configure > >> @@ -453,6 +453,13 @@ vxhs="" > >> libxml2="" > >> docker="no" > >> > >> +# cross compilers defaults, can be overridden with --cross-cc-ARCH > >> +cross_cc_aarch64="aarch64-linux-gnu-gcc" > >> +cross_cc_arm="arm-linux-gnueabihf-gcc" > >> +cross_cc_powerpc="powerpc-linux-gnu-gcc" > > > > Do we need to have default values for all targets? > > > >> + > >> +enabled_cross_compilers="" > >> + > >> supported_cpu="no" > >> supported_os="no" > >> bogus_os="no" > >> @@ -483,6 +490,11 @@ for opt do > >> ;; > >> --disable-debug-info) debug_info="no" > >> ;; > >> + --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" > >> + ;; > >> + --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} > >> + eval "cross_cc_${cc_arch}=\$optarg" > >> + ;; > > > > Do we need to verify if a valid --cross-cc-FOO was passed, in case of a > > typo? > > How so? We do attempt to build with these options later. Hi, Alex. User can mistakenly pass, for example, --cross-cc-ppc64el= instead of the expected --cross-cc-ppc64le=. I was wondering if we need to validate this kind of input (inexistent $cross_cc_* variable) and consider --cross-cc-ppc64el= an invalid option, in this example. By the way, are you updating the --help text explaining these new --cross-cc-* options? -- Murilo
Murilo Opsfelder Araujo <muriloo@linux.ibm.com> writes: > On Wed, May 16, 2018 at 04:18:56PM +0100, Alex Bennée wrote: >> >> Murilo Opsfelder Araujo <muriloo@linux.ibm.com> writes: >> >> > On 04/24/2018 12:23 PM, Alex Bennée wrote: >> >> This allows us to specify cross compilers for our guests. This is >> >> useful for building test images/programs. Currently we re-run the >> >> compile test for each target. I couldn't think of a way to cache the >> >> value for a given arch without getting messier configure code. >> >> >> >> The cross compiler for the guest is visible to each target as >> >> CROSS_CC_GUEST in config-target.mak. >> >> >> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> >> >> >> >> --- >> >> v3 >> >> - --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit... >> >> - --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} >> >> - add remaining target_compiler definitions >> >> --- >> >> configure | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> >> 1 file changed, 79 insertions(+) >> >> >> >> diff --git a/configure b/configure >> >> index b0ae632ee4..caa838a0d0 100755 >> >> --- a/configure >> >> +++ b/configure >> >> @@ -453,6 +453,13 @@ vxhs="" >> >> libxml2="" >> >> docker="no" >> >> >> >> +# cross compilers defaults, can be overridden with --cross-cc-ARCH >> >> +cross_cc_aarch64="aarch64-linux-gnu-gcc" >> >> +cross_cc_arm="arm-linux-gnueabihf-gcc" >> >> +cross_cc_powerpc="powerpc-linux-gnu-gcc" >> > >> > Do we need to have default values for all targets? >> > >> >> + >> >> +enabled_cross_compilers="" >> >> + >> >> supported_cpu="no" >> >> supported_os="no" >> >> bogus_os="no" >> >> @@ -483,6 +490,11 @@ for opt do >> >> ;; >> >> --disable-debug-info) debug_info="no" >> >> ;; >> >> + --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" >> >> + ;; >> >> + --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} >> >> + eval "cross_cc_${cc_arch}=\$optarg" >> >> + ;; >> > >> > Do we need to verify if a valid --cross-cc-FOO was passed, in case of a >> > typo? >> >> How so? We do attempt to build with these options later. > > Hi, Alex. > > User can mistakenly pass, for example, --cross-cc-ppc64el= instead of the > expected --cross-cc-ppc64le=. I was wondering if we need to validate this kind > of input (inexistent $cross_cc_* variable) and consider --cross-cc-ppc64el= an > invalid option, in this example. OK I understand. I'm not sure how to do this without having a whole bunch of additional boilerplate code though. I guess there is likely to be churn each time a new guest architecture is added though. We do currently dump the list of enabled compilers at the end of configure so that at least should give the user some indication of what didn't work? > By the way, are you updating the --help text explaining these new --cross-cc-* > options? Yes. -- Alex Bennée
diff --git a/configure b/configure index b0ae632ee4..caa838a0d0 100755 --- a/configure +++ b/configure @@ -453,6 +453,13 @@ vxhs="" libxml2="" docker="no" +# cross compilers defaults, can be overridden with --cross-cc-ARCH +cross_cc_aarch64="aarch64-linux-gnu-gcc" +cross_cc_arm="arm-linux-gnueabihf-gcc" +cross_cc_powerpc="powerpc-linux-gnu-gcc" + +enabled_cross_compilers="" + supported_cpu="no" supported_os="no" bogus_os="no" @@ -483,6 +490,11 @@ for opt do ;; --disable-debug-info) debug_info="no" ;; + --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" + ;; + --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} + eval "cross_cc_${cc_arch}=\$optarg" + ;; esac done # OS specific @@ -675,10 +687,12 @@ case "$cpu" in i386|i486|i586|i686|i86pc|BePC) cpu="i386" supported_cpu="yes" + cross_cc_i386=gcc ;; x86_64|amd64) cpu="x86_64" supported_cpu="yes" + cross_cc_x86_64=gcc ;; armv*b|armv*l|arm) cpu="arm" @@ -912,6 +926,8 @@ for opt do ;; --disable-debug-info) ;; + --cross-cc-*) + ;; --enable-modules) modules="yes" ;; @@ -6777,6 +6793,8 @@ case "$target" in ;; esac +target_compiler="" + mkdir -p $target_dir echo "# Automatically generated by configure - do not modify" > $config_target_mak @@ -6792,19 +6810,23 @@ TARGET_ABI_DIR="" case "$target_name" in i386) gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" + target_compiler=$cross_cc_i386 ;; x86_64) TARGET_BASE_ARCH=i386 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" + target_compiler=$cross_cc_x86_64 ;; alpha) mttcg="yes" + target_compiler=$cross_cc_alpha ;; arm|armeb) TARGET_ARCH=arm bflt="yes" mttcg="yes" gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" + target_compiler=$cross_cc_arm ;; aarch64|aarch64_be) TARGET_ARCH=aarch64 @@ -6812,58 +6834,73 @@ case "$target_name" in bflt="yes" mttcg="yes" gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" + target_compiler=$cross_cc_aarch64 ;; cris) + target_compiler=$cross_cc_cris ;; hppa) mttcg="yes" + target_compiler=$cross_cc_hppa ;; lm32) + target_compiler=$cross_cc_lm32 ;; m68k) bflt="yes" gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" + target_compiler=$cross_cc_m68k ;; microblaze|microblazeel) TARGET_ARCH=microblaze bflt="yes" + target_compiler=$cross_cc_microblaze ;; mips|mipsel) TARGET_ARCH=mips + target_compiler=$cross_cc_mips echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak ;; mipsn32|mipsn32el) TARGET_ARCH=mips64 TARGET_BASE_ARCH=mips + target_compiler=$cross_cc_mipsn32 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak echo "TARGET_ABI32=y" >> $config_target_mak ;; mips64|mips64el) TARGET_ARCH=mips64 TARGET_BASE_ARCH=mips + target_compiler=$cross_cc_mips64 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak ;; moxie) + target_compiler=$cross_cc_moxie ;; nios2) + target_compiler=$cross_cc_nios2 ;; or1k) + target_compiler=$cross_cc_or1k TARGET_ARCH=openrisc TARGET_BASE_ARCH=openrisc ;; ppc) gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_compiler=$cross_cc_powerpc ;; ppcemb) TARGET_BASE_ARCH=ppc TARGET_ABI_DIR=ppc gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" + target_compiler=$cross_cc_ppcemb ;; ppc64) TARGET_BASE_ARCH=ppc TARGET_ABI_DIR=ppc mttcg=yes gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" + target_compiler=$cross_cc_ppc64 ;; ppc64le) TARGET_ARCH=ppc64 @@ -6871,6 +6908,7 @@ case "$target_name" in TARGET_ABI_DIR=ppc mttcg=yes gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" + target_compiler=$cross_cc_ppc64le ;; ppc64abi32) TARGET_ARCH=ppc64 @@ -6878,45 +6916,57 @@ case "$target_name" in TARGET_ABI_DIR=ppc echo "TARGET_ABI32=y" >> $config_target_mak gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" + target_compiler=$cross_cc_ppc64abi32 ;; riscv32) TARGET_BASE_ARCH=riscv TARGET_ABI_DIR=riscv mttcg=yes + target_compiler=$cross_cc_riscv32 ;; riscv64) TARGET_BASE_ARCH=riscv TARGET_ABI_DIR=riscv mttcg=yes + target_compiler=$cross_cc_riscv64 ;; sh4|sh4eb) TARGET_ARCH=sh4 bflt="yes" + target_compiler=$cross_cc_sh4 ;; sparc) + target_compiler=$cross_cc_sparc ;; sparc64) TARGET_BASE_ARCH=sparc + target_compiler=$cross_cc_sparc64 ;; sparc32plus) TARGET_ARCH=sparc64 TARGET_BASE_ARCH=sparc TARGET_ABI_DIR=sparc + target_compiler=$cross_cc_sparc32plus echo "TARGET_ABI32=y" >> $config_target_mak ;; s390x) mttcg=yes gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" + target_compiler=$cross_cc_s390x ;; tilegx) + target_compiler=$cross_cc_tilegx ;; tricore) + target_compiler=$cross_cc_tricore ;; unicore32) + target_compiler=$cross_cc_unicore32 ;; xtensa|xtensaeb) TARGET_ARCH=xtensa mttcg="yes" + target_compiler=$cross_cc_xtensa ;; *) error_exit "Unsupported target CPU" @@ -6927,6 +6977,25 @@ if [ "$TARGET_BASE_ARCH" = "" ]; then TARGET_BASE_ARCH=$TARGET_ARCH fi +# Do we have a cross compiler for this target? +if has $target_compiler; then + + cat > $TMPC << EOF +#include <stdio.h> +int main(void) { + printf("Hello World!\n"); +} +EOF + + if ! do_compiler $target_compiler -o $TMPE $TMPC -static ; then + target_compiler="" + else + enabled_cross_compilers="${enabled_cross_compilers} ${target_compiler}" + fi +else + target_compiler="" +fi + symlink "$source_path/Makefile.target" "$target_dir/Makefile" upper() { @@ -7000,6 +7069,10 @@ if test "$target_bsd_user" = "yes" ; then echo "CONFIG_BSD_USER=y" >> $config_target_mak fi +if test -n "$target_compiler"; then + echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak +fi + # generate QEMU_CFLAGS/LDFLAGS for targets cflags="" @@ -7122,6 +7195,12 @@ echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak done # for target in $targets +if test -n "$enabled_cross_compilers"; then + echo + echo "NOTE: cross-compilers enabled:" + printf '%s\n' $enabled_cross_compilers | sort -u +fi + if [ "$dtc_internal" = "yes" ]; then echo "config-host.h: subdir-dtc" >> $config_host_mak fi
This allows us to specify cross compilers for our guests. This is useful for building test images/programs. Currently we re-run the compile test for each target. I couldn't think of a way to cache the value for a given arch without getting messier configure code. The cross compiler for the guest is visible to each target as CROSS_CC_GUEST in config-target.mak. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> --- v3 - --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit... - --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} - add remaining target_compiler definitions --- configure | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) -- 2.17.0