AW: Enabling multilib still does not allow us to have soft and hard float

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Fairy,

Just have a look at https://gcc.gnu.org/install/configure.html. The interesting options are:

-- disable-multilib
...
	arm-*-*
		fpu, 26bit, underscore, interwork, biendian, nofmult.

Thus, it looks like for arm, soft float is _not_ part of a standard multilib build.

--with-multilib-list=list
...
	arm*-*-*
		list is a comma separated list of aprofile and rmprofile to build multilibs ...

You may most likely want to explicitly use rmprofile to support both hard and soft float.

While you should be fine with this if you just need a bare-metal compiler, things start to get messy if you need to build for a specific OS, e.g. for Linux: The only multilib build I had success with was an x86  multilib build for a glibc based Linux with --with-multilib-list=m64, m32, mx32. For arm though, even Linaro does not seem to offer multilib builds fot Linux supporting any combination of hard and soft float, which took me to the conclusion that this may still not work.

Cheers,

Chris


-----Ursprüngliche Nachricht-----
Von: gcc-help-owner@xxxxxxxxxxx [mailto:gcc-help-owner@xxxxxxxxxxx] Im Auftrag von Farzaneh Shalbaf
Gesendet: Dienstag, 3. Oktober 2017 06:47
An: gcc-help@xxxxxxxxxxx
Betreff: Enabling multilib still does not allow us to have soft and hard float

Dear All,


I am trying to compile gcc.7.2 with option "--enable-multilib", so I can support both hard and soft float (email is followed by the codes). However, after finishing, using the command "-print-multi-lib" only the default (which is hard) is recognized. Consequently, when I compile  my helloworld program with "--with-float=soft", I will face to "ARM compilation error, VFP registered used by executable, not object file"


So, any ideas where I am going wrong?

Your help is greatly appreciated.


Best

Fairy



PREFIX=/opt/combinedToolChain
SYSROOT=${PREFIX}/sysroot

BUILD=/home/farzaneh/GCC7_2
KERNEL_SRC=/home/farzaneh/linux-4.13.4
export PATH=${PREFIX}/bin:$PATH

rm -Rf ${PREFIX}/*
mkdir -p ${PREFIX}
mkdir -p ${SYSROOT}

cd ${KERNEL_SRC}
make ARCH=arm INSTALL_HDR_PATH=${SYSROOT} headers_install && find ${SYSROOT}/include \( -name .install -o -name ..install.cmd \) -delete
cd ${BUILD}

mkdir -p binutils-build
cd binutils-build
rm -Rf *
# binutils is impossible to compile with --enable-shared and install in --prefix different from what it was compiled as path to shared libraries is hardcoded and absolute
# so we are using PREFIX that results in incorrect search dir like SEARCH_DIR("=/opt/g7/arm-linux-gnueabi/lib"); that will be ignored
sh ../binutils-2.28/configure --target=arm-linux-gnueabi --with-sysroot=${SYSROOT} --prefix=${PREFIX} --enable-threads=posix --disable-shared --disable-nls --enable-multilib --with-multilib-list=aprofile --enable-tls >> binutils.log
make -s -j8 >> binutils.log
make -s install >> binutils.log
cd ..

mkdir -p gcc-build
cd gcc-build
rm -Rf *

../gcc-7.2.0/configure --target=arm-linux-gnueabi --enable-languages=c,c++ --with-sysroot=${SYSROOT} --prefix=${PREFIX} --exec-prefix=${PREFIX} --libexecdir=${PREFIX}/lib --with-native-system-header-dir=/include --enable-shared --enable-threads=posix --disable-nls --enable-multilib --disable-bootstrap --enable-libstdcxx-time=yes --enable-__cxa_atexit --with-fpu=neon --with-float=hard --with-abi=aapcs-linux  --with-cpu=cortex-a9 --enable-tls --with-system-zlib >> gcc.log


make -j8 all-gcc >> gcc.log
make -s install-gcc >> gcc.log
cd ..

mkdir -p glibc-build
cd glibc-build
rm -Rf *
sh ../glibc-2.26/configure --with-sysroot=${SYSROOT} --prefix=/ --libexecdir=/lib --host=arm-linux-gnueabi --target=arm-linux-gnueabi --with-headers=${SYSROOT}/include --enable-shared --enable-tls --enable-libstdcxx-time=yes --enable-__cxa_atexit  --enable-multilib --with-multilib-list=aprofile libc_cv_forced_unwind=yes  >> glibc.log
make install-bootstrap-headers=yes install_root=${SYSROOT} install-headers >> glibc.log
# and startup files
make -s -j8 csu/subdir_lib >> glibc.log
mkdir -p ${SYSROOT}/lib
install csu/crt1.o csu/crti.o csu/crtn.o ${SYSROOT}/lib >> glibc.log
#install dummy libc.so and stubs.h that are replaced later
arm-linux-gnueabi-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o ${SYSROOT}/lib/libc.so >> glibc.log
touch ${SYSROOT}/include/gnu/stubs.h
cd ..


# make and install libgcc
cd gcc-build
make -s -j8 all-target-libgcc >> gcc.log
make -s install-target-libgcc >> gcc.log
cd ..

#make and install glibc
cd glibc-build
make -s -j8 >> glibc.log
make -s install_root=${SYSROOT} install >> glibc.log
cd ..

# finally make and install libstdc++ and headers
cd gcc-build
make -s -j8 >> gcc.log
make -s install >> gcc.log
cd ..









[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux