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) &&
clang.diff
Description: Binary data
llvm.diff
Description: Binary data