Changeset View
Changeset View
Standalone View
Standalone View
Mk/Uses/objc.mk
# Objective C support | # Objective C support | ||||
# | # | ||||
# Feature: objc | # Feature: objc | ||||
# Usage: USES=objc | # Usage: USES=objc | ||||
# | # | ||||
# MAINTAINER: objc@FreeBSD.org | # MAINTAINER: objc@FreeBSD.org | ||||
.if !defined(_INCLUDE_USES_OBJC_MK) | .if !defined(_INCLUDE_USES_OBJC_MK) | ||||
_INCLUDE_USES_OBJC_MK= yes | _INCLUDE_USES_OBJC_MK= yes | ||||
OBJC_CLANG_VERSION=70 | OBJC_CLANG_VERSION=70 | ||||
objc_ARGS?= | objc_ARGS?= | ||||
.if !empty(objc_ARGS) && ! ${objc_ARGS:Mcompiler} | . if !empty(objc_ARGS) && ! ${objc_ARGS:Mcompiler} | ||||
IGNORE= USES=objc only accepts no arguments or 'compiler' | IGNORE= USES=objc only accepts no arguments or 'compiler' | ||||
.endif | . endif | ||||
_CC_hash:= ${CC:hash} | _CC_hash:= ${CC:hash} | ||||
.if defined(_OBJC_CCVERSION_${_CC_hash}) | . if defined(_OBJC_CCVERSION_${_CC_hash}) | ||||
_CCVERSION= ${_OBJC_CCVERSION_${_CC_hash}} | _CCVERSION= ${_OBJC_CCVERSION_${_CC_hash}} | ||||
.else | . else | ||||
_CCVERSION!= ${CC} --version | _CCVERSION!= ${CC} --version | ||||
_OBJC_CCVERSION_${_CC_hash}= ${_CCVERSION} | _OBJC_CCVERSION_${_CC_hash}= ${_CCVERSION} | ||||
PORTS_ENV_VARS+= _OBJC_CCVERSION_${_CC_hash} | PORTS_ENV_VARS+= _OBJC_CCVERSION_${_CC_hash} | ||||
.endif | . endif | ||||
COMPILER_VERSION= ${_CCVERSION:M[0-9]*.[0-9]*:[1]:C/([0-9]+)\.([0-9]+)\..*/\1\2/} | COMPILER_VERSION= ${_CCVERSION:M[0-9]*.[0-9]*:[1]:C/([0-9]+)\.([0-9]+)\..*/\1\2/} | ||||
.if ${_CCVERSION:Mclang} | . if ${_CCVERSION:Mclang} | ||||
COMPILER_TYPE= clang | COMPILER_TYPE= clang | ||||
.else | . else | ||||
COMPILER_TYPE= gcc | COMPILER_TYPE= gcc | ||||
.endif | . endif | ||||
ALT_COMPILER_VERSION= 0 | ALT_COMPILER_VERSION= 0 | ||||
ALT_COMPILER_TYPE= none | ALT_COMPILER_TYPE= none | ||||
_ALTCCVERSION= none | _ALTCCVERSION= none | ||||
.if defined(_OBJC_ALTCCVERSION_${_CC_hash}) | . if defined(_OBJC_ALTCCVERSION_${_CC_hash}) | ||||
_ALTCCVERSION= ${_OBJC_ALTCCVERSION_${_CC_hash}} | _ALTCCVERSION= ${_OBJC_ALTCCVERSION_${_CC_hash}} | ||||
.else | . else | ||||
.if ${COMPILER_TYPE} == gcc && exists(/usr/bin/clang) | . if ${COMPILER_TYPE} == gcc && exists(/usr/bin/clang) | ||||
_ALTCCVERSION!= /usr/bin/clang --version | _ALTCCVERSION!= /usr/bin/clang --version | ||||
.elif ${COMPILER_TYPE} == clang && exists(/usr/bin/gcc) | . elif ${COMPILER_TYPE} == clang && exists(/usr/bin/gcc) | ||||
_ALTCCVERSION!= /usr/bin/gcc --version | _ALTCCVERSION!= /usr/bin/gcc --version | ||||
.endif | . endif | ||||
_OBJC_ALTCCVERSION_${_CC_hash}= ${_ALTCCVERSION} | _OBJC_ALTCCVERSION_${_CC_hash}= ${_ALTCCVERSION} | ||||
PORTS_ENV_VARS+= _OBJC_ALTCCVERSION_${_CC_hash} | PORTS_ENV_VARS+= _OBJC_ALTCCVERSION_${_CC_hash} | ||||
.endif | . endif | ||||
ALT_COMPILER_VERSION= ${_ALTCCVERSION:M[0-9]*.[0-9]*:[1]:C/([0-9]+)\.([0-9]+)\..*/\1\2/} | ALT_COMPILER_VERSION= ${_ALTCCVERSION:M[0-9]*.[0-9]*:[1]:C/([0-9]+)\.([0-9]+)\..*/\1\2/} | ||||
.if ${_ALTCCVERSION:Mclang} | . if ${_ALTCCVERSION:Mclang} | ||||
ALT_COMPILER_TYPE= clang | ALT_COMPILER_TYPE= clang | ||||
.elif !empty(_ALTCCVERSION) | . elif !empty(_ALTCCVERSION) | ||||
ALT_COMPILER_TYPE= gcc | ALT_COMPILER_TYPE= gcc | ||||
.endif | . endif | ||||
# We do always need clang and prefer a recent version | # We do always need clang and prefer a recent version | ||||
.if (${COMPILER_TYPE} == clang && ${COMPILER_VERSION} < ${OBJC_CLANG_VERSION}) || ${COMPILER_TYPE} != clang | . if (${COMPILER_TYPE} == clang && ${COMPILER_VERSION} < ${OBJC_CLANG_VERSION}) || ${COMPILER_TYPE} != clang | ||||
.if ${ALT_COMPILER_TYPE} == clang && ${ALT_COMPILER_VERSION} >= ${OBJC_CLANG_VERSION} | . if ${ALT_COMPILER_TYPE} == clang && ${ALT_COMPILER_VERSION} >= ${OBJC_CLANG_VERSION} | ||||
CC= /usr/bin/clang | CC= /usr/bin/clang | ||||
CPP= /usr/bin/clang-cpp | CPP= /usr/bin/clang-cpp | ||||
CXX= /usr/bin/clang++ | CXX= /usr/bin/clang++ | ||||
OBJC_LLD= lld | OBJC_LLD= lld | ||||
.else | . else | ||||
BUILD_DEPENDS+= ${LOCALBASE}/bin/clang${OBJC_CLANG_VERSION}:devel/llvm${OBJC_CLANG_VERSION} | BUILD_DEPENDS+= ${LOCALBASE}/bin/clang${OBJC_CLANG_VERSION}:devel/llvm${OBJC_CLANG_VERSION} | ||||
CPP= ${LOCALBASE}/bin/clang-cpp${OBJC_CLANG_VERSION} | CPP= ${LOCALBASE}/bin/clang-cpp${OBJC_CLANG_VERSION} | ||||
CC= ${LOCALBASE}/bin/clang${OBJC_CLANG_VERSION} | CC= ${LOCALBASE}/bin/clang${OBJC_CLANG_VERSION} | ||||
CXX= ${LOCALBASE}/bin/clang++${OBJC_CLANG_VERSION} | CXX= ${LOCALBASE}/bin/clang++${OBJC_CLANG_VERSION} | ||||
OBJC_LLD= lld${OBJC_CLANG_VERSION} | OBJC_LLD= lld${OBJC_CLANG_VERSION} | ||||
.endif | . endif | ||||
.endif | . endif | ||||
.if ! ${objc_ARGS:Mcompiler} | . if ! ${objc_ARGS:Mcompiler} | ||||
LIB_DEPENDS+= libobjc.so.4.6:lang/libobjc2 | LIB_DEPENDS+= libobjc.so.4.6:lang/libobjc2 | ||||
OBJCFLAGS+= -I${LOCALBASE}/include | OBJCFLAGS+= -I${LOCALBASE}/include | ||||
LDFLAGS+= -L${LOCALBASE}/lib | LDFLAGS+= -L${LOCALBASE}/lib | ||||
.endif | . endif | ||||
CONFIGURE_ENV+= OBJC="${CC}" OBJCFLAGS="${OBJCFLAGS}" | CONFIGURE_ENV+= OBJC="${CC}" OBJCFLAGS="${OBJCFLAGS}" | ||||
MAKE_ENV+= OBJC="${CC}" OBJCFLAGS="${OBJCFLAGS}" | MAKE_ENV+= OBJC="${CC}" OBJCFLAGS="${OBJCFLAGS}" | ||||
.endif | .endif |