diff --git a/Makefile b/Makefile index 23045eb..9ca5149 100644 --- a/Makefile +++ b/Makefile @@ -35,16 +35,10 @@ endif ifeq ($(ARCH),i386) NATIVE_DEFINES=-DTCC_TARGET_I386 -NATIVE_DEFINES+=\ - $(if $(wildcard /lib/i386-linux-gnu),-DCONFIG_MULTIARCHDIR=\"i386-linux-gnu\",\ - $(if $(wildcard /lib/i386-kfreebsd-gnu),-DCONFIG_MULTIARCHDIR=\"i386-kfreebsd-gnu\",\ - $(if $(wildcard /lib/i386-gnu),-DCONFIG_MULTIARCHDIR=\"i386-gnu\"))) else ifeq ($(ARCH),x86-64) NATIVE_DEFINES=-DTCC_TARGET_X86_64 NATIVE_DEFINES+=\ - $(if $(wildcard /usr/lib64),-DCONFIG_LDDIR=\"lib64\",\ - $(if $(wildcard /lib/x86_64-linux-gnu),-DCONFIG_MULTIARCHDIR=\"x86_64-linux-gnu\",\ - $(if $(wildcard /lib/x86_64-kfreebsd-gnu),-DCONFIG_MULTIARCHDIR=\"x86_64-kfreebsd-gnu\"))) + $(if $(wildcard /usr/lib64),-DCONFIG_LDDIR=\"lib64\") endif ifeq ($(ARCH),arm) @@ -52,10 +46,8 @@ NATIVE_DEFINES=-DTCC_TARGET_ARM NATIVE_DEFINES+=-DWITHOUT_LIBTCC ifneq (,$(wildcard /lib/ld-linux-armhf.so.3 /lib/arm-linux-gnueabihf/ld-linux.so.3)) NATIVE_DEFINES+=-DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT -NATIVE_DEFINES+=$(if $(wildcard /lib/arm-linux-gnueabihf),-DCONFIG_MULTIARCHDIR=\"arm-linux-gnueabihf\") else ifneq (,$(wildcard /lib/ld-linux.so.3)) NATIVE_DEFINES+=-DTCC_ARM_EABI -NATIVE_DEFINES+=$(if $(wildcard /lib/arm-linux-gnueabi), -DCONFIG_MULTIARCHDIR=\"arm-linux-gnueabi\") endif NATIVE_DEFINES+=$(if $(shell grep -l "^Features.* \(vfp\|iwmmxt\) " /proc/cpuinfo),-DTCC_ARM_VFP) endif diff --git a/configure b/configure index f8619a3..eca801e 100755 --- a/configure +++ b/configure @@ -260,6 +260,15 @@ if $cc -o $TMPO $TMPC 2> /dev/null ; then gcc_major="4" fi +# check if system is multiarch +if test -z "$cross_prefix" -a -z "$tcc_crtprefix" ; then + if test ! -f $sysroot/usr/lib/crti.o -a ! -f $sysroot/usr/lib64/crti.o ; then + use_multiarch="yes" + elif test -L $sysroot/usr/lib/crti.o -o -L $sysroot/usr/lib64/crti.o ; then + use_multiarch="yes" + fi +fi + if test x"$show_help" = "xyes" ; then cat << EOF Usage: configure [options] @@ -491,6 +500,9 @@ if test "$have_selinux" = "yes" ; then echo "#define HAVE_SELINUX" >> $TMPH echo "HAVE_SELINUX=yes" >> config.mak fi +if test "$use_multiarch" = "yes" ; then + echo "#define CONFIG_TCC_MULTIARCH" >> $TMPH +fi version=`head $source_path/VERSION` echo "VERSION=$version" >>config.mak diff --git a/tcc.h b/tcc.h index 885951c..bf5a818 100644 --- a/tcc.h +++ b/tcc.h @@ -167,6 +167,34 @@ # define CONFIG_SYSROOT "" #endif +#if defined(CONFIG_TCC_MULTIARCH) && defined(TCC_IS_NATIVE) +/* Define architecture */ +# if defined(TCC_TARGET_I386) +# define TRIPLET_ARCH "i386" +# elif defined(TCC_TARGET_X86_64) +# define TRIPLET_ARCH "x86_64" +# elif defined(TCC_TARGET_ARM) +# define TRIPLET_ARCH "arm" +# else +# define TRIPLET_ARCH "unknown" +# endif +/* Define OS */ +# if defined (__linux__) +# define TRIPLET_OS "linux" +# elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) +# define TRIPLET_OS "kfreebsd" +# elif !defined (__GNU__) +# define TRIPLET_OS "unknown" +# endif +/* Define calling convention and ABI */ +# define TRIPLET_ABI "gnu" +# ifdef __GNU__ +# define CONFIG_MULTIARCHDIR TRIPLET_ARCH "-" TRIPLET_ABI +# else +# define CONFIG_MULTIARCHDIR TRIPLET_ARCH "-" TRIPLET_OS "-" TRIPLET_ABI +# endif +#endif + #ifndef CONFIG_LDDIR # ifdef CONFIG_MULTIARCHDIR # define CONFIG_LDDIR "lib/" CONFIG_MULTIARCHDIR