aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile17
-rwxr-xr-xconfigure9
-rw-r--r--tccelf.c6
3 files changed, 28 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index 3ccebe3..1e6adad 100644
--- a/Makefile
+++ b/Makefile
@@ -51,11 +51,17 @@ PROGS+=c67-tcc$(EXESUF) i386-win32-tcc$(EXESUF)
endif
endif
+ifdef CONFIG_USE_LIBGCC
+LIBTCC1=
+else
+LIBTCC1=libtcc1.a
+endif
+
# run local version of tcc with local libraries and includes
TCC=./tcc -B. -I.
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)
Makefile: config.mak
@@ -214,7 +220,7 @@ bcheck.o: bcheck.c
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)"
$(INSTALL) -s -m755 $(PROGS) "$(DESTDIR)$(bindir)"
ifndef CONFIG_WIN32
@@ -225,11 +231,14 @@ endif
mkdir -p "$(DESTDIR)$(tccdir)/include"
ifdef CONFIG_WIN32
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/examples/. "$(DESTDIR)$(tccdir)/examples"
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 \
tcclib.h "$(DESTDIR)$(tccdir)/include"
endif
diff --git a/configure b/configure
index 8517485..63328cc 100755
--- a/configure
+++ b/configure
@@ -19,6 +19,7 @@ TMPH="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.h"
# default parameters
build_cross="no"
+use_libgcc="no"
prefix=""
execprefix=""
bindir=""
@@ -127,6 +128,8 @@ for opt do
;;
--enable-cross) build_cross="yes"
;;
+ --with-libgcc) use_libgcc="yes"
+ ;;
esac
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 " --cc=CC use C compiler CC [$cc]"
echo " --make=MAKE use specified make [$make]"
+echo " --with-libgcc use /lib/libgcc_s.so.1 instead of libtcc1.a"
echo ""
#echo "NOTE: The object files are build at the place where configure is launched"
exit 1
@@ -279,6 +283,7 @@ echo "CPU $cpu"
echo "Big Endian $bigendian"
echo "gprof enabled $gprof"
echo "cross compilers $build_cross"
+echo "use libgcc $use_libgcc"
echo "Creating config.mak and config.h"
@@ -345,6 +350,10 @@ fi
if test "$build_cross" = "yes" ; then
echo "CONFIG_CROSS=yes" >> config.mak
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`
echo "VERSION=$version" >>config.mak
echo "#define TCC_VERSION \"$version\"" >> $TMPH
diff --git a/tccelf.c b/tccelf.c
index 7de8a48..aa2df9b 100644
--- a/tccelf.c
+++ b/tccelf.c
@@ -992,7 +992,9 @@ static void add_init_array_defines(TCCState *s1, const char *section_name)
/* add tcc runtime libraries */
static void tcc_add_runtime(TCCState *s1)
{
+#if defined(CONFIG_TCC_BCHECK) || !defined(CONFIG_USE_LIBGCC)
char buf[1024];
+#endif
#ifdef CONFIG_TCC_BCHECK
if (do_bounds_check) {
@@ -1028,8 +1030,12 @@ static void tcc_add_runtime(TCCState *s1)
if (!s1->nostdlib) {
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");
tcc_add_file(s1, buf);
+#endif
}
/* add crt end if not memory output */
if (s1->output_type != TCC_OUTPUT_MEMORY && !s1->nostdlib) {