mirror of https://gitee.com/openkylin/qemu.git
Support using a different compiler for Objective-C files
MacOSX 10.8 ("Mountain Lion") requires us to compile our one Objective-C source file with clang even if the rest of QEMU requires a real gcc, because the system headers we use make use of Apple's "Blocks" extension to C/ObjC, and mainline gcc doesn't support that. Since we only need to use a true gcc for the parts of QEMU that use the fixed-register env variable, we can simply use clang to build the ObjC file: it will link to the gcc-built objects with no problems. Add the necessary support for an OBJCC variable in the makefile and configure machinery; we default to clang if we have it, otherwise whatever CC is (since gcc might be the Apple gcc which does support Blocks). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
a0b7cf6b6e
commit
3c4a4d0dcb
|
@ -543,6 +543,13 @@ fi
|
||||||
: ${python=${PYTHON-python}}
|
: ${python=${PYTHON-python}}
|
||||||
: ${smbd=${SMBD-/usr/sbin/smbd}}
|
: ${smbd=${SMBD-/usr/sbin/smbd}}
|
||||||
|
|
||||||
|
# Default objcc to clang if available, otherwise use CC
|
||||||
|
if has clang; then
|
||||||
|
objcc=clang
|
||||||
|
else
|
||||||
|
objcc="$cc"
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$mingw32" = "yes" ; then
|
if test "$mingw32" = "yes" ; then
|
||||||
EXESUF=".exe"
|
EXESUF=".exe"
|
||||||
QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
|
QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
|
||||||
|
@ -586,6 +593,8 @@ for opt do
|
||||||
;;
|
;;
|
||||||
--host-cc=*) host_cc="$optarg"
|
--host-cc=*) host_cc="$optarg"
|
||||||
;;
|
;;
|
||||||
|
--objcc=*) objcc="$optarg"
|
||||||
|
;;
|
||||||
--make=*) make="$optarg"
|
--make=*) make="$optarg"
|
||||||
;;
|
;;
|
||||||
--install=*) install="$optarg"
|
--install=*) install="$optarg"
|
||||||
|
@ -1028,6 +1037,7 @@ echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]"
|
||||||
echo " --cc=CC use C compiler CC [$cc]"
|
echo " --cc=CC use C compiler CC [$cc]"
|
||||||
echo " --host-cc=CC use C compiler CC [$host_cc] for code run at"
|
echo " --host-cc=CC use C compiler CC [$host_cc] for code run at"
|
||||||
echo " build time"
|
echo " build time"
|
||||||
|
echo " --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]"
|
||||||
echo " --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS"
|
echo " --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS"
|
||||||
echo " --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS"
|
echo " --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS"
|
||||||
echo " --make=MAKE use specified make [$make]"
|
echo " --make=MAKE use specified make [$make]"
|
||||||
|
@ -3058,6 +3068,7 @@ fi
|
||||||
echo "Source path $source_path"
|
echo "Source path $source_path"
|
||||||
echo "C compiler $cc"
|
echo "C compiler $cc"
|
||||||
echo "Host C compiler $host_cc"
|
echo "Host C compiler $host_cc"
|
||||||
|
echo "Objective-C compiler $objcc"
|
||||||
echo "CFLAGS $CFLAGS"
|
echo "CFLAGS $CFLAGS"
|
||||||
echo "QEMU_CFLAGS $QEMU_CFLAGS"
|
echo "QEMU_CFLAGS $QEMU_CFLAGS"
|
||||||
echo "LDFLAGS $LDFLAGS"
|
echo "LDFLAGS $LDFLAGS"
|
||||||
|
@ -3521,6 +3532,7 @@ echo "PYTHON=$python" >> $config_host_mak
|
||||||
echo "CC=$cc" >> $config_host_mak
|
echo "CC=$cc" >> $config_host_mak
|
||||||
echo "CC_I386=$cc_i386" >> $config_host_mak
|
echo "CC_I386=$cc_i386" >> $config_host_mak
|
||||||
echo "HOST_CC=$host_cc" >> $config_host_mak
|
echo "HOST_CC=$host_cc" >> $config_host_mak
|
||||||
|
echo "OBJCC=$objcc" >> $config_host_mak
|
||||||
echo "AR=$ar" >> $config_host_mak
|
echo "AR=$ar" >> $config_host_mak
|
||||||
echo "OBJCOPY=$objcopy" >> $config_host_mak
|
echo "OBJCOPY=$objcopy" >> $config_host_mak
|
||||||
echo "LD=$ld" >> $config_host_mak
|
echo "LD=$ld" >> $config_host_mak
|
||||||
|
|
|
@ -29,7 +29,7 @@ endif
|
||||||
$(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," AS $(TARGET_DIR)$@")
|
$(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," AS $(TARGET_DIR)$@")
|
||||||
|
|
||||||
%.o: %.m
|
%.o: %.m
|
||||||
$(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," OBJC $(TARGET_DIR)$@")
|
$(call quiet-command,$(OBJCC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," OBJC $(TARGET_DIR)$@")
|
||||||
|
|
||||||
LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@")
|
LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue