pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

clang patch to build on solaris



I believe this may need a bit wider testing on solaris, but with this patched Makefile pkgsrc clang seems to build okay and work, at least on the few programs I've tested.

I've built with pkgsrc gcc 4.8.2 and builtin gcc 4.7.3 on OpenIndiana.

NB: solaris `ld' is found through paths, so it is probably neither a good idea to use or build with */gnu/bin in your path.

This could probably be fixed by hardcoding the path to ld in place of the call to 'getToolChain().GetProgramPath("ld")' in clang/lib/Driver/Tools.cpp but I obstained from doing that for now...

Given the imminent release of 3.4, that would be probably a good time to integrate...

cheers
diff --git a/lang/clang/Makefile b/lang/clang/Makefile
index ecf5295..a2b8f18 100644
--- a/lang/clang/Makefile
+++ b/lang/clang/Makefile
@@ -38,7 +38,42 @@ PLIST_SUBST+=                SOEXT="dylib"
 PLIST_SUBST+=          SOEXT="so"
 .endif
 
-CFLAGS.SunOS+=         -mimpure-text
+.include "../../mk/compiler.mk"
+
+.if ${OPSYS} == "SunOS" && !empty(PKGSRC_COMPILER:Mgcc)
+# This should probably be in hacks, but since clang hardcodes gcc paths
+# put this here so it can be removed when clang matures.
+# cxa_finalize.o is no longer necessary with libc.so >= ILLUMOS_0.5 
+TEST_ILLUMOS_3849!=\
+       if /usr/bin/elfdump -v /lib/libc.so |\
+         ${GREP} -q 'ILLUMOS_0.5' ; then       \
+               ${ECHO} 0;      \
+       else ${ECHO} 1; \
+       fi
+
+#doesn't seem to be needed anymore, but may be dependent on 
+#a recent version of solaris (illumos) ld.
+#
+#CFLAGS.SunOS+=                -mimpure-text
+
+SUBST_CLASSES+=                                fix-paths
+SUBST_STAGE.fix-paths=         pre-configure
+SUBST_MESSAGE.fix-paths=       Fixing absolute gcc paths for SunOS.
+SUBST_FILES.fix-paths=         tools/clang/lib/Driver/Tools.cpp
+.  if defined(_GCC_ARCHDIR)
+SUBST_SED.fix-paths=           -e 's,/usr/gcc/4.5/lib/gcc/,${_GCC_ARCHDIR}/,g'
+.  else
+LIBGCCDIR!=    ${CC} -print-libgcc-file-name
+ARCHDIR:=      ${LIBGCCDIR:H}
+SUBST_SED.fix-paths=           -e 's,/usr/gcc/4.5/lib/gcc/,${ARCHDIR}/,g'
+.  endif
+SUBST_SED.fix-paths+=          -e '/^.*i386.*getVendorName.*$$/{N;d;}'
+SUBST_SED.fix-paths+=          -e 's,/4.5.2/amd64/,amd64/,g'
+SUBST_SED.fix-paths+=          -e 's,"as","gas",g'
+.  if ${TEST_ILLUMOS_3849}
+SUBST_SED.fix-paths+=          -e 's,^.*cxa_finalize.*$$,      ; //suppress 
cxa_finalize.o,g'
+.  endif
+.endif
 
 post-extract:
        mv ${WRKDIR}/cfe-${PKGVERSION_NOREV}.src ${WRKSRC}/tools/clang


Home | Main Index | Thread Index | Old Index