| #!/bin/sh |
| # @@@ START COPYRIGHT @@@ |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| # @@@ END COPYRIGHT @@@ |
| |
| { |
| PATH=${PATH}:/bin:/usr/bin |
| |
| if [ "$HPMPI_MPICC_EXECED" != "1" ] ; then |
| if [ ! -z "${HPMPI_CC:-}" ] ; then |
| MPI_CC="$HPMPI_CC" |
| fi |
| else |
| if [ ! -z "${MPI_CXX:-}" ] ; then |
| MPI_CC="$MPI_CXX" |
| fi |
| if [ ! -z "${HPMPI_CXX:-}" ] ; then |
| MPI_CC="$HPMPI_CXX" |
| fi |
| fi |
| mpicc=${MPI_CC:-""} |
| sed=$(which sed 2>/dev/null) |
| |
| mpih=${MPI_ROOT}/include |
| |
| palevel=linux_amd64 |
| prelib="" |
| postlib="" |
| ldopt="" |
| linker=1 |
| evalcmd=eval |
| mpiCClib=-lmpiCC |
| |
| if [ "$HPMPI_MPICC_EXECED" != "1" ] ; then |
| set -- "$@" ${MPI_CC_OPTIONS:-} |
| else |
| set -- "$@" ${MPI_CXX_OPTIONS:-} |
| fi |
| args="" |
| while [ $# -ge 1 ] ; do |
| arg="$1" |
| case "$arg" in |
| -c | -E | -P | -S) linker=0;; |
| -ldmpi) arg="";; |
| -lmtmpi) arg="";; |
| -lmtmpi_hmp) arg="";; |
| -non-standard-ext) arg="";; |
| -notv) arg="";; |
| -show) evalcmd=echo; arg="";; |
| -mpiCClib) mpiCClib="$2"; shift; arg="";; |
| -mpicxxlib) mpiCClib="$2"; shift; arg="";; |
| -mpicc) |
| if [ "$HPMPI_MPICC_EXECED" != "1" ] ; then |
| mpicc="$2" |
| fi |
| shift; arg="";; |
| -mpicxx) |
| if [ "$HPMPI_MPICC_EXECED" = "1" ] ; then |
| mpicc="$2" |
| fi |
| shift; arg="";; |
| |
| -mpi32) |
| palevel=linux_ia32; arg="";; |
| -mpi64) |
| arg="";; |
| -static | -Wl,*-static) |
| ;; |
| |
| *\'* | *\\) |
| if [ ! -z "$sed" ] ; then |
| arg=$(printf "%s\n" "$arg" | $sed \ |
| -e 's/\([^a-zA-Z0-9/._]\)/\\\1/g'); |
| else |
| arg=\""$arg"\" |
| fi ;; |
| *[!a-zA-Z0-9/._]*) |
| arg=\'"$arg"\' ;; |
| esac |
| shift |
| |
| args="$args $arg" |
| done |
| |
| if [ -z "$mpicc" ] ; then |
| complist="icc ecc pgcc pathcc gcc" |
| if [ "$HPMPI_MPICC_EXECED" = "1" ] ; then |
| complist="icc ecc pgCC pathCC g++" |
| fi |
| dirs=$(IFS=: ; set -- $PATH ; echo "$@") |
| for dir in $dirs ; do |
| for comp in $complist ; do |
| if [ -z "$mpicc" ] ; then |
| if [ -x "$dir/$comp" ] ; then |
| mpicc="$dir/$comp" |
| fi |
| fi |
| done |
| done |
| if [ -z "$mpicc" ] ; then |
| echo "Error: no C compiler found;" \ |
| "please specify one manually," |
| if [ "$HPMPI_MPICC_EXECED" = "1" ] ; then |
| echo "for example using MPI_CXX." |
| else |
| echo "for example using MPI_CC." |
| fi |
| exit 1 |
| fi |
| fi |
| |
| mpilib=${MPI_ROOT}/lib/${palevel} |
| |
| # |
| # Add in the mpi compilation options. |
| # |
| if [ $linker -eq 1 ]; then |
| prelib="${prelib} -L${mpilib}" |
| |
| # |
| # Link with the MPI thread-compliant libraries or the regular libraries? |
| # |
| postlib="-lmtmpi -lpthread -ldl" |
| |
| if [ "$HPMPI_MPICC_EXECED" = "1" ] ; then |
| case "/$mpicc" in |
| */icc) |
| postlib="${postlib} -Kc++" ;; |
| esac |
| fi |
| |
| fi |
| |
| # |
| # Submit the resulting compilation command |
| # |
| |
| cmd="$mpicc $prelib $postlib $args -I${mpih} $ldopt" |
| |
| $evalcmd "$cmd" |
| ret=$? |
| |
| exit $ret |
| } |