update cctools to 862 and ld64 to 241.9

port changes:
- misc fixes
- add '-L/usr/pkg/lib' for NetBSD
- update libobjc2 to r37977
- silence / fix libobjc2 warnings
- remove freebsd ifdef in favor of '-isystem /usr/local'
- add installhdrs target (cctools-port/issues/2)
- prefer glibtoolize over libtoolize
- add support for OS X and iOS as host system (cctools-port/issues/1)
- add a workaround for a glibc 2.20 bug
- link with -rpath to ease finding libLTO
- check for __cxa_demangle in -lstdc++
- use std=c++0x instead of -std=gnu++0x
- fix ld64 to compile with libstdc++
- fix automake warnings
- ld64: enable all architectures

This also gets rid of the automake dependency.
This commit is contained in:
Thomas Pöchtrager 2014-11-21 23:06:01 +01:00
parent 746a6a42dd
commit e5d9db7ed0
15 changed files with 41 additions and 266 deletions

View File

@ -1,7 +1,14 @@
/******************************* v0.9 *******************************/
changed:
* updated cctools to 862
* updated ld64 to 241.9
/******************************* v0.8 *******************************/
changed:
* updated cctools to 855 with ld64-236.3 (Xcode 5.1)
* updated cctools to 855
* updated ld64 to 236.3
* gcc 4.9.0 -> gcc 4.9.2
added:

View File

@ -24,8 +24,8 @@ Move your packaged SDK to the tarballs/ directory.
Then ensure you have the following installed on your Linux/BSD box:
`Clang 3.2+`, `llvm-devel`, `automake`, `autogen`, `libtool`, `patch`,
`libxml2-devel` (<=10.5 only), `uuid-devel`, `openssl-devel` and the `bash shell`.
`Clang 3.2+`, `llvm-devel`, `patch`, `libxml2-devel` (<=10.5 only),
`uuid-devel`, `openssl-devel` and the `bash shell`.
\--
You can run 'sudo tools/get\_dependencies.sh' to get these automatically.

View File

