diff options
-rw-r--r-- | mk/compiler/bsd.compiler.mk | 93 | ||||
-rw-r--r-- | mk/compiler/ccache.mk | 45 | ||||
-rw-r--r-- | mk/compiler/distcc.mk | 45 | ||||
-rw-r--r-- | mk/compiler/gcc.mk | 224 | ||||
-rw-r--r-- | mk/compiler/mipspro.mk | 15 | ||||
-rw-r--r-- | mk/compiler/sunpro.mk | 17 |
6 files changed, 439 insertions, 0 deletions
diff --git a/mk/compiler/bsd.compiler.mk b/mk/compiler/bsd.compiler.mk new file mode 100644 index 00000000000..6acc5708030 --- /dev/null +++ b/mk/compiler/bsd.compiler.mk @@ -0,0 +1,93 @@ +# $NetBSD: bsd.compiler.mk,v 1.1 2004/02/01 00:31:00 jlam Exp $ +# +# This Makefile fragment implements handling for supported C/C++/Fortran +# compilers. +# +# The following variables are used: +# +# PKGSRC_COMPILER +# A list of values specifying the chain of compilers to be used by +# pkgsrc to build packages. +# +# Valid values are: +# distcc distributed C/C++ (chainable) +# ccache compiler cache (chainable) +# gcc GNU +# mipspro Silicon Graphics, Inc. MIPSpro +# sunpro Sun Microsystems, Inc. WorkShip/Forte/Sun +# ONE Studio +# +# The default is "gcc". You can use ccache and/or distcc with an +# appropriate PKGSRC_COMPILER setting, e.g. "ccache distcc gcc". +# +# GCC_REQD +# A list of version numbers used to determine the minimum +# version of GCC required by a package. This value should only +# be appended to by a package Makefile. +# +# NOTE: Be conservative when setting GCC_REQD, as lang/gcc3 is +# known not to build on some platforms, e.g. Darwin. If gcc3 is +# required, set GCC_REQD=3.0 so that we do not try to pull in +# lang/gcc3 unnecessarily and have it fail. +# +# USE_PKGSRC_GCC +# Force using the appropriate version of GCC from pkgsrc based on +# GCC_REQD instead of the native compiler. +# +# USE_GCC_SHLIB +# Indicates that a package uses GCC shared libraries, so we +# register a runtime dependency on the compiler package. +# +# The following variables are defined, and available for testing in +# package Makefiles: +# +# CC_VERSION +# The compiler and version being used, e.g., +# +# .include "../../mk/bsd.prefs.mk" +# +# .if !empty(CC_VERSION:Mgcc-3*) +# ... +# .endif +# +# The following variables are deprecated: +# +# USE_GCC2, USE_GCC3, USE_SUNPRO, USE_MIPSPRO + +.if !defined(BSD_COMPILER_MK) +BSD_COMPILER_MK= defined + +# Support some deprecated variables for a while. They'll be removed +# after the pkgsrc-2004Q1 branch is cut. +# +.if defined(USE_GCC2) +GCC_REQD?= 2.8.0 +PKGSRC_COMPILER= gcc +.elif defined(USE_GCC3) +GCC_REQD?= 3.0 +PKGSRC_COMPILER= gcc +.elif defined(USE_PKGSRC_GCC) +_USE_PKGSRC_GCC= yes +PKGSRC_COMPILER= gcc +.elif defined(USE_SUNPRO) +PKGSRC_COMPILER= sunpro +.elif defined(USE_MIPSPRO) +PKGSRC_COMPILER= mipspro +.else +PKGSRC_COMPILER?= gcc +.endif + +_PKGSRC_COMPILER= # empty +.for _compiler_ in ${PKGSRC_COMPILER} +. if empty(_PKGSRC_COMPILER:M${_compiler_}) +_PKGSRC_COMPILER:= ${_compiler_} ${_PKGSRC_COMPILER} +. endif +.endfor + +.for _compiler_ in ${_PKGSRC_COMPILER} +. if exists(../../mk/compiler/${_compiler_}.mk) +. include "../../mk/compiler/${_compiler_}.mk" +. endif +.endfor + +.endif # BSD_COMPILER_MK diff --git a/mk/compiler/ccache.mk b/mk/compiler/ccache.mk new file mode 100644 index 00000000000..b1b0fae7353 --- /dev/null +++ b/mk/compiler/ccache.mk @@ -0,0 +1,45 @@ +# $NetBSD: ccache.mk,v 1.1 2004/02/01 00:31:00 jlam Exp $ + +.if !defined(COMPILER_CCACHE_MK) +COMPILER_CCACHE_MK= defined + +.if !empty(PKGPATH:Mdevel/ccache) +IGNORE_CCACHE= yes +MAKEFLAGS+= IGNORE_CCACHE=yes +.endif + +.if defined(IGNORE_CCACHE) +_USE_CCACHE= NO +.endif + +.if !defined(_USE_CCACHE) +_USE_CCACHE= YES +.endif + +.if !empty(_USE_CCACHE:M[yY][eE][sS]) +# +# Add the dependency on ccache. +BUILD_DEPENDS+= ccache-[0-9]*:../../devel/ccache +.endif + +EVAL_PREFIX+= _CCACHEBASE=ccache +_CCACHEBASE_DEFAULT= ${LOCALBASE} +_CCACHEBASE?= ${LOCALBASE} + +.if exists(${_CCACHEBASE}/bin/ccache) +_CCACHE_DIR= ${WRKDIR}/.ccache +PATH:= ${_CCACHE_DIR}/bin:${PATH} + +CC= ${_CCACHE_DIR}/bin/cc +CXX= ${_CCACHE_DIR}/bin/c++ + +. for _target_ in CC CXX +override-tools: ${${_target_}} +${${_target_}}: + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${LN} -fs ${_CCACHEBASE}/bin/ccache ${.TARGET} +. endfor +.endif + +.endif # COMPILER_CCACHE_MK diff --git a/mk/compiler/distcc.mk b/mk/compiler/distcc.mk new file mode 100644 index 00000000000..ad38d68a124 --- /dev/null +++ b/mk/compiler/distcc.mk @@ -0,0 +1,45 @@ +# $NetBSD: distcc.mk,v 1.1 2004/02/01 00:31:00 jlam Exp $ + +.if !defined(COMPILER_DISTCC_MK) +COMPILER_DISTCC_MK= defined + +.if !empty(PKGPATH:Mdevel/distcc) +IGNORE_DISTCC= yes +MAKEFLAGS+= IGNORE_DISTCC=yes +.endif + +.if defined(IGNORE_DISTCC) +_USE_DISTCC= NO +.endif + +.if !defined(_USE_DISTCC) +_USE_DISTCC= YES +.endif + +.if !empty(_USE_DISTCC:M[yY][eE][sS]) +# +# Add the dependency on distcc. +BUILD_DEPENDS+= distcc-[0-9]*:../../devel/distcc +.endif + +EVAL_PREFIX+= _DISTCCBASE=distcc +_DISTCCBASE_DEFAULT= ${LOCALBASE} +_DISTCCBASE?= ${LOCALBASE} + +.if exists(${_DISTCCBASE}/bin/distcc) +_DISTCC_DIR= ${WRKDIR}/.distcc +PATH:= ${_DISTCC_DIR}/bin:${PATH} + +CC= ${_DISTCC_DIR}/bin/cc +CXX= ${_DISTCC_DIR}/bin/c++ + +. for _target_ in CC CXX +override-tools: ${${_target_}} +${${_target_}}: + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${LN} -fs ${_DISTCCBASE}/bin/distcc ${.TARGET} +. endfor +.endif + +.endif # COMPILER_DISTCC_MK diff --git a/mk/compiler/gcc.mk b/mk/compiler/gcc.mk new file mode 100644 index 00000000000..69a6b60ede0 --- /dev/null +++ b/mk/compiler/gcc.mk @@ -0,0 +1,224 @@ +# $NetBSD: gcc.mk,v 1.1 2004/02/01 00:31:00 jlam Exp $ + +.if !defined(COMPILER_GCC_MK) +COMPILER_GCC_MK= defined + +.include "../../mk/bsd.prefs.mk" + +GCC_REQD?= 2.8.0 + +# _GCC_DIST_VERSION is the highest version of GCC installed by the pkgsrc +# without the PKGREVISIONs. +# +_GCC_DIST_VERSION= 3.3 + +# _GCC2_PATTERNS matches N s.t. N <= 2.95.3. +_GCC2_PATTERNS= 2.8 2.8.* 2.9 2.9.* 2.[1-8][0-9] 2.[1-8][0-9].* \ + 2.9[0-4] 2.9[0-4].* 2.95 2.95.[0-3] + +# _GCC3_PATTERNS matches N s.t. 2.95.3 < N. +_GCC3_PATTERNS= 2.95.[4-9]* 2.95.[1-9][0-9]* 2.9[6-9] 2.9[6-9].* \ + 2.[1-9][0-9][0-9]* 3.* [4-9]* + +.if !defined(_IS_BUILTIN_GCC) +# +# GCC in older versions of Darwin report "Apple Computer ... based on gcc +# version ...", so we can't just grep for "^gcc". +# +_IS_BUILTIN_GCC!= \ + gccpath="`${TYPE} ${CC} | ${AWK} '{ print $$NF }'`"; \ + case $$gccpath in \ + ${LOCALBASE}/*) \ + ${ECHO} "NO"; \ + ;; \ + *) \ + if ${CC} -v 2>&1 | ${GREP} -q 'gcc version'; then \ + ${ECHO} "YES"; \ + else \ + ${ECHO} "NO"; \ + fi; \ + ;; \ + esac +.endif + +# Distill the GCC_REQD list into a single _GCC_REQD value that is the +# highest version of GCC required. +# +_GCC_STRICTEST_REQD?= none +.for _version_ in ${GCC_REQD} +. for _pkg_ in gcc-${_version_} +. if ${_GCC_STRICTEST_REQD} == "none" +_GCC_PKG_SATISFIES_DEP= YES +. for _vers_ in ${GCC_REQD} +. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) +_GCC_PKG_SATISFIES_DEP!= \ + if ${PKG_ADMIN} pmatch 'gcc>=${_vers_}' ${_pkg_}; then \ + ${ECHO} "YES"; \ + else \ + ${ECHO} "NO"; \ + fi +. endif +. endfor +. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) +_GCC_STRICTEST_REQD= ${_version_} +. endif +. endif +. endfor +.endfor +_GCC_REQD= ${_GCC_STRICTEST_REQD} + +# Determine whether we require GCC-2.x or GCC-3.x by examining _GCC_REQD. +.for _pattern_ in ${_GCC2_PATTERNS} +. if !empty(_GCC_REQD:M${_pattern_}) +_GCC2_REQD:= ${_GCC_REQD} +. endif +.endfor +.for _pattern_ in ${_GCC3_PATTERNS} +. if !empty(_GCC_REQD:M${_pattern_}) +_GCC3_REQD:= ${_GCC_REQD} +. endif +.endfor +.if defined(_GCC2_REQD) +_GCC_REQD:= ${_GCC2_REQD} +_GCC_PKGBASE= gcc +_GCC_PKGSRCDIR= ../../lang/gcc +. if !empty(PKGPATH:Mlang/gcc) +_IGNORE_GCC_REQD= yes +MAKEFLAGS+= _IGNORE_GCC_REQD=yes +. endif +.elif defined(_GCC3_REQD) +_GCC_REQD:= ${_GCC3_REQD} +_GCC_PKGBASE= gcc3 +_GCC_PKGSRCDIR= ../../lang/gcc3 +. if !empty(PKGPATH:Mlang/gcc3) +_IGNORE_GCC_REQD= yes +MAKEFLAGS+= _IGNORE_GCC_REQD=yes +. endif +.endif +_GCC_DEPENDS= ${_GCC_PKGBASE}>=${_GCC_REQD} + +.if defined(_IGNORE_GCC_REQD) +_USE_PKGSRC_GCC= NO +.endif + +.if !defined(_USE_PKGSRC_GCC) +. if !empty(_IS_BUILTIN_GCC:M[nN][oO]) +_USE_PKGSRC_GCC= YES +. else +_GCC_VERSION_STRING!= ${CC} -v 2>&1 | ${GREP} 'gcc version' +. if !empty(_GCC_VERSION_STRING:Megcs*) +_GCC_VERSION= 2.8.1 # egcs is considered to be gcc-2.8.1. +. elif !empty(_GCC_VERSION_STRING:Mgcc*) +_GCC_VERSION!= ${CC} -dumpversion +. else +_GCC_VERSION= 0 +. endif +# +# Note that the actual package name isn't really important here as we're +# just trying to do comparisons of version numbers. +# +_GCC_TEST_DEPENDS= cc>=${GCC_REQD} +_GCC_PKG= cc-${_GCC_VERSION} +_USE_PKGSRC_GCC!= \ + if ${PKG_ADMIN} pmatch '${_GCC_TEST_DEPENDS}' ${_GCC_PKG}; then \ + ${ECHO} "NO"; \ + else \ + ${ECHO} "YES"; \ + fi +. endif +.endif + +.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +# +# Ensure that the correct rpath is passed to the linker if we need to +# link against gcc shared libs. +# +_COMPILER_LD_FLAG= -Wl, +_GCC_SUBPREFIX!= \ + if ${PKG_INFO} -qe ${_GCC_PKGBASE}; then \ + ${PKG_INFO} -f ${_GCC_PKGBASE} | \ + ${GREP} "File:.*bin/gcc" | \ + ${SED} -e "s/.*File: *//;s/bin\/gcc.*//;q"; \ + else \ + ${ECHO} "not_found/"; \ + fi +_GCC_PREFIX= ${LOCALBASE}/${_GCC_SUBPREFIX} +_GCC_LIBGCCDIR!= \ + if [ -x ${_GCC_PREFIX}bin/gcc ]; then \ + ${DIRNAME} `${_GCC_PREFIX}bin/gcc --print-libgcc-file-name`; \ + else \ + ${ECHO} "not_found"; \ + fi +_GCC_ARCHSUBDIR= ${_GCC_LIBGCCDIR:S|^${LOCALBASE}/${_GCC_SUBPREFIX}||} +_GCC_ARCHDIR= ${_GCC_PREFIX}${_GCC_ARCHSUBDIR} + +_GCC_LDFLAGS= # empty +.for _dir_ in ${_GCC_ARCHDIR} ${_GCC_PREFIX}lib +_GCC_LDFLAGS+= -L${_dir_} ${_COMPILER_LD_FLAG}${RPATH_FLAG}${_dir_} +.endfor +LDFLAGS+= ${_GCC_LDFLAGS} +.endif + +# Check if any of the versions of GCC in pkgsrc can satisfy the _GCC_REQD +# requirement. +# +.if !defined(_NEED_NEWER_GCC) +_PKGSRC_GCC_VERSION= ${_GCC_PKGBASE}-${_GCC_DIST_VERSION} +_NEED_NEWER_GCC!= \ + if ${PKG_ADMIN} pmatch '${_GCC_DEPENDS}' ${_PKGSRC_GCC_VERSION}; then \ + ${ECHO} "NO"; \ + else \ + ${ECHO} "YES"; \ + fi +MAKEFLAGS+= _NEED_NEWER_GCC="${_NEED_NEWER_GCC}" +.endif +.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && \ + !empty(_NEED_NEWER_GCC:M[yY][eE][sS]) +PKG_SKIP_REASON= "Unable to satisfy dependency: ${_GCC_DEPENDS}" +.endif + +# Add the dependency on GCC. +.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +. if empty(USE_BUILDLINK2:M[nN][oO]) +. include "${_GCC_PKGSRCDIR}/buildlink2.mk" +#. elif !empty(USE_BUILDLINK3:M[yY][eE][sS]) +#. include "${_GCC_PKGSRCDIR}/buildlink3.mk" +. else +. if defined(USE_GCC_SHLIB) +DEPENDS+= ${_GCC_DEPENDS}:${_GCC_PKGSRCDIR} +. else +BUILD_DEPENDS+= ${_GCC_DEPENDS}:${_GCC_PKGSRCDIR} +. endif +. endif +.endif + +# Point the variables that specify the compiler to the installed +# GCC executables. +# +.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +. if exists(${_GCC_PREFIX}bin/gcc) +PATH:= ${_GCC_PREFIX}bin:${PATH} +CC= ${_GCC_PREFIX}bin/gcc +CPP= ${_GCC_PREFIX}bin/cpp +CXX= ${_GCC_PREFIX}bin/g++ +F77= ${_GCC_PREFIX}bin/g77 +PKG_FC:= ${F77} +. endif +.endif + +# Pass the required flags to imake to tell it we're using gcc on Solaris. +.if ${OPSYS} == "SunOS" +IMAKEOPTS+= -DHasGcc2=YES -DHasGcc2ForCplusplus=YES +.endif + +.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) +CC_VERSION!= if ${CC} -dumpversion > /dev/null 2>&1; then \ + ${ECHO} "gcc-`${CC} -dumpversion`"; \ + else \ + ${ECHO} "gcc-${_GCC_REQD}"; \ + fi +.else +CC_VERSION= ${_GCC_PKG} +.endif + +.endif # COMPILER_GCC_MK diff --git a/mk/compiler/mipspro.mk b/mk/compiler/mipspro.mk new file mode 100644 index 00000000000..05448c0e53f --- /dev/null +++ b/mk/compiler/mipspro.mk @@ -0,0 +1,15 @@ +# $NetBSD: mipspro.mk,v 1.1 2004/02/01 00:31:00 jlam Exp $ + +.if !defined(COMPILER_MIPSPRO_MK) +COMPILER_MIPSPRO_MK= defined + +.include "../../mk/bsd.prefs.mk" + +MISPROBASE?= /usr +CC= ${MIPSPROBASE}/bin/cc +CPP= ${MIPSPROBASE}/bin/cc -E +CXX= ${MIPSPROBASE}/bin/CC + +CC_VERSION!= ${CC} -V 2>&1 | ${GREP} '^cc' + +.endif # COMPILER_MIPSPRO_MK diff --git a/mk/compiler/sunpro.mk b/mk/compiler/sunpro.mk new file mode 100644 index 00000000000..d99f521d394 --- /dev/null +++ b/mk/compiler/sunpro.mk @@ -0,0 +1,17 @@ +# $NetBSD: sunpro.mk,v 1.1 2004/02/01 00:31:00 jlam Exp $ + +.if !defined(COMPILER_SUNPRO_MK) +COMPILER_SUNPRO_MK= defined + +.include "../../mk/bsd.prefs.mk" + +SUNWSPROBASE?= /opt/SUNWspro +CC= ${SUNWSPROBASE}/bin/cc +CPP= ${SUNWSPROBASE}/bin/cc -E +CXX= ${SUNWSPROBASE}/bin/CC + +_COMPILER_LD_FLAG= # empty + +CC_VERSION!= ${CC} -V 2>&1 | ${GREP} '^cc' + +.endif # COMPILER_SUNPRO_MK |