6 MASTER_SITES= http://llvm.org/releases/3.6.0/
7 PKGNAMESUFFIX= ${LLVM_SUFFIX}
8 DISTNAME= ${CLANG_NAME}
9 DISTFILES= ${CLANG_SOURCE} \
12 MAINTAINER= brooks@FreeBSD.org
13 COMMENT= C, Objective-C, and C++ compiler
15 CLANG_NAME= cfe-${DISTVERSION}.src
16 CLANG_SOURCE= ${CLANG_NAME}${EXTRACT_SUFX}
17 CLANG_EXTRACT= cfe-${DISTVERSION}.src
18 LLVM_NAME= llvm-${DISTVERSION}.src
19 LLVM_SOURCE= ${LLVM_NAME}${EXTRACT_SUFX}
20 LLVM_EXTRACT= llvm-${DISTVERSION}.src
21 LIBNAME= libLLVM-${LLVM_RELEASE:C/([0-9]\.[0-9]).*/\1/}.so
23 WRKSRC= ${WRKDIR}/${LLVM_EXTRACT}
24 BUILD_WRKSRC= ${WRKSRC}/tools/clang
25 INSTALL_WRKSRC= ${WRKSRC}/tools/clang
27 BUILD_DEPENDS+= llc${LLVM_SUFFIX}:${PORTSDIR}/devel/llvm${LLVM_SUFFIX}
28 RUN_DEPENDS+= llc${LLVM_SUFFIX}:${PORTSDIR}/devel/llvm${LLVM_SUFFIX}
30 LLVM_SUFFIX= ${PORTVERSION:C/([0-9]\.[0-9]).*/\1/:S/.//g:C/r.//}
31 LLVM_RELEASE= ${PORTVERSION:C/([0-9]\.[0-9].[0-9]).*/\1/}
32 LLVM_PREFIX= ${PREFIX}/llvm${LLVM_SUFFIX}
33 DATADIR= ${PREFIX}/share/${PORTNAME}${LLVM_SUFFIX}
34 DOCSDIR= ${PREFIX}/share/doc/${PORTNAME}${LLVM_SUFFIX}
35 PYTHONLIBDIR= ${LLVM_PREFIX}/lib/python
38 GNU_CONFIGURE_PREFIX= ${LLVM_PREFIX}
39 USES= compiler:c++11-lib gmake perl5 python:build tar:xz
42 MAKE_ARGS= CLANG_TBLGEN=${WRKSRC}/${RELTYPE}/bin/clang-tblgen \
43 LLVMIncDir=${LLVM_PREFIX}/include \
44 LLVMToolDir=${LLVM_PREFIX}/bin \
45 LLVMLibDir=${LLVM_PREFIX}/lib
47 SUB_FILES= llvm-wrapper.sh
48 SUB_LIST= LLVM_PREFIX="${LLVM_PREFIX}" LLVM_SUFFIX="${LLVM_SUFFIX}"
50 OPTIONS_DEFINE= ASSERTS DOCS
52 ASSERTS_DESC= Enable assertions (thread unsafe)
54 CONFIGURE_ARGS+= --enable-optimized --enable-shared
55 # Build some docs manually later
56 CONFIGURE_ARGS+= --disable-docs
57 # Don't build bindings, the ocaml ones break
58 CONFIGURE_ARGS+= --enable-bindings=none
60 PLIST_SUB+= LLVM_SUFFIX=${LLVM_SUFFIX} \
61 LLVM_RELEASE=${LLVM_RELEASE}
62 COMMANDS= c++-analyzer \
73 FIRST_COMMAND= ${COMMANDS:C/^/XXXX/1:MXXXX*:C/^XXXX//}
75 PORTDATA= scanview.css \
78 .include <bsd.port.options.mk>
80 .if ${PORT_OPTIONS:MASSERTS}
81 CONFIGURE_ARGS+= --enable-assertions
82 RELTYPE= Release+Asserts
84 CONFIGURE_ARGS+= --disable-assertions
88 .include <bsd.port.pre.mk>
90 # keep in sync with /usr/src/lib/clang/clang.build.mk
91 CONFIGURE_TARGET:=${ARCH:C/amd64/x86_64/:C/armv6hf/armv6/}-portbld-${OPSYS:tl}${OSREL}
93 .if ${PORT_OPTIONS:MASSERTS}
95 @if [ "`llvm-config${LLVM_SUFFIX} --build-mode`" != ${RELTYPE} ]; then \
97 ${ECHO_MSG} ASSERTS option enabled, but devel/llvm${LLVM_SUFFIX} was compiled without ASSERTS. ;\
98 ${ECHO_MSG} Correct options mismatch to proceed. ;\
105 ${RM} -f ${BUILD_WRKSRC}
106 ${MV} ${WRKDIR}/${CLANG_EXTRACT} ${BUILD_WRKSRC}
109 ${REINPLACE_CMD} -e 's|${LLVM_RELEASE}svn|${LLVM_RELEASE}|g' \
111 ${REINPLACE_CMD} -e 's|\(PROJ_docsdir.*:=\).*$$|\1${DOCSDIR}|g' \
112 ${WRKSRC}/Makefile.config.in
113 ${REINPLACE_CMD} -e 's|\(PROJ_mandir.*:=\).*$$|\1${MANPREFIX}/man|g' \
114 ${WRKSRC}/Makefile.config.in
115 ${REINPLACE_CMD} -e 's|/usr/local/|${LOCALBASE}/|g' \
116 ${WRKSRC}/tools/clang/lib/Frontend/InitHeaderSearch.cpp
117 ${REINPLACE_CMD} -e 's|%%DATADIR%%|${DATADIR}/|g' \
118 -e 's|%%LLVM_SUFFIX%%|${LLVM_SUFFIX}|g' \
119 ${WRKSRC}/tools/clang/tools/scan-build/scan-build
122 ${LN} -sf ${LLVM_PREFIX}/include/llvm/IR/Intrinsics.gen \
123 ${WRKSRC}/include/llvm/IR/
124 ${MKDIR} ${WRKSRC}/${RELTYPE}/lib
125 ${LN} -sf ${LLVM_PREFIX}/lib/${LIBNAME} ${WRKSRC}/${RELTYPE}/lib/
126 ${LN} -sf ${LLVM_PREFIX}/lib/libLLVMTableGen.a ${WRKSRC}/${RELTYPE}/lib/
127 ${LN} -sf ${LLVM_PREFIX}/lib/libLLVMSupport.a ${WRKSRC}/${RELTYPE}/lib/
128 cd ${WRKSRC}/utils/unittest && ${MAKE_CMD}
131 @cd ${WRKSRC}/tools/clang/docs/tools && ${MAKE_CMD} man
132 @cd ${WRKSRC}/tools/clang/docs/tools && ${MAKE_CMD} html ps
135 ${STRIP_CMD} ${STAGEDIR}${LLVM_PREFIX}/lib/libclang.so
136 ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/clang \
137 ${STAGEDIR}${LLVM_PREFIX}/bin/clang-cpp
138 ${INSTALL_SCRIPT} ${WRKDIR}/llvm-wrapper.sh \
139 ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX}
140 ${INSTALL_SCRIPT} ${WRKSRC}/tools/clang/tools/scan-build/ccc-analyzer \
141 ${WRKSRC}/tools/clang/tools/scan-build/c++-analyzer \
142 ${WRKSRC}/tools/clang/tools/scan-build/scan-build \
143 ${WRKSRC}/tools/clang/tools/scan-view/scan-view \
144 ${STAGEDIR}${LLVM_PREFIX}/bin/
145 ${MKDIR} ${STAGEDIR}${DATADIR}
146 ${INSTALL_DATA} ${WRKSRC}/tools/clang/tools/scan-build/scanview.css \
147 ${WRKSRC}/tools/clang/tools/scan-build/sorttable.js \
148 ${STAGEDIR}${DATADIR}
149 .for command in ${COMMANDS:C/^/XXXX/1:NXXXX*}
150 test -e ${STAGEDIR}${LLVM_PREFIX}/bin/${command}
151 ${LN} -f ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX} \
152 ${STAGEDIR}${PREFIX}/bin/${command}${LLVM_SUFFIX}
154 ${MKDIR} ${STAGEDIR}${PYTHONLIBDIR}
155 ${MKDIR} ${STAGEDIR}${PYTHONLIBDIR}/Resources
156 ${INSTALL_SCRIPT} ${WRKSRC}/tools/clang/tools/scan-view/*.py \
157 ${STAGEDIR}${PYTHONLIBDIR}
158 ${INSTALL_SCRIPT} ${WRKSRC}/tools/clang/tools/scan-view/Resources/* \
159 ${STAGEDIR}${PYTHONLIBDIR}/Resources
160 ${MKDIR} ${STAGEDIR}${DATADIR}
161 ${INSTALL_DATA} ${WRKSRC}/tools/clang/tools/scan-build/scanview.css \
162 ${WRKSRC}/tools/clang/tools/scan-build/sorttable.js \
163 ${STAGEDIR}${DATADIR}
164 cd ${WRKSRC}/tools/clang/docs/tools && \
165 ${MAKE_CMD} DESTDIR=${STAGEDIR}/ install-html install-ps
166 ${INSTALL_MAN} ${WRKSRC}/tools/clang/docs/tools/clang.1 \
167 ${STAGEDIR}${MANPREFIX}/man/man1/clang${LLVM_SUFFIX}.1
168 ${INSTALL_MAN} ${WRKSRC}/tools/clang/tools/scan-build/scan-build.1 \
169 ${STAGEDIR}${MANPREFIX}/man/man1/scan-build${LLVM_SUFFIX}.1
171 PLIST_FILE_LIST= ${COMMANDS:S|^|bin/|} \
173 PLIST_DIR_LIST= include/clang \
180 .for command in ${COMMANDS}
181 ${ECHO_CMD} bin/${command}%%LLVM_SUFFIX%% >> ${PLIST}
183 (ls ${PLIST_FILE_LIST:S|^|${STAGEDIR}${LLVM_PREFIX}/|}; \
184 ${FIND} ${PLIST_DIR_LIST:S|^|${STAGEDIR}${LLVM_PREFIX}/|} -type f) \
185 | ${SED} -e 's|${STAGEDIR}${PREFIX}/||' \
186 -e 's|${LLVM_SUFFIX}|%%LLVM_SUFFIX%%|' \
187 -e 's|${LLVM_RELEASE}|%%LLVM_RELEASE%%|' | ${SORT} >> ${PLIST}
188 echo man/man1/clang%%LLVM_SUFFIX%%.1.gz >> ${PLIST}
189 echo man/man1/scan-build%%LLVM_SUFFIX%%.1.gz >> ${PLIST}
190 ${FIND} ${STAGEDIR}${DOCSDIR} -type f | \
191 ${SED} -e 's|${STAGEDIR}${DOCSDIR}|%%PORTDOCS%%%%DOCSDIR%%|' | \
195 .if !defined(PATCH_REV)
196 .error svn-patch requires that PATCH_REV be set
198 _PATCH_FILE=${FILESDIR}/patch-svn-${PATCH_REV}
199 _LLVM_BASE=http://llvm.org/svn/llvm-project/cfe/trunk
201 ${PRINTF} "$$%s$$\n" FreeBSD > ${_PATCH_FILE}
202 svn log -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE}
203 svn diff -c ${PATCH_REV} ${_LLVM_BASE} | \
204 ${SED} -e 's;^--- ;--- tools/clang/;' | \
205 ${SED} -e 's;^+++ ;+++ tools/clang/;' >> \
209 .include <bsd.port.post.mk>