Hello,

These patches are adapted from
http://www.openbsd.org/cgi-bin/cvsweb/ports/devel/llvm/patches/

Please review them and give some feedback as I hope they make it to
llvm/clang 2.9 before your lock in a few weeks.
Matthew Dempsky helped me to compile C++ using clang++, so that's
resolved and clang & clang++ work fine on OpenBSD amd64 -current with
a couple of patches for its gcc 4.2.1.

IMHO, the absolute deal breaker to compiling on OpenBSD amd64 platform
is the llvm/Makefile.rules. The "local: *;" string when generated in
the four exports.map files breaks compilation with gcc 4.2.1 (refer to
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-November/011899.html).

There's a extra include of -lgcc and a deliberately commented out
-lpthread in llvm/tools/clang/lib/Driver/Tools.cpp.
I am unsure about -pthread or -lpthread but Matthew referred to this
particular diff in a email here
http://marc.info/?l=openbsd-ports&m=129780043311893&w=2

Thanks for your time

---------------------------llvm.diff---------------------------------------------------------

Index: lib/Support/Unix/Path.inc
===================================================================
--- lib/Support/Unix/Path.inc   (revision 125833)
+++ lib/Support/Unix/Path.inc   (working copy)
@@ -260,7 +260,7 @@
   return Path(pathname);
 }

-#if defined(__FreeBSD__) || defined (__NetBSD__) || defined(__minix)
+#if defined(__FreeBSD__) || defined (__OpenBSD__) || defined
(__NetBSD__) || defined(__minix)
 static int
 test_dir(char buf[PATH_MAX], char ret[PATH_MAX],
     const char *dir, const char *bin)
@@ -328,7 +328,7 @@
     if (realpath(exe_path, link_path))
       return Path(link_path);
   }
-#elif defined(__FreeBSD__) || defined (__NetBSD__) || defined(__minix)
+#elif defined(__FreeBSD__) || defined (__OpenBSD__) || defined
(__NetBSD__) || defined(__minix)
   char exe_path[PATH_MAX];

   if (getprogpath(exe_path, argv0) != NULL)
Index: Makefile.rules
===================================================================
--- Makefile.rules      (revision 125833)
+++ Makefile.rules      (working copy)
@@ -971,7 +971,6 @@
        $(Verb) echo "{" > $@
        $(Verb) grep -q "\<" $< && echo "  global:" >> $@ || :
        $(Verb) sed -e 's/$$/;/' -e 's/^/    /' < $< >> $@
-       $(Verb) echo "  local: *;" >> $@
        $(Verb) echo "};" >> $@
 clean-local::
        -$(Verb) $(RM) -f $(NativeExportsFile)


-------------------------------
clang.diff---------------------------------------------------------

Index: lib/Sema/SemaDeclAttr.cpp
===================================================================
--- lib/Sema/SemaDeclAttr.cpp   (revision 125833)
+++ lib/Sema/SemaDeclAttr.cpp   (working copy)
@@ -1603,7 +1603,7 @@
   if (Format == "scanf" || Format == "printf" || Format == "printf0" ||
       Format == "strfmon" || Format == "cmn_err" || Format == "strftime" ||
       Format == "NSString" || Format == "CFString" || Format == "vcmn_err" ||
-      Format == "zcmn_err")
+      Format == "zcmn_err" || Format == "kprintf")
     return SupportedFormat;

   if (Format == "gcc_diag" || Format == "gcc_cdiag" ||
Index: lib/Sema/AttributeList.cpp
===================================================================
--- lib/Sema/AttributeList.cpp  (revision 125833)
+++ lib/Sema/AttributeList.cpp  (working copy)
@@ -126,6 +126,7 @@
     .Case("__fastcall", AT_fastcall)
     .Case("__thiscall", AT_thiscall)
     .Case("__pascal", AT_pascal)
+    .Case("bounded", IgnoredAttribute)
     .Case("constant", AT_constant)
     .Case("device", AT_device)
     .Case("global", AT_global)
Index: lib/Lex/Lexer.cpp
===================================================================
--- lib/Lex/Lexer.cpp   (revision 125833)
+++ lib/Lex/Lexer.cpp   (working copy)
@@ -1516,6 +1516,7 @@
   return true;
 }

+#undef __SSE2__
 #ifdef __SSE2__
 #include <emmintrin.h>
 #elif __ALTIVEC__
Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp        (revision 125833)
+++ lib/Driver/Tools.cpp        (working copy)
@@ -3080,9 +3080,9 @@

     if (Args.hasArg(options::OPT_pthread))
       CmdArgs.push_back("-pthread");
+      //CmdArgs.push_back("-lpthread");
     if (!Args.hasArg(options::OPT_shared))
       CmdArgs.push_back("-lc");
-    CmdArgs.push_back("-lgcc");
   }

   if (!Args.hasArg(options::OPT_nostdlib) &&

Attachment: clang.diff
Description: Binary data

Attachment: llvm.diff
Description: Binary data

Reply via email to