Compile gold as a tool on MINIX/llvm-only system
This patch is mostly copy-past from answers found in: http://www.marshut.com/ikhnkn/compiling-gold-with-libc-and-stl-hash-string.html This combines the first submitted patch, but applied on gold/gold.h instead of gold/system.h, as well as the freebsd changes.
This commit is contained in:
parent
4684ddb6aa
commit
fed2e50bd7
1 changed files with 147 additions and 0 deletions
147
external/gpl3/binutils/patches/0007-gold-as-tool-on-minix.patch
vendored
Normal file
147
external/gpl3/binutils/patches/0007-gold-as-tool-on-minix.patch
vendored
Normal file
|
@ -0,0 +1,147 @@
|
|||
diff -rNU3 dist/gold/configure dist.mxm/gold/configure
|
||||
--- dist/gold/configure 2014-07-14 18:21:16.292364610 +0200
|
||||
+++ dist.mxm/gold/configure 2014-07-14 18:25:08.509642134 +0200
|
||||
@@ -7106,6 +7106,20 @@
|
||||
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
||||
|
||||
|
||||
+for ac_header in unordered_set unordered_map
|
||||
+do :
|
||||
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
+ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
||||
+eval as_val=\$$as_ac_Header
|
||||
+ if test "x$as_val" = x""yes; then :
|
||||
+ cat >>confdefs.h <<_ACEOF
|
||||
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
||||
+_ACEOF
|
||||
+
|
||||
+fi
|
||||
+
|
||||
+done
|
||||
+
|
||||
for ac_header in tr1/unordered_set tr1/unordered_map
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
diff -rNU3 dist/gold/configure.ac dist.mxm/gold/configure.ac
|
||||
--- dist/gold/configure.ac 2014-07-14 18:21:16.292364610 +0200
|
||||
+++ dist.mxm/gold/configure.ac 2014-07-14 18:15:57.376945885 +0200
|
||||
@@ -496,6 +496,7 @@
|
||||
|
||||
AC_LANG_PUSH(C++)
|
||||
|
||||
+AC_CHECK_HEADERS(unordered_set unordered_map)
|
||||
AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
|
||||
AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
|
||||
AC_CHECK_HEADERS(byteswap.h)
|
||||
diff -rNU3 dist/gold/gold.h dist.mxm/gold/gold.h
|
||||
--- dist/gold/gold.h 2012-11-09 09:21:28.000000000 +0100
|
||||
+++ dist.mxm/gold/gold.h 2014-07-14 18:18:04.885779352 +0200
|
||||
@@ -66,7 +66,20 @@
|
||||
|
||||
// Figure out how to get a hash set and a hash map.
|
||||
|
||||
-#if defined(HAVE_TR1_UNORDERED_SET) && defined(HAVE_TR1_UNORDERED_MAP) \
|
||||
+#if defined(HAVE_UNORDERED_SET) && defined(HAVE_UNORDERED_MAP)
|
||||
+
|
||||
+#include <unordered_set>
|
||||
+#include <unordered_map>
|
||||
+
|
||||
+// We need a template typedef here.
|
||||
+
|
||||
+#define Unordered_set std::unordered_set
|
||||
+#define Unordered_map std::unordered_map
|
||||
+#define Unordered_multimap std::unordered_multimap
|
||||
+
|
||||
+#define reserve_unordered_map(map, n) ((map)->rehash(n))
|
||||
+
|
||||
+#elif defined(HAVE_TR1_UNORDERED_SET) && defined(HAVE_TR1_UNORDERED_MAP) \
|
||||
&& defined(HAVE_TR1_UNORDERED_MAP_REHASH)
|
||||
|
||||
#include <tr1/unordered_set>
|
||||
diff -rNU3 dist/gold/stringpool.cc dist.mxm/gold/stringpool.cc
|
||||
--- dist/gold/stringpool.cc 2010-08-25 10:36:54.000000000 +0200
|
||||
+++ dist.mxm/gold/stringpool.cc 2014-07-14 18:19:48.650875718 +0200
|
||||
@@ -72,7 +72,10 @@
|
||||
{
|
||||
this->key_to_offset_.reserve(n);
|
||||
|
||||
-#if defined(HAVE_TR1_UNORDERED_MAP)
|
||||
+#if defined(HAVE_UNORDERED_MAP)
|
||||
+ this->string_set_.rehash(this->string_set_.size() + n);
|
||||
+ return;
|
||||
+#elif defined(HAVE_TR1_UNORDERED_MAP)
|
||||
// rehash() implementation is broken in gcc 4.0.3's stl
|
||||
//this->string_set_.rehash(this->string_set_.size() + n);
|
||||
//return;
|
||||
@@ -499,7 +502,7 @@
|
||||
void
|
||||
Stringpool_template<Stringpool_char>::print_stats(const char* name) const
|
||||
{
|
||||
-#if defined(HAVE_TR1_UNORDERED_MAP) || defined(HAVE_EXT_HASH_MAP)
|
||||
+#if defined(HAVE_UNORDERED_MAP) || defined(HAVE_TR1_UNORDERED_MAP) || defined(HAVE_EXT_HASH_MAP)
|
||||
fprintf(stderr, _("%s: %s entries: %zu; buckets: %zu\n"),
|
||||
program_name, name, this->string_set_.size(),
|
||||
this->string_set_.bucket_count());
|
||||
diff -rNU3 dist/gold/config.in dist.mxm/gold/config.in
|
||||
--- dist/gold/config.in 2014-07-14 19:21:52.217425468 +0200
|
||||
+++ dist.mxm/gold/config.in 2014-07-14 20:08:52.208824229 +0200
|
||||
@@ -175,6 +175,12 @@
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
+/* Define to 1 if you have the <unordered_map> header file. */
|
||||
+#undef HAVE_UNORDERED_MAP
|
||||
+
|
||||
+/* Define to 1 if you have the <unordered_set> header file. */
|
||||
+#undef HAVE_UNORDERED_SET
|
||||
+
|
||||
/* Define to 1 if you have the <windows.h> header file. */
|
||||
#undef HAVE_WINDOWS_H
|
||||
|
||||
diff -rNU3 dist/include/safe-ctype.h dist.mxm/include/safe-ctype.h
|
||||
--- dist/include/safe-ctype.h 2008-07-07 19:09:31.000000000 +0200
|
||||
+++ dist.mxm/include/safe-ctype.h 2014-07-15 10:49:44.583026808 +0200
|
||||
@@ -119,6 +119,7 @@
|
||||
including another system header (for instance gnulib's stdint.h).
|
||||
So we include ctype.h here and then immediately redefine its macros. */
|
||||
|
||||
+#if !defined(__minix) || !defined(__clang__)
|
||||
#include <ctype.h>
|
||||
#undef isalpha
|
||||
#define isalpha(c) do_not_use_isalpha_with_safe_ctype
|
||||
@@ -145,6 +146,34 @@
|
||||
#undef toupper
|
||||
#define toupper(c) do_not_use_toupper_with_safe_ctype
|
||||
#undef tolower
|
||||
-#define tolower(c) do_not_use_tolower_with_safe_ctype
|
||||
+#else
|
||||
+#include <ctype.h>
|
||||
+#undef isalpha
|
||||
+#define isalpha(c) ISALPHA(c)
|
||||
+#undef isalnum
|
||||
+#define isalnum(c) ISALNUM(c)
|
||||
+#undef iscntrl
|
||||
+#define iscntrl(c) ISCNTRL(c)
|
||||
+#undef isdigit
|
||||
+#define isdigit(c) ISDIGIT(c)
|
||||
+#undef isgraph
|
||||
+#define isgraph(c) ISGRAPH(c)
|
||||
+#undef islower
|
||||
+#define islower(c) ISLOWER(c)
|
||||
+#undef isprint
|
||||
+#define isprint(c) ISPRINT(c)
|
||||
+#undef ispunct
|
||||
+#define ispunct(c) ISPUNCT(c)
|
||||
+#undef isspace
|
||||
+#define isspace(c) ISSPACE(c)
|
||||
+#undef isupper
|
||||
+#define isupper(c) ISUPPER(c)
|
||||
+#undef isxdigit
|
||||
+#define isxdigit(c) ISXDIGIT(c)
|
||||
+#undef toupper
|
||||
+#define toupper(c) TOUPPER(c)
|
||||
+#undef tolower
|
||||
+#define tolower(c) TOLOWER(c)
|
||||
+#endif /* !defined(__minix) || !defined(__clang__) */
|
||||
|
||||
#endif /* SAFE_CTYPE_H */
|
Loading…
Reference in a new issue