Allow to use libgcc instead of libtcc1
This patch adds a switch --with-libgcc to configure. When passed it prevents libtcc1.a from being built and links to /lib/libgcc_s.so.1 instead of PREFIX/lib/tcc/libtcc1.a. It will work on ARM when using libgcc from GCC >= 4.2.0. Prior versions don't have the __floatun[sd]i[sdx]f functions. It won't work on i386 because of two missing symbols emitted when floats are cast to integers, but users can provide those symbols (global short constants) in their code if needed. Daniel
This commit is contained in:
parent
256f6e6200
commit
15e0dc08a6
3 changed files with 28 additions and 4 deletions
17
Makefile
17
Makefile
|
@ -51,11 +51,17 @@ PROGS+=c67-tcc$(EXESUF) i386-win32-tcc$(EXESUF)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_USE_LIBGCC
|
||||||
|
LIBTCC1=
|
||||||
|
else
|
||||||
|
LIBTCC1=libtcc1.a
|
||||||
|
endif
|
||||||
|
|
||||||
# run local version of tcc with local libraries and includes
|
# run local version of tcc with local libraries and includes
|
||||||
TCC=./tcc -B. -I.
|
TCC=./tcc -B. -I.
|
||||||
|
|
||||||
all: $(PROGS) \
|
all: $(PROGS) \
|
||||||
libtcc1.a $(BCHECK_O) tcc-doc.html tcc.1 libtcc.a \
|
$(LIBTCC1) $(BCHECK_O) tcc-doc.html tcc.1 libtcc.a \
|
||||||
libtcc_test$(EXESUF)
|
libtcc_test$(EXESUF)
|
||||||
|
|
||||||
Makefile: config.mak
|
Makefile: config.mak
|
||||||
|
@ -214,7 +220,7 @@ bcheck.o: bcheck.c
|
||||||
|
|
||||||
install: tcc_install libinstall
|
install: tcc_install libinstall
|
||||||
|
|
||||||
tcc_install: $(PROGS) tcc.1 libtcc1.a $(BCHECK_O) tcc-doc.html
|
tcc_install: $(PROGS) tcc.1 $(LIBTCC1) $(BCHECK_O) tcc-doc.html
|
||||||
mkdir -p "$(DESTDIR)$(bindir)"
|
mkdir -p "$(DESTDIR)$(bindir)"
|
||||||
$(INSTALL) -s -m755 $(PROGS) "$(DESTDIR)$(bindir)"
|
$(INSTALL) -s -m755 $(PROGS) "$(DESTDIR)$(bindir)"
|
||||||
ifndef CONFIG_WIN32
|
ifndef CONFIG_WIN32
|
||||||
|
@ -225,11 +231,14 @@ endif
|
||||||
mkdir -p "$(DESTDIR)$(tccdir)/include"
|
mkdir -p "$(DESTDIR)$(tccdir)/include"
|
||||||
ifdef CONFIG_WIN32
|
ifdef CONFIG_WIN32
|
||||||
mkdir -p "$(DESTDIR)$(tccdir)/lib"
|
mkdir -p "$(DESTDIR)$(tccdir)/lib"
|
||||||
$(INSTALL) -m644 libtcc1.a win32/lib/*.def "$(DESTDIR)$(tccdir)/lib"
|
$(INSTALL) -m644 $(LIBTCC1) win32/lib/*.def "$(DESTDIR)$(tccdir)/lib"
|
||||||
cp -r win32/include/. "$(DESTDIR)$(tccdir)/include"
|
cp -r win32/include/. "$(DESTDIR)$(tccdir)/include"
|
||||||
cp -r win32/examples/. "$(DESTDIR)$(tccdir)/examples"
|
cp -r win32/examples/. "$(DESTDIR)$(tccdir)/examples"
|
||||||
else
|
else
|
||||||
$(INSTALL) -m644 libtcc1.a $(BCHECK_O) "$(DESTDIR)$(tccdir)"
|
ifndef CONFIG_USE_LIBGCC
|
||||||
|
$(INSTALL) -m644 libtcc1.a "$(DESTDIR)$(tccdir)"
|
||||||
|
endif
|
||||||
|
$(INSTALL) -m644 $(BCHECK_O) "$(DESTDIR)$(tccdir)"
|
||||||
$(INSTALL) -m644 stdarg.h stddef.h stdbool.h float.h varargs.h \
|
$(INSTALL) -m644 stdarg.h stddef.h stdbool.h float.h varargs.h \
|
||||||
tcclib.h "$(DESTDIR)$(tccdir)/include"
|
tcclib.h "$(DESTDIR)$(tccdir)/include"
|
||||||
endif
|
endif
|
||||||
|
|
9
configure
vendored
9
configure
vendored
|
@ -19,6 +19,7 @@ TMPH="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.h"
|
||||||
|
|
||||||
# default parameters
|
# default parameters
|
||||||
build_cross="no"
|
build_cross="no"
|
||||||
|
use_libgcc="no"
|
||||||
prefix=""
|
prefix=""
|
||||||
execprefix=""
|
execprefix=""
|
||||||
bindir=""
|
bindir=""
|
||||||
|
@ -127,6 +128,8 @@ for opt do
|
||||||
;;
|
;;
|
||||||
--enable-cross) build_cross="yes"
|
--enable-cross) build_cross="yes"
|
||||||
;;
|
;;
|
||||||
|
--with-libgcc) use_libgcc="yes"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -224,6 +227,7 @@ echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]"
|
||||||
echo " --sysroot=PREFIX prepend PREFIX to library/include paths []"
|
echo " --sysroot=PREFIX prepend PREFIX to library/include paths []"
|
||||||
echo " --cc=CC use C compiler CC [$cc]"
|
echo " --cc=CC use C compiler CC [$cc]"
|
||||||
echo " --make=MAKE use specified make [$make]"
|
echo " --make=MAKE use specified make [$make]"
|
||||||
|
echo " --with-libgcc use /lib/libgcc_s.so.1 instead of libtcc1.a"
|
||||||
echo ""
|
echo ""
|
||||||
#echo "NOTE: The object files are build at the place where configure is launched"
|
#echo "NOTE: The object files are build at the place where configure is launched"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -279,6 +283,7 @@ echo "CPU $cpu"
|
||||||
echo "Big Endian $bigendian"
|
echo "Big Endian $bigendian"
|
||||||
echo "gprof enabled $gprof"
|
echo "gprof enabled $gprof"
|
||||||
echo "cross compilers $build_cross"
|
echo "cross compilers $build_cross"
|
||||||
|
echo "use libgcc $use_libgcc"
|
||||||
|
|
||||||
echo "Creating config.mak and config.h"
|
echo "Creating config.mak and config.h"
|
||||||
|
|
||||||
|
@ -345,6 +350,10 @@ fi
|
||||||
if test "$build_cross" = "yes" ; then
|
if test "$build_cross" = "yes" ; then
|
||||||
echo "CONFIG_CROSS=yes" >> config.mak
|
echo "CONFIG_CROSS=yes" >> config.mak
|
||||||
fi
|
fi
|
||||||
|
if test "$use_libgcc" = "yes" ; then
|
||||||
|
echo "#define CONFIG_USE_LIBGCC" >> $TMPH
|
||||||
|
echo "CONFIG_USE_LIBGCC=yes" >> config.mak
|
||||||
|
fi
|
||||||
version=`head $source_path/VERSION`
|
version=`head $source_path/VERSION`
|
||||||
echo "VERSION=$version" >>config.mak
|
echo "VERSION=$version" >>config.mak
|
||||||
echo "#define TCC_VERSION \"$version\"" >> $TMPH
|
echo "#define TCC_VERSION \"$version\"" >> $TMPH
|
||||||
|
|
6
tccelf.c
6
tccelf.c
|
@ -992,7 +992,9 @@ static void add_init_array_defines(TCCState *s1, const char *section_name)
|
||||||
/* add tcc runtime libraries */
|
/* add tcc runtime libraries */
|
||||||
static void tcc_add_runtime(TCCState *s1)
|
static void tcc_add_runtime(TCCState *s1)
|
||||||
{
|
{
|
||||||
|
#if defined(CONFIG_TCC_BCHECK) || !defined(CONFIG_USE_LIBGCC)
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_TCC_BCHECK
|
#ifdef CONFIG_TCC_BCHECK
|
||||||
if (do_bounds_check) {
|
if (do_bounds_check) {
|
||||||
|
@ -1028,8 +1030,12 @@ static void tcc_add_runtime(TCCState *s1)
|
||||||
if (!s1->nostdlib) {
|
if (!s1->nostdlib) {
|
||||||
tcc_add_library(s1, "c");
|
tcc_add_library(s1, "c");
|
||||||
|
|
||||||
|
#ifdef CONFIG_USE_LIBGCC
|
||||||
|
tcc_add_file(s1, CONFIG_SYSROOT "/lib/libgcc_s.so.1");
|
||||||
|
#else
|
||||||
snprintf(buf, sizeof(buf), "%s/%s", tcc_lib_path, "libtcc1.a");
|
snprintf(buf, sizeof(buf), "%s/%s", tcc_lib_path, "libtcc1.a");
|
||||||
tcc_add_file(s1, buf);
|
tcc_add_file(s1, buf);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
/* add crt end if not memory output */
|
/* add crt end if not memory output */
|
||||||
if (s1->output_type != TCC_OUTPUT_MEMORY && !s1->nostdlib) {
|
if (s1->output_type != TCC_OUTPUT_MEMORY && !s1->nostdlib) {
|
||||||
|
|
Loading…
Reference in a new issue