@ -77,7 +77,7 @@ if [ -z "$OSX_VERSION_MIN" ]; then
fi
# Don't change this
OSXCROSS_VERSION=0.8
OSXCROSS_VERSION=0.9
TARBALL_DIR=$BASE_DIR/tarballs
BUILD_DIR=$BASE_DIR/build
@ -129,12 +129,6 @@ require sed
require gunzip
require cpio
if [ "$PLATFORM" != "Darwin" ]; then
require autogen
require automake
require libtool
fi
pushd $BUILD_DIR &>/dev/null
function remove_locks()
@ -145,21 +139,29 @@ function remove_locks()
source $BASE_DIR/tools/trap_exit.sh
# CCTOOLS
if [ "$PLATFORM" != "Darwin" ]; then
if [ "$PLATFORM" == "Darwin" ]; then
PREVCXX=$CXX
CXX+=" -stdlib=libc++"
fi
res=`check_cxx_stdlib`
if [ "$PLATFORM" == "Darwin" ]; then
CXX=$PREVCXX
unset PREVCXX
fi
if [ $res -ne 0 ]; then
echo "Your C++ standard library is either broken or too old to build ld64-236.3"
echo "Your C++ standard library is either broken or too old to build ld64-241.9"
echo "Building ld64-134.9 instead"
echo ""
sleep 3
LINKER_VERSION=134.9
else
LINKER_VERSION=236.3
LINKER_VERSION=241.9
fi
CCTOOLS="cctools-855-ld64-$LINKER_VERSION"
CCTOOLS="cctools-862-ld64-$LINKER_VERSION"
CCTOOLS_TARBALL=`ls $TARBALL_DIR/$CCTOOLS*.tar.* | head -n1`
CCTOOLS_REVHASH=`echo "$CCTOOLS_TARBALL" head -n1 | tr '_' ' ' | tr '.' ' ' | awk '{print $3}'`
@ -172,27 +174,14 @@ extract $CCTOOLS_TARBALL 1
pushd cctools*/cctools &>/dev/null
pushd .. &>/dev/null
if [ $LINKER_VERSION != "134.9" ]; then
# fix compiling ld64 with libc++
patch -p0 < $PATCH_DIR/cctools-e3cbeaf.patch
# check for __cxa_demangle in -lstdc++
patch -p0 < $PATCH_DIR/cctools-499e470.patch
else
# __cxa_demangle + 3.5 build fix
patch -p0 < $PATCH_DIR/cctools-a78597e.patch
fi
if [ "$PLATFORM" == "Linux" ]; then
patch -p0 < $PATCH_DIR/cctools-old-linux.patch
fi
# fix LD_LIBRARY_PATH
patch -p0 < $PATCH_DIR/cctools-f7a5930.patch
patch -p0 < $PATCH_DIR/cctools-cdefs.patch
./tools/fix_unistd_issue.sh 1>/dev/null
popd &>/dev/null
patch -p0 < $PATCH_DIR/cctools-ld64-1.patch
patch -p0 < $PATCH_DIR/cctools-ld64-2.patch
echo ""
./autogen.sh
./configure --prefix=$TARGET_DIR --target=x86_64-apple-$TARGET
CONFFLAGS="--prefix=$TARGET_DIR --target=x86_64-apple-$TARGET"
[ -n "$DISABLE_LTO_SUPPORT" ] && CONFFLAGS+=" --enable-lto=no"
./configure $CONFFLAGS
$MAKE -j$JOBS
$MAKE install -j$JOBS
popd &>/dev/null
@ -210,10 +199,6 @@ for CCTOOL in ${CCTOOLS[@]}; do
done
popd &>/dev/null
fi
else
# Darwin
LINKER_VERSION="`get_ld_version`"
fi
# CCTOOLS END
@ -242,7 +227,6 @@ fi
fi
# XAR END
if [ "$PLATFORM" != "Darwin" ]; then
if [ ! -f "have_cctools_$TARGET" ]; then
function check_cctools()
@ -263,7 +247,6 @@ touch "have_cctools_${CCTOOLS_REVHASH}_$TARGET"
echo ""
fi # HAVE_CCTOOLS
fi
set +e
ls $TARBALL_DIR/MacOSX$SDK_VERSION* &>/dev/null
@ -316,8 +299,10 @@ export OSXCROSS_LINKER_VERSION=$LINKER_VERSION
if [ "$PLATFORM" != "Darwin" ]; then
# libLTO.so
export OSXCROSS_LIBLTO_PATH=`cat $BUILD_DIR/cctools*/cctools/tmp/ldpath 2>/dev/null`
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OSXCROSS_LIBLTO_PATH"
set +e
eval `cat $BUILD_DIR/cctools*/cctools/config.log | grep LLVM_LIB_DIR | head -n1`
set -e
export OSXCROSS_LIBLTO_PATH=$LLVM_LIB_DIR
fi
$BASE_DIR/wrapper/build.sh 1>/dev/null

View File

