From bc38b4f7e1687332b5c7e1a5ab85c38901efe663 Mon Sep 17 00:00:00 2001 From: Alexander Leidinger Date: Fri, 20 Sep 2002 12:16:25 +0000 Subject: - Update to 6.0.1.304. - Re-enable patching of iccvars.(c)sh (solely called by icid and therefore overlooked), accidentally broken by last commit. - Fix generation of multi-threaded code, triggered by the (badly documented) compiler option "-mt". - Disable compiler options "-openmp*" and "-parallel", they depend on libguide which itself depends on pthread_atfork() (not provided by libc_r), therefore don't install libguide. Note: All compiler options are now believed to either work on FreeBSD or be disabled (Maintainer note: '-prof_gen' is under investigation). - Add a message about installing stlport-icc in order to get full C++ support. - Remove workaround for generation of shared objects with binutils/ld 2.12.x, appears to be fixed (unfortunately no confirmation by Intel Support, "That is good news <...> then we should just close this issue." *sigh*). Submitted by: marius@alchemy.franken.de - Add note about a problem on P4 and how to solve it. Suggested by: Martin Kahlert - Remove outdated information in pkg-descr. --- lang/icc/Makefile | 30 ++++++++++++++++---------- lang/icc/distinfo | 2 +- lang/icc/files/ld.c | 55 +++++++++++++++++++++-------------------------- lang/icc/files/patch-icc | 7 +++++- lang/icc/files/patch-icpc | 15 ++++++++++++- lang/icc/pkg-descr | 2 -- lang/icc/pkg-plist | 2 -- 7 files changed, 65 insertions(+), 48 deletions(-) (limited to 'lang/icc') diff --git a/lang/icc/Makefile b/lang/icc/Makefile index 3e911bc2a152..b73173d6d135 100644 --- a/lang/icc/Makefile +++ b/lang/icc/Makefile @@ -6,11 +6,10 @@ # PORTNAME= icc -PORTVERSION= 6.0.159 -PORTREVISION= 3 +PORTVERSION= 6.0.1.304 CATEGORIES= lang linux devel MASTER_SITES= -DISTNAME= l_cc_pu_6.0.159 +DISTNAME= l_cc_p_6.0.1.304 EXTRACT_SUFX= .tar MAINTAINER= netchild@FreeBSD.org @@ -43,12 +42,12 @@ IGNORE= "Please manually download ${DISTFILES} from ${ICC_SITE}, e.g. from ${ICC post-extract: .for i in \ - intel-icc6-6.0-159.i386.rpm \ -# intel-ildb6-6.0-228.i386.rpm \ -# intel-isubh6-6.0-159.i386.rpm \ -# intel-ecc6-6.0-159.ia64.rpm \ -# intel-eldb6-6.0-228.ia64.rpm \ -# intel-esubh6-6.0-159.ia64.rpm + intel-icc6-6.0.1-304.i386.rpm \ +# intel-ildb6-6.0.1-308.i386.rpm \ +# intel-isubh6-6.0.1-304.i386.rpm \ +# intel-ecc6-6.0.1-304.ia64.rpm \ +# intel-eldb6-6.0.1-308.ia64.rpm \ +# intel-esubh6-6.0.1-304.ia64.rpm @cd ${WRKSRC}; rpm2cpio 2>/dev/null ${i} | cpio -idu --quiet .endfor @@ -71,7 +70,7 @@ post-patch: # Correct some paths and patch some files .for i in ia32/bin/icc ia32/bin/icc.cfg ia32/bin/iccvars.csh \ ia32/bin/iccvars.sh ia32/bin/icpc ia32/bin/icpc.cfg docs/csupport - @${REINPLACE_CMD} -i "" -e 's:@@PREFIX@@:${PREFIX}:g; s@man -w@manpath -q@g; s:\:${DISTNAME}:g' \ + @${REINPLACE_CMD} -i "" -e 's:@@PREFIX@@:${PREFIX}:g; s@\@${PREFIX}/intel@g; s@man -w@manpath -q@g; s:\:${DISTNAME}:g' \ ${WRKSRC}/opt/intel/compiler60/${i} @${CHMOD} 755 ${WRKSRC}/opt/intel/compiler60/${i} .endfor @@ -85,7 +84,8 @@ post-patch: xlocmes xlocmon xlocnum xloctime xmemory xstring xtree xutility ymath.h @${RM} ${WRKSRC}/opt/intel/compiler60/ia32/include/${i} .endfor -.for i in libcprts.a libcprts.so libcprts.so.1 libunwind.so libunwind.so.1 +.for i in libcprts.a libcprts.so libcprts.so.1 libguide.a libguide.so \ + libunwind.so libunwind.so.1 @${RM} -rf ${WRKSRC}/opt/intel/compiler60/ia32/lib/${i} .endfor @${RM} ${WRKSRC}/opt/intel/compiler60/ia32/bin/uninstall \ @@ -125,6 +125,14 @@ post-install: @${ECHO_CMD} "${PREFIX}/intel/licenses) directory and add" @${ECHO_CMD} "${PREFIX}/intel/compiler60/ia32/bin to your PATH." @${ECHO_CMD} + @${ECHO_CMD} "In order to be able to compile C++ source with icpc you have to install" + @${ECHO_CMD} "devel/stlport-icc. (It is a good idea to run 'rehash' before or stlport-icc" + @${ECHO_CMD} "probably won't find the compiler.)" + @${ECHO_CMD} + @${ECHO_CMD} "If you use icc on a Pentium 4 make sure you have 'options CPU_ENABLE_SSE'" + @${ECHO_CMD} "in your kernel config (have a look at http://www.FreeBSD.org/handbook/" + @${ECHO_CMD} "if you do not know how to do this), else icc will hang forever." + @${ECHO_CMD} @${ECHO_CMD} "WARNING: If you use icc while having linux-devtools installed, icc will use" @${ECHO_CMD} "the wrong includes and therefore will generate bogus binaries!" diff --git a/lang/icc/distinfo b/lang/icc/distinfo index 6ae1cb3179a5..130a2988286d 100644 --- a/lang/icc/distinfo +++ b/lang/icc/distinfo @@ -1 +1 @@ -MD5 (l_cc_pu_6.0.159.tar) = 697b4d1f77d388fc1f0ba837ad9ecdc9 +MD5 (l_cc_p_6.0.1.304.tar) = cd063110fa5b518444da03222ec66add diff --git a/lang/icc/files/ld.c b/lang/icc/files/ld.c index 8bcf90797140..fdd1869bba13 100644 --- a/lang/icc/files/ld.c +++ b/lang/icc/files/ld.c @@ -143,7 +143,7 @@ int main(int argc, char *argv[], char *envp[]) { size_t i; - int bootstrap, cpp, dynamic, shared, stlinserted; + int bootstrap, cpp, dynamic, stlinserted, threaded; char *prefix; struct arglist al; @@ -154,7 +154,7 @@ main(int argc, char *argv[], char *envp[]) errx(1, "can't get PREFIX"); initarg(&al); - bootstrap = cpp = dynamic = shared = stlinserted = 0; + bootstrap = cpp = dynamic = stlinserted = threaded = 0; #ifdef DEBUG printf("input: "); @@ -185,11 +185,6 @@ main(int argc, char *argv[], char *envp[]) continue; } - if (ARGCMP("-shared")) { - shared++; - continue; - } - /* * If the compiler was called with -static we shouldn't see * "--dynamic-linker" here. @@ -210,12 +205,24 @@ main(int argc, char *argv[], char *envp[]) stlinserted++; continue; } + + /* + * ICC links the thread safe libircmt instead of libirc when + * told to generate threaded code by any of the compiler flags + * "-mt", "-openmp" or "-parallel". We use this as an indicator + * to link against libc_r. + */ + if (ARGCMP("-lircmt")) { + threaded++; + continue; + } + } #ifdef DEBUG - printf("\ncpp: %s bootstrap: %s dynamic: %s shared: %s\n", + printf("\ncpp: %s bootstrap: %s dynamic: %s threaded: %s\n", cpp ? "YES" : "NO", bootstrap ? "YES" : "NO", - dynamic ? "YES" : "NO", shared ? "YES" : "NO"); + dynamic ? "YES" : "NO", threaded ? "YES" : "NO"); #endif if (bootstrap && !cpp) @@ -246,16 +253,6 @@ main(int argc, char *argv[], char *envp[]) if (ARGCMP("-Qy")) continue; - /* - * Because of a nasty behaviour (bug?) of binutils/ld 2.12.[0,1] - * we must not statically link libcxa and libunwind to shared - * objects, e.g. our STL replacement. Doing so causes broken - * exception handling amongst some other strange reactions. - * This perfectly worked with binutils/ld 2.11.2. - */ - if (cpp && shared && (ARGCMP("-lcxa") || ARGCMP("-lunwind"))) - continue; - /* Libunwind is only needed when compiling C++ source. */ if (!cpp && ARGCMP("-lunwind")) continue; @@ -276,10 +273,11 @@ main(int argc, char *argv[], char *envp[]) } /* - * Libcxa and libunwind depend on libc_r when compiling C++ - * source. + * Link against libc_r when compiling multi-threaded or C++ + * code (libcxa and libunwind depend on libc_r when compiling + * C++ source). */ - if (cpp && ARGCMP("-lc")) { + if ((cpp || threaded) && ARGCMP("-lc")) { if (al.argc > 0 && strncmp(al.argv[al.argc - 1], "-B", strlen("-B"))) addarg(&al, @@ -317,17 +315,14 @@ main(int argc, char *argv[], char *envp[]) } /* - * Link and map files for C++ exception handling, C++ ABI stuff. + * Link and map files for C++ exception handling. */ if (!cpp && (ARGCMP("--version-script") || ARGCMPB(prefix, "/intel/compiler60/ia32/lib/icrt.link") || ARGCMPB(prefix, - "/intel/compiler60/ia32/lib/icrt.internal.map") || - ARGCMPB(prefix, "/intel/compiler60/ia32/lib/crtxi.o") || - ARGCMPB(prefix, "/intel/compiler60/ia32/lib/crtxn.o"))) { + "/intel/compiler60/ia32/lib/icrt.internal.map"))) continue; - } /* * Force libcxa and libunwind to static linkage, since the @@ -335,14 +330,13 @@ main(int argc, char *argv[], char *envp[]) * Don't add superfluous -Bdynamic. */ if (ARGCMP("-Bdynamic") && i <= argc + 1) { - if (!shared && (!strcmp(argv[i + 1], "-lcxa") || - (cpp && !strcmp(argv[i + 1], "-lunwind")))) { + if (!strcmp(argv[i + 1], "-lcxa") || + (cpp && !strcmp(argv[i + 1], "-lunwind"))) { addarg(&al, "-Bstatic", 1); continue; } if (!strcmp(argv[i + 1], "-lcprts") || - !strcmp(argv[i + 1], "-lcxa") || !strcmp(argv[i + 1], "-lunwind")) continue; } @@ -362,6 +356,7 @@ main(int argc, char *argv[], char *envp[]) if (!strcmp(argv[i], "-lcxa") || !strcmp(argv[i], "-limf") || !strcmp(argv[i], "-lirc") || + !strcmp(argv[i], "-lircmt") || !strcmp(argv[i], "-lunwind")) addarg(&al, "-Bstatic", 1); else diff --git a/lang/icc/files/patch-icc b/lang/icc/files/patch-icc index 53426d19cbe0..adcc3f15a4b4 100644 --- a/lang/icc/files/patch-icc +++ b/lang/icc/files/patch-icc @@ -1,6 +1,6 @@ --- opt/intel/compiler60/ia32/bin/icc.orig Tue Aug 6 04:34:18 2002 +++ opt/intel/compiler60/ia32/bin/icc Tue Aug 6 04:46:51 2002 -@@ -1,29 +1,44 @@ +@@ -1,29 +1,49 @@ #!/bin/sh -INTEL_LICENSE_FILE=/licenses; @@ -46,6 +46,11 @@ + exit 1 + fi + done ++ val2=${val1#"-openmp"} ++ if [ ${#val1} -gt ${#val2} ] || [ ${val1} = "-parallel" ] ; then ++ echo "Sorry, option '$val1' is not supported on FreeBSD." ++ exit 1 ++ fi + set -- "$@" "$val1" + i=$(($i+1)) + done diff --git a/lang/icc/files/patch-icpc b/lang/icc/files/patch-icpc index 03e4dd7c1c95..a1e3f2685e08 100644 --- a/lang/icc/files/patch-icpc +++ b/lang/icc/files/patch-icpc @@ -1,6 +1,6 @@ --- opt/intel/compiler60/ia32/bin/icpc.orig Fri Sep 6 02:18:03 2002 +++ opt/intel/compiler60/ia32/bin/icpc Tue Sep 10 18:32:59 2002 -@@ -1,29 +1,29 @@ +@@ -1,29 +1,42 @@ #!/bin/sh -INTEL_LICENSE_FILE=/licenses; @@ -34,6 +34,19 @@ if [ $# != 0 ] then - exec -a "/compiler60/ia32/bin/icpc" /compiler60/ia32/bin/icpcbin "$@"; ++ i=0 ++ argc=$# ++ while [ $i -lt $argc ] ; do ++ val1=$1 ++ shift ++ val2=${val1#"-openmp"} ++ if [ ${#val1} -gt ${#val2} ] || [ ${val1} = "-parallel" ] ; then ++ echo "Sorry, option '$val1' is not supported on FreeBSD." ++ exit 1 ++ fi ++ set -- "$@" "$val1" ++ i=$(($i+1)) ++ done + exec ${PREFIX}/intel/compiler60/ia32/bin/icpcbin "$@"; else - exec -a "/compiler60/ia32/bin/icpc" /compiler60/ia32/bin/icpcbin; diff --git a/lang/icc/pkg-descr b/lang/icc/pkg-descr index ef327bfdf888..a8e1889f56d7 100644 --- a/lang/icc/pkg-descr +++ b/lang/icc/pkg-descr @@ -1,5 +1,3 @@ This is Intels C/C++ compiler, it is set up to produce native FreeBSD objects. -This port is not able to produce native executables on its own, you need to -use gcc to link the final binary. WWW: http://www.intel.com/software/products/compilers/c60l diff --git a/lang/icc/pkg-plist b/lang/icc/pkg-plist index be76595d413d..ff1cd0079cb0 100644 --- a/lang/icc/pkg-plist +++ b/lang/icc/pkg-plist @@ -752,8 +752,6 @@ intel/compiler60/ia32/lib/icrt.link intel/compiler60/ia32/lib/libcxa.a intel/compiler60/ia32/lib/libcxa.so intel/compiler60/ia32/lib/libcxa.so.1 -intel/compiler60/ia32/lib/libguide.a -intel/compiler60/ia32/lib/libguide.so intel/compiler60/ia32/lib/libimf.a intel/compiler60/ia32/lib/libirc.a intel/compiler60/ia32/lib/libircmt.a -- cgit v1.2.3