summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mk/compiler/bsd.compiler.mk93
-rw-r--r--mk/compiler/ccache.mk45
-rw-r--r--mk/compiler/distcc.mk45
-rw-r--r--mk/compiler/gcc.mk224
-rw-r--r--mk/compiler/mipspro.mk15
-rw-r--r--mk/compiler/sunpro.mk17
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