@ -1,26 +0,0 @@
commit 499e470904eaa976755de9caca2b98b92f0efcd9
Author: Thomas Pöchtrager <t.poechtrager@gmail.com>
Date: Fri Jun 20 10:25:39 2014 +0200
check for __cxa_demangle in -lstdc++
diff --git cctools/configure.ac cctools/configure.ac
index 3411e34..4ac2d69 100644
--- cctools/configure.ac
+++ cctools/configure.ac
@@ -254,10 +254,12 @@ AC_SUBST(UUID_LIBS)
AC_CHECK_LIB([crypto],[MD5_Init],[CRYPT_LIBS=-lcrypto])
AC_SUBST(CRYPT_LIBS)
-AC_CHECK_LIB([supc++],[__cxa_demangle],[CXXABI_LIB=-lsupc++])
-AC_SUBST(CXXABI_LIB)
+AC_CHECK_LIB([c++abi],[__cxa_demangle],[CXXABI_LIB=-lc++abi],[
+ AC_CHECK_LIB([supc++],[__cxa_demangle],[CXXABI_LIB=-lsupc++],[
+ AC_CHECK_LIB([stdc++],[__cxa_demangle],[CXXABI_LIB=-lstdc++],[exit 1])
+ ])
+])
-AC_CHECK_LIB([c++abi],[__cxa_demangle],[CXXABI_LIB=-lc++abi])
AC_SUBST(CXXABI_LIB)
AC_C_BIGENDIAN([AC_SUBST([ENDIAN_FLAG],[-D__BIG_ENDIAN__=1])],

View File

@ -1,77 +0,0 @@
commit a78597e93b6fc7332a3761771fa19c8e0d2945cf
Author: Thomas Pöchtrager <t.poechtrager@gmail.com>
Date: Fri Jun 20 11:01:58 2014 +0200
check for __cxa_demangle in -lstdc++
clang 3.5 compile fix
diff --git cctools/configure.ac cctools/configure.ac
index 0d9a4ec..2b23112 100644
--- cctools/configure.ac
+++ cctools/configure.ac
@@ -239,26 +239,26 @@ CFLAGS=$ORIGCFLAGS
AC_SUBST([WARNINGS], [$WARNINGS])
-AC_CHECK_LIB([dl],[dlopen],[
- DL_LIBS=-ldl
- ])
+AC_CHECK_LIB([dl],[dlopen],[DL_LIBS=-ldl])
AC_SUBST(DL_LIBS)
-AC_CHECK_LIB([pthread],[pthread_create],[
- PTHREAD_FLAGS=-pthread
- ])
+AC_CHECK_LIB([pthread],[pthread_create],[PTHREAD_FLAGS=-pthread])
AC_SUBST(PTHREAD_FLAGS)
-AC_CHECK_LIB([uuid],[uuid_generate_random],[
- UUID_LIBS=-luuid
- ])
+AC_CHECK_LIB([uuid],[uuid_generate_random],[UUID_LIBS=-luuid])
AC_SUBST(UUID_LIBS)
-AC_CHECK_LIB([crypto],[MD5_Init],[
- CRYPT_LIBS=-lcrypto
- ])
+AC_CHECK_LIB([crypto],[MD5_Init],[CRYPT_LIBS=-lcrypto])
AC_SUBST(CRYPT_LIBS)
+AC_CHECK_LIB([c++abi],[__cxa_demangle],[CXXABI_LIB=-lc++abi],[
+ AC_CHECK_LIB([supc++],[__cxa_demangle],[CXXABI_LIB=-lsupc++],[
+ AC_CHECK_LIB([stdc++],[__cxa_demangle],[CXXABI_LIB=-lstdc++],[exit 1])
+ ])
+])
+
+AC_SUBST(CXXABI_LIB)
+
AC_C_BIGENDIAN([AC_SUBST([ENDIAN_FLAG],[-D__BIG_ENDIAN__=1])],
[AC_SUBST([ENDIAN_FLAG],[-D__LITTLE_ENDIAN__=1])])
diff --git cctools/ld64/src/ld/code-sign-blobs/memutils.h cctools/ld64/src/ld/code-sign-blobs/memutils.h
index 391ddc1..b0421f0 100644
--- cctools/ld64/src/ld/code-sign-blobs/memutils.h
+++ cctools/ld64/src/ld/code-sign-blobs/memutils.h
@@ -33,6 +33,9 @@
#include <stdlib.h>
#include <algorithm>
+#ifdef __GLIBCXX__
+using namespace __gnu_cxx;
+#endif
//
// Encapsulate these very sharp tools in a separate (ugly-named) namespace
diff --git cctools/otool/Makefile.am cctools/otool/Makefile.am
index 3172d7e..4adb742 100644
--- cctools/otool/Makefile.am
+++ cctools/otool/Makefile.am
@@ -4,7 +4,7 @@ otool_LDADD = \
$(top_srcdir)/libobjc2/libobjc.la \
$(DL_LIBS)
-otool_LDFLAGS = $(PTHREAD_FLAGS) -lsupc++ # __cxa_demangle
+otool_LDFLAGS = $(PTHREAD_FLAGS) $(CXXABI_LIB)
otool_CFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/foreign -I$(top_srcdir)/libstuff -I$(top_srcdir)/libobjc2 $(WARNINGS) $(LTO_DEFS) -D_DARWIN_C_SOURCE -D__DARWIN_UNIX03 $(ENDIAN_FLAG) -DOTOOL

View File

@ -1,32 +0,0 @@
commit 7083dddbb0f106d791d313829ea7dc45db90e375
Author: Thomas Pöchtrager <t.poechtrager@gmail.com>
Date: Thu Sep 11 00:34:16 2014 +0200
add a workaround for a glibc 2.20 bug
diff --git cctools/include/sys/cdefs.h cctools/include/sys/cdefs.h
new file mode 100644
index 0000000..ca78da5
--- /dev/null
+++ cctools/include/sys/cdefs.h
@@ -0,0 +1,20 @@
+/*
+ * Workaround for a GLIBC bug.
+ * https://sourceware.org/bugzilla/show_bug.cgi?id=14952
+ */
+
+#include_next <sys/cdefs.h>
+
+#ifdef __GLIBC__
+
+#ifndef __extern_inline
+# define __extern_inline \
+ extern __inline __attribute__ ((__gnu_inline__))
+#endif
+
+#ifndef __extern_always_inline
+# define __extern_always_inline \
+ extern __always_inline __attribute__ ((__gnu_inline__))
+#endif
+
+#endif /* __GLIBC__ */

View File

@ -1,27 +0,0 @@
diff --git cctools/configure.ac cctools/configure.ac
index 8b59f6b..3411e34 100644
--- cctools/configure.ac
+++ cctools/configure.ac
@@ -12,7 +12,7 @@ CXX=clang++
CFLAGS="$CFLAGS `cat tmp/cflags 2>/dev/null`"
CFLAGS="$CFLAGS -isystem /usr/local/include -isystem /usr/pkg/include -O3"
-CXXFLAGS="$CXXFLAGS -std=gnu++0x `cat tmp/cxxflags 2>/dev/null`"
+CXXFLAGS="$CXXFLAGS -std=c++0x `cat tmp/cxxflags 2>/dev/null`"
CXXFLAGS="$CXXFLAGS -isystem /usr/local/include -isystem /usr/pkg/include -O3"
LDFLAGS="$LDFLAGS -L/usr/local/lib `cat tmp/ldflags 2>/dev/null`"
diff --git cctools/ld64/src/ld/code-sign-blobs/memutils.h cctools/ld64/src/ld/code-sign-blobs/memutils.h
index 8fa48d6..4c97973 100644
--- cctools/ld64/src/ld/code-sign-blobs/memutils.h
+++ cctools/ld64/src/ld/code-sign-blobs/memutils.h
@@ -33,6 +33,9 @@
#include <stdlib.h>
#include <algorithm>
+#ifdef __GLIBCXX__
+using namespace __gnu_cxx;
+#endif
//
// Encapsulate these very sharp tools in a separate (ugly-named) namespace

View File

@ -1,34 +0,0 @@
commit f7a5930c3f0931340516587241a841b1c6b31c86
Author: Thomas Pöchtrager <t.poechtrager@gmail.com>
Date: Sat Jul 5 11:07:48 2014 +0200
fix LD_LIBRARY_PATH
diff --git cctools/configure.ac cctools/configure.ac
index 4ac2d69..c4f6c47 100644
--- cctools/configure.ac
+++ cctools/configure.ac
@@ -6,9 +6,10 @@ AC_CANONICAL_TARGET
AC_ARG_PROGRAM
-#force compiler to clang
+# force compiler to clang
CC=clang
CXX=clang++
+CPP="clang -E"
CFLAGS="$CFLAGS `cat tmp/cflags 2>/dev/null`"
CFLAGS="$CFLAGS -isystem /usr/local/include -isystem /usr/pkg/include -O3"
@@ -16,9 +17,9 @@ CXXFLAGS="$CXXFLAGS -std=c++0x `cat tmp/cxxflags 2>/dev/null`"
CXXFLAGS="$CXXFLAGS -isystem /usr/local/include -isystem /usr/pkg/include -O3"
LDFLAGS="$LDFLAGS -L/usr/local/lib `cat tmp/ldflags 2>/dev/null`"
-export LD_LIBRARY_PATH="`cat tmp/ldpath 2>/dev/null`"
-CPP="clang -E"
+LD_LIBRARY_PATH="$LD_LIBRARY_PATH:`cat tmp/ldpath 2>/dev/null`"
+export LD_LIBRARY_PATH
# FIXME 'subdir-objects' breaks dependency tracking
AM_INIT_AUTOMAKE([1.10 no-define no-dist-gzip dist-bzip2 tar-ustar subdir-objects no-dependencies])

View File

@ -1,13 +0,0 @@
--- cctools/libobjc2/lock.h
+++ cctools/libobjc2/lock.h
@@ -36,6 +36,10 @@
#if 1
# define INIT_LOCK(x) init_recursive_mutex(&(x))
+#ifdef __linux__
+# define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP
+#endif /* __linux__ */
+
static inline void init_recursive_mutex(pthread_mutex_t *x)
{
pthread_mutexattr_t recursiveAttributes;

Binary file not shown.

Binary file not shown.

View File

@ -6,15 +6,14 @@
get_fedora_deps()
{
yum install clang llvm-devel automake autogen libtool \
libxml2-devel libuuid-devel openssl-devel bash patch \
libstdc++-static make
yum install clang llvm-devel libxml2-devel libuuid-devel openssl-devel \
bash patch libstdc++-static make
}
get_freebsd_deps()
{
for pkgname in llvm-devel automake autogen libtool \
libxml2 e2fsprogs-libuuid openssl bash gmake; do
for pkgname in llvm-devel libxml2 e2fsprogs-libuuid \
openssl bash gmake; do
echo $pkgname
pkg install $pkgname
done
@ -22,13 +21,12 @@ get_freebsd_deps()
get_netbsd_deps()
{
pkgin install clang automake autogen libtool \
libxml2 libuuid openssl bash patch gmake
pkgin install clang libxml2 libuuid openssl bash patch gmake
}
get_opensuse_deps()
{
zypper install llvm-clang-devel llvm-clang libclang automake autogen libtool \
zypper install llvm-clang-devel llvm-clang libclang \
libxml2-devel libuuid-devel openssl bash patch make
}
@ -36,15 +34,14 @@ get_mageia_deps()
{
urpmi ctags
urpmi task-c-devel task-c++-devel clang lib64llvm-devel llvm \
automake autogen libtool libxml2-devel libuuid-devel openssl \
libopenssl-devel bash patch make libstdc++-devel
libxml2-devel libuuid-devel openssl libopenssl-devel bash patch \
make libstdc++-devel
}
get_debian_deps()
{
apt-get install -y --force-yes clang llvm-dev automake autogen \
libtool libxml2-dev uuid-dev libssl-dev bash patch make \
tar xz-utils bzip2 gzip sed cpio
apt-get install -y --force-yes clang llvm-dev libxml2-dev uuid-dev \
libssl-dev bash patch make tar xz-utils bzip2 gzip sed cpio
}
unknown()

View File

@ -89,11 +89,6 @@ function extract()
fi
}
function get_ld_version()
{
echo "`ld -v 2>&1 | tr "-" " " | awk '{print $3}' | head -n1`"
}
function verbose_cmd()
{
echo "$@"