Commit 4b7d4e01 authored by brooks's avatar brooks
Browse files

Add llvm32 and clang32 ports modeled on the llvm33 and clang33 ports.

These ports install binaries with "32" suffixes and most data lives in
${PREFIX}/llvm32 so there are no conflicts.

NOTE: devel/llvm and lang/clang will shortly be removed in favor of
these ports.
parent 3bf26945
......@@ -1150,6 +1150,7 @@
SUBDIR += llvm
SUBDIR += llvm-devel
SUBDIR += llvm31
SUBDIR += llvm32
SUBDIR += llvm33
SUBDIR += lmdbg
SUBDIR += lndir
......
# $FreeBSD$
PORTNAME= llvm
PORTVERSION= 3.2
CATEGORIES= devel lang
MASTER_SITES= http://llvm.org/releases/${PORTVERSION}/
DISTNAME= ${PORTNAME}-${PORTVERSION}.src
PKGNAMESUFFIX= ${LLVM_SUFFIX}
MAINTAINER= brooks@FreeBSD.org
COMMENT= The LLVM Compiler Infrastructure
LIB_DEPENDS= execinfo:${PORTSDIR}/devel/libexecinfo
LLVM_SUFFIX= ${PORTVERSION:S/.//g}
LLVM_PREFIX= ${PREFIX}/llvm${LLVM_SUFFIX}
DOCSDIR= ${PREFIX}/share/doc/${PORTNAME}${LLVM_SUFFIX}
DATADIR= ${PREFIX}/share/${PORTNAME}${LLVM_SUFFIX}
USES= gmake perl5
GNU_CONFIGURE= yes
GNU_CONFIGURE_PREFIX= ${LLVM_PREFIX}
USE_LDCONFIG= ${LLVM_PREFIX}/lib
SUB_FILES= llvm-wrapper.sh
SUB_LIST= LLVM_PREFIX="${LLVM_PREFIX}" LLVM_SUFFIX="${LLVM_SUFFIX}"
# Suggested tweaks from http://llvm.org/docs/Packaging.html
CONFIGURE_ARGS+= --enable-shared
MAKE_ARGS+= REQUIRES_RTTI=1
LIBNAME= libLLVM-${DISTVERSION:C/\rc[0-9]//}.so
CONFIGURE_ARGS+= --enable-bindings=none
CONFIGURE_ARGS+= --enable-optimized
OPTIONS_DEFINE= ASSERTS CMAKE DOCS LIT LTOPLUGIN MANPAGES
ASSERTS_DESC= Enable assertions (thread unsafe)
CMAKE_DESC= Build cmake support files
LIT_DESC= Install lit and FileCheck test tools (requires python)
LTOPLUGIN_DESC= Build LTO plugin (requires gold)
OPTIONS_DEFAULT= CMAKE LIT MANPAGES
OPTIONS_SUB= yes
PLIST_SUB+= PORTVERSION=${PORTVERSION}
COMMANDS= bugpoint \
llc \
lli \
llvm-ar \
llvm-as \
llvm-bcanalyzer \
llvm-config \
llvm-cov \
llvm-diff \
llvm-dis \
llvm-dwarfdump \
llvm-extract \
llvm-link \
llvm-mc \
llvm-mcmarkup \
llvm-nm \
llvm-objdump \
llvm-prof \
llvm-ranlib \
llvm-readobj \
llvm-rtdyld \
llvm-size \
llvm-stress \
llvm-tblgen \
macho-dump \
opt
FIRST_COMMAND= ${COMMANDS:C/^/XXXX/1:MXXXX*:C/^XXXX//}
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MASSERTS}
CONFIGURE_ARGS+= --enable-assertions
.else
CONFIGURE_ARGS+= --disable-assertions
.endif
.if ${PORT_OPTIONS:MCMAKE}
BUILD_DEPENDS+= cmake:${PORTSDIR}/devel/cmake
PORTDATA+= cmake
.endif
.if ${PORT_OPTIONS:MDOCS} || ${PORT_OPTIONS:MMANPAGES}
BUILD_DEPENDS+= sphinx-build:${PORTSDIR}/textproc/py-sphinx
.endif
.if ${PORT_OPTIONS:MDOCS}
CONFIGURE_ARGS+= --enable-docs
.else
CONFIGURE_ARGS+= --disable-docs
.endif
.if ${PORT_OPTIONS:MLIT}
MAN1SRCS+= lit.1
USE_PYTHON= yes
LIT_COMMANDS= lit llvm-lit FileCheck
.else
USE_PYTHON_BUILD= yes
.endif
.if ${PORT_OPTIONS:MLTOPLUGIN}
BUILD_DEPENDS+= ld.gold:${PORTSDIR}/devel/binutils
RUN_DEPENDS+= ld.gold:${PORTSDIR}/devel/binutils
CONFIGURE_ARGS+= --with-binutils-include=${LOCALBASE}/include
PLIST_FILES+= llvm${LLVM_SUFFIX}/lib/LLVMgold.so
.endif
.if ${PORT_OPTIONS:MMANPAGES}
MAN1SRCS+= bugpoint.1 llc.1 lli.1 llvm-ar.1 llvm-as.1 \
llvm-bcanalyzer.1 llvm-config.1 llvm-cov.1 llvm-diff.1 \
llvm-dis.1 llvm-extract.1 llvm-link.1 llvm-nm.1 \
llvm-prof.1 llvm-ranlib.1 llvm-stress.1 opt.1 tblgen.1
PLIST_FILES+= ${MAN1SRCS:S|^|man/man1/|:S|.1$|${LLVM_SUFFIX}.1.gz|}
.endif
.include <bsd.port.pre.mk>
.if ${ARCH} == "arm"
BROKEN= Does not compile on arm
.elif ${ARCH} == "sparc64"
BROKEN= does not compile on sparc64
.endif
.if ${ARCH} == "amd64" || ${ARCH} == "ia64"
CONFIGURE_ARGS+= --enable-pic --with-pic
.endif
.if ${ARCH} == "i386"
CONFIGURE_ARGS+= --with-optimize-option=-O2
.endif
post-patch:
${REINPLACE_CMD} -e 's|${PORTVERSION}svn|${PORTVERSION}|g' \
${WRKSRC}/configure
${REINPLACE_CMD} -e 's|\(PROJ_docsdir.*:=\).*$$|\1${DOCSDIR}|g' \
${WRKSRC}/Makefile.config.in
${REINPLACE_CMD} -e 's|\(PROJ_mandir.*:=\).*$$|\1${MANPREFIX}/man|g' \
${WRKSRC}/Makefile.config.in
${REINPLACE_CMD} -e 's|import lit|import lit${LLVM_SUFFIX}|' \
-e 's|from lit|from lit${LLVM_SUFFIX}|' \
-e 's|lit\.|lit${LLVM_SUFFIX}.|' \
${WRKSRC}/utils/lit/lit.py ${WRKSRC}/utils/lit/lit/*.py
.if ${PORT_OPTIONS:MCMAKE}
post-configure:
${MKDIR} ${WRKDIR}/cmake
cd ${WRKDIR}/cmake && cmake -G "Unix Makefiles" ${WRKSRC}
${REINPLACE_CMD} -e 's|${WRKDIR}/cmake|${LLVM_PREFIX}|' \
-e 's|${WRKSRC}/cmake/modules|${DATADIR}/cmake|' \
${WRKDIR}/cmake/share/llvm/cmake/LLVMConfig.cmake
.endif
post-build:
.if ${PORT_OPTIONS:MMANPAGES}
@cd ${WRKSRC}/docs && ${GMAKE} -f Makefile.sphinx man
.endif
.if ${PORT_OPTIONS:MDOCS}
@cd ${WRKSRC}/docs && ${GMAKE} -f Makefile.sphinx html
.endif
post-install:
${MV} ${STAGEDIR}${LLVM_PREFIX}/lib/${LIBNAME} \
${STAGEDIR}${LLVM_PREFIX}/lib/${LIBNAME}.0
${LN} -sf ${LIBNAME}.0 ${STAGEDIR}${LLVM_PREFIX}/lib/${LIBNAME}
${INSTALL_SCRIPT} ${WRKDIR}/llvm-wrapper.sh \
${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX}
.for command in ${COMMANDS:C/^/XXXX/1:NXXXX*}
test -e ${STAGEDIR}${LLVM_PREFIX}/bin/${command}
${LN} -f ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX} \
${STAGEDIR}${PREFIX}/bin/${command}${LLVM_SUFFIX}
.endfor
.if ${PORT_OPTIONS:MCMAKE}
${MKDIR} ${STAGEDIR}${DATADIR}/cmake
${INSTALL_DATA} ${WRKSRC}/cmake/modules/*.cmake \
${WRKDIR}/cmake/share/llvm/cmake/*.cmake \
${STAGEDIR}${DATADIR}/cmake/
.endif
.if ${PORT_OPTIONS:MDOCS}
${MKDIR} ${STAGEDIR}${DOCSDIR}/html
${FIND} ${WRKSRC}/docs/_build/html -type f | \
${XARGS} -I _DOC_ ${INSTALL_DATA} _DOC_ ${STAGEDIR}${DOCSDIR}/html/
.endif
.if ${PORT_OPTIONS:MLIT}
${INSTALL_SCRIPT} ${WRKSRC}/utils/lit/lit.py \
${STAGEDIR}${LLVM_PREFIX}/bin/lit
${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
${STAGEDIR}${LLVM_PREFIX}/bin/llvm-lit
${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
${STAGEDIR}${PREFIX}/bin/lit${LLVM_SUFFIX}
${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
${STAGEDIR}${PREFIX}/bin/llvm-lit${LLVM_SUFFIX}
${MKDIR} ${STAGEDIR}${PYTHON_SITELIBDIR}/lit${LLVM_SUFFIX}
${INSTALL_DATA} ${WRKSRC}/utils/lit/lit/*.py \
${STAGEDIR}${PYTHON_SITELIBDIR}/lit${LLVM_SUFFIX}
${INSTALL_PROGRAM} ${WRKSRC}/Release/bin/FileCheck \
${STAGEDIR}${LLVM_PREFIX}/bin/
${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/FileCheck \
${STAGEDIR}${PREFIX}/bin/FileCheck${LLVM_SUFFIX}
.endif
.if ${PORT_OPTIONS:MMANPAGES}
for man in ${MAN1SRCS}; do \
${INSTALL_MAN} ${WRKSRC}/docs/_build/man/$${man} \
${STAGEDIR}${MANPREFIX}/man/man1/$${man%.1}${LLVM_SUFFIX}.1 ; \
done
.endif
TEST_CMD= '(cd ${WRKSRC}/test; ${SETENV} ${MAKE_ENV} LD_LIBRARY_PATH=${WRKSRC}/Release/lib ${GMAKE} check-local-lit)'
regression-test: ${BUILD_COOKIE}
if [ `${ID} -u` = 0 ]; then \
${CHOWN} -R nobody ${WRKSRC}/test; \
su -m nobody -c ${TEST_CMD}; \
else \
${SH} -c ${TEST_CMD}; \
fi
build-plist:
${RM} -f ${PLIST}
.for command in ${COMMANDS}
${ECHO_CMD} bin/${command}${LLVM_SUFFIX} >> ${PLIST}
.endfor
.for command in ${LIT_COMMANDS}
${ECHO_CMD} %%LIT%%bin/${command}${LLVM_SUFFIX} >> ${PLIST}
${ECHO_CMD} %%LIT%%${LLVM_PREFIX:S|${PREFIX}/||}/bin/${command} >> ${PLIST}
.endfor
${FIND} ${STAGEDIR}${LLVM_PREFIX} -type f -o -type l | \
${GREP} -v 'lit$$' | ${GREP} -v 'FileCheck$$' | \
${GREP} -v man/man1 | ${SED} -e 's|${STAGEDIR}${PREFIX}/||' \
-e 's|${PORTVERSION}|%%PORTVERSION%%|' | \
${SORT} >> ${PLIST}
${FIND} ${STAGEDIR}${PYTHON_SITELIBDIR}/lit${LLVM_SUFFIX} -type f | \
${SED} -e 's|${STAGEDIR}${PYTHON_SITELIBDIR}|%%LIT%%%%PYTHON_SITELIBDIR%%|' | \
${SORT} >> ${PLIST}
${FIND} ${STAGEDIR}${DOCSDIR} -type f | \
${SED} -e 's|${STAGEDIR}${DOCSDIR}|%%PORTDOCS%%%%DOCSDIR%%|' | \
${SORT} >> ${PLIST}
${FIND} ${STAGEDIR}${LLVM_PREFIX} -type d | \
${SED} -e 's|${STAGEDIR}${PREFIX}/||' | \
${SORT} -r | ${SED} -e 's|^|@dirrm |' >> ${PLIST}
echo "%%LIT%%@dirrm %%PYTHON_SITELIBDIR%%/lit${LLVM_SUFFIX}" >> ${PLIST}
${FIND} ${STAGEDIR}${DOCSDIR} -type d | \
${SED} -e 's|${STAGEDIR}${DOCSDIR}|%%PORTDOCS%%@dirrm %%DOCSDIR%%|' | \
${SORT} -r >> ${PLIST}
.if make(svn-patch)
.if !defined(PATCH_REV)
.error svn-patch requires that PATCH_REV be set
.endif
_PATCH_FILE=${FILESDIR}/patch-svn-${PATCH_REV}
_LLVM_BASE=http://llvm.org/svn/llvm-project/llvm/trunk
svn-patch:
${PRINTF} "$$%s$$\n" FreeBSD > ${_PATCH_FILE}
svn log -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE}
svn diff -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE}
.endif
.include <bsd.port.post.mk>
#!/bin/sh
# $FreeBSD$
LLVM_PREFIX="%%LLVM_PREFIX%%"
LLVM_SUFFIX="%%LLVM_SUFFIX%%"
tool=$(basename $0)
tool="${LLVM_PREFIX}/bin/${tool%${LLVM_SUFFIX}}"
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}${LLVM_PREFIX}/lib" \
"${tool}" "${@}"
$NetBSD: patch-lib_Target_X86_X86JITInfo.cpp,v 1.1 2013/04/02 12:00:05 joerg Exp $
$FreeBSD$
It is not yet decided whether extern "C" applies to static functions, so
be explicit for now.
--- lib/Target/X86/X86JITInfo.cpp.orig 2013-04-01 12:16:22.000000000 +0000
+++ lib/Target/X86/X86JITInfo.cpp
@@ -342,6 +342,17 @@ extern "C" {
/// must locate the start of the stub or call site and pass it into the JIT
/// compiler function.
extern "C" {
+
+#if !(defined (X86_64_JIT) && defined(_MSC_VER))
+ // the following function is called only from this translation unit,
+ // unless we are under 64bit Windows with MSC, where there is
+ // no support for inline assembly
+static
+#endif
+void LLVM_ATTRIBUTE_USED
+X86CompilationCallback2(intptr_t *StackPtr, intptr_t RetAddr)
+__asm__("X86CompilationCallback2");
+
#if !(defined (X86_64_JIT) && defined(_MSC_VER))
// the following function is called only from this translation unit,
// unless we are under 64bit Windows with MSC, where there is
$FreeBSD$
------------------------------------------------------------------------
r170353 | chandlerc | 2012-12-17 18:48:07 +0000 (Mon, 17 Dec 2012) | 5 lines
Fix another SROA crasher, PR14601.
This was a silly oversight, we weren't pruning allocas which were used
by variable-length memory intrinsics from the set that could be widened
and promoted as integers. Fix that.
------------------------------------------------------------------------
Index: lib/Transforms/Scalar/SROA.cpp
===================================================================
--- lib/Transforms/Scalar/SROA.cpp (revision 170352)
+++ lib/Transforms/Scalar/SROA.cpp (revision 170353)
@@ -2150,7 +2150,7 @@
!canConvertValue(TD, ValueTy, AllocaTy))
return false;
} else if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(I->U->getUser())) {
- if (MI->isVolatile())
+ if (MI->isVolatile() || !isa<Constant>(MI->getLength()))
return false;
if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(I->U->getUser())) {
const AllocaPartitioning::MemTransferOffsets &MTO
Index: test/Transforms/SROA/basictest.ll
===================================================================
--- test/Transforms/SROA/basictest.ll (revision 170352)
+++ test/Transforms/SROA/basictest.ll (revision 170353)
@@ -1208,3 +1208,18 @@
ret i32 %y
; CHECK: ret i32
}
+
+define i32 @PR14601(i32 %x) {
+; Don't try to form a promotable integer alloca when there is a variable length
+; memory intrinsic.
+; CHECK: @PR14601
+
+entry:
+ %a = alloca i32
+; CHECK: alloca
+
+ %a.i8 = bitcast i32* %a to i8*
+ call void @llvm.memset.p0i8.i32(i8* %a.i8, i8 0, i32 %x, i32 1, i1 false)
+ %v = load i32* %a
+ ret i32 %v
+}
$FreeBSD$
------------------------------------------------------------------------
r175057 | d0k | 2013-02-13 13:40:35 +0000 (Wed, 13 Feb 2013) | 8 lines
X86: Disable generation of rep;movsl when %esi is used as a base pointer.
This happens when there is both stack realignment and a dynamic alloca in the
function. If we overwrite %esi (rep;movsl uses fixed registers) we'll lose the
base pointer and the next register spill will write into oblivion.
Fixes PR15249 and unbreaks firefox on i386/freebsd. Mozilla uses dynamic allocas
and freebsd a 4 byte stack alignment.
------------------------------------------------------------------------
Index: lib/Target/X86/X86SelectionDAGInfo.cpp
===================================================================
--- lib/Target/X86/X86SelectionDAGInfo.cpp (revision 175056)
+++ lib/Target/X86/X86SelectionDAGInfo.cpp (revision 175057)
@@ -202,6 +202,14 @@
SrcPtrInfo.getAddrSpace() >= 256)
return SDValue();
+ // ESI might be used as a base pointer, in that case we can't simply overwrite
+ // the register. Fall back to generic code.
+ const X86RegisterInfo *TRI =
+ static_cast<const X86RegisterInfo *>(DAG.getTarget().getRegisterInfo());
+ if (TRI->hasBasePointer(DAG.getMachineFunction()) &&
+ TRI->getBaseRegister() == X86::ESI)
+ return SDValue();
+
MVT AVT;
if (Align & 1)
AVT = MVT::i8;
Index: test/CodeGen/X86/stack-align-memcpy.ll
===================================================================
--- test/CodeGen/X86/stack-align-memcpy.ll (revision 0)
+++ test/CodeGen/X86/stack-align-memcpy.ll (revision 175057)
@@ -0,0 +1,18 @@
+; RUN: llc < %s -force-align-stack -mtriple i386-apple-darwin -mcpu=i486 | FileCheck %s
+
+%struct.foo = type { [88 x i8] }
+
+; PR15249
+; We can't use rep;movsl here because it clobbers the base pointer in %esi.
+define void @test1(%struct.foo* nocapture %x, i32 %y) nounwind {
+ %dynalloc = alloca i8, i32 %y, align 1
+ call void @bar(i8* %dynalloc, %struct.foo* align 4 byval %x)
+ ret void
+
+; CHECK: test1:
+; CHECK: andl $-16, %esp
+; CHECK: movl %esp, %esi
+; CHECK-NOT: rep;movsl
+}
+
+declare void @bar(i8* nocapture, %struct.foo* align 4 byval) nounwind
$FreeBSD$
------------------------------------------------------------------------
r175360 | d0k | 2013-02-16 15:00:16 +0000 (Sat, 16 Feb 2013) | 5 lines
MCParser: Reject .balign with non-pow2 alignments.
GNU as rejects them and there are configure scripts in the wild that check if
the assembler rejects ".align 3" to determine whether the alignment is in bytes
or powers of two.
------------------------------------------------------------------------
Index: lib/MC/MCParser/AsmParser.cpp
===================================================================
--- lib/MC/MCParser/AsmParser.cpp (revision 175359)
+++ lib/MC/MCParser/AsmParser.cpp (revision 175360)
@@ -2456,6 +2456,10 @@
}
Alignment = 1ULL << Alignment;
+ } else {
+ // Reject alignments that aren't a power of two, for gas compatibility.
+ if (!isPowerOf2_64(Alignment))
+ Error(AlignmentLoc, "alignment must be a power of 2");
}
// Diagnose non-sensical max bytes to align.
Index: test/MC/AsmParser/align_invalid.s
===================================================================
--- test/MC/AsmParser/align_invalid.s (revision 0)
+++ test/MC/AsmParser/align_invalid.s (revision 175360)
@@ -0,0 +1,10 @@
+# RUN: llvm-mc -triple i386-linux-gnu < %s 2>&1 | FileCheck %s -check-prefix=ELF
+# RUN: llvm-mc -triple i386-apple-darwin < %s 2>&1 | FileCheck %s -check-prefix=DARWIN
+
+.align 3
+# ELF: error: alignment must be a power of 2
+# DARWIN-NOT: error
+
+.align 32
+# ELF-NOT: error
+# DARWIN: error: invalid alignment value
$FreeBSD$
------------------------------------------------------------------------
r175962 | d0k | 2013-02-23 10:40:58 +0000 (Sat, 23 Feb 2013) | 3 lines
X86: Disable cmov-memory patterns on subtargets without cmov.
Fixes PR15115.
------------------------------------------------------------------------
Index: test/CodeGen/X86/no-cmov.ll
===================================================================
--- test/CodeGen/X86/no-cmov.ll (revision 0)
+++ test/CodeGen/X86/no-cmov.ll (revision 175962)
@@ -0,0 +1,11 @@
+; RUN: llc -march=x86 -mcpu=i486 < %s | FileCheck %s
+
+define i32 @test1(i32 %g, i32* %j) {
+ %tobool = icmp eq i32 %g, 0
+ %cmp = load i32* %j, align 4
+ %retval.0 = select i1 %tobool, i32 1, i32 %cmp
+ ret i32 %retval.0
+
+; CHECK: test1:
+; CHECK-NOT: cmov
+}
Index: lib/Target/X86/X86InstrCompiler.td
===================================================================
--- lib/Target/X86/X86InstrCompiler.td (revision 175961)
+++ lib/Target/X86/X86InstrCompiler.td (revision 175962)
@@ -1081,12 +1081,14 @@
// inverted.
multiclass CMOVmr<PatLeaf InvertedCond, Instruction Inst16, Instruction Inst32,
Instruction Inst64> {
- def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, InvertedCond, EFLAGS),
- (Inst16 GR16:$src2, addr:$src1)>;
- def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, InvertedCond, EFLAGS),
- (Inst32 GR32:$src2, addr:$src1)>;
- def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, InvertedCond, EFLAGS),
- (Inst64 GR64:$src2, addr:$src1)>;
+ let Predicates = [HasCMov] in {
+ def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, InvertedCond, EFLAGS),
+ (Inst16 GR16:$src2, addr:$src1)>;
+ def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, InvertedCond, EFLAGS),
+ (Inst32 GR32:$src2, addr:$src1)>;
+ def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, InvertedCond, EFLAGS),
+ (Inst64 GR64:$src2, addr:$src1)>;
+ }
}
defm : CMOVmr<X86_COND_B , CMOVAE16rm, CMOVAE32rm, CMOVAE64rm>;
$FreeBSD$
--- utils/llvm-build/llvmbuild/main.py.orig
+++ utils/llvm-build/llvmbuild/main.py
@@ -633,7 +633,13 @@
# We handle a few special cases of target names here for historical
# reasons, as these are the names configure currently comes up with.
- native_target_name = { 'x86' : 'X86',
+ native_target_name = { 'amd64' : 'X86',
+ 'arm' : 'ARM',
+ 'i386' : 'X86',
+ 'mips' : 'Mips',
+ 'powerpc' : 'PowerPC',
+ 'sparc64' : 'Sparc',
+ 'x86' : 'X86',
'x86_64' : 'X86',
'Unknown' : None }.get(opts.native_target,
opts.native_target)
Low Level Virtual Machine (LLVM) is:
- A compilation strategy designed to enable effective program
optimization across the entire lifetime of a program.
- A virtual instruction set.
- A compiler infrastructure.
- LLVM does not imply things that you would expect from a high-level
virtual machine. It does not require garbage collection or run-time
code generation.
WWW: http://llvm.org/
This diff is collapsed.
......@@ -34,6 +34,7 @@
SUBDIR += clang
SUBDIR += clang-devel
SUBDIR += clang31
SUBDIR += clang32
SUBDIR += clang33
SUBDIR += clay
SUBDIR += clisp
......
# $FreeBSD$
PORTNAME= clang
DISTVERSION= 3.2
CATEGORIES= lang devel
MASTER_SITES= http://llvm.org/releases/${PORTVERSION}/
PKGNAMESUFFIX= ${LLVM_PREFIX}
DISTNAME= ${CLANG_NAME}
DISTFILES= ${CLANG_SOURCE} \
${LLVM_SOURCE}
MAINTAINER= brooks@FreeBSD.org
COMMENT= C, Objective-C, and C++ compiler
CLANG_NAME= clang-${PORTVERSION}.src
CLANG_SOURCE= ${CLANG_NAME}${EXTRACT_SUFX}
LLVM_NAME= llvm-${PORTVERSION}.src
LLVM_SOURCE= ${LLVM_NAME}${EXTRACT_SUFX}
WRKSRC= ${WRKDIR}/${LLVM_NAME}
BUILD_WRKSRC= ${WRKSRC}/tools/clang
INSTALL_WRKSRC= ${WRKSRC}/tools/clang
BUILD_DEPENDS+= llc${LLVM_SUFFIX}:${PORTSDIR}/devel/llvm${LLVM_SUFFIX}
RUN_DEPENDS+= llc${LLVM_SUFFIX}:${PORTSDIR}/devel/llvm${LLVM_SUFFIX}
LLVM_SUFFIX= ${PORTVERSION:S/.//g}
LLVM_PREFIX= ${PREFIX}/llvm${LLVM_SUFFIX}
DATADIR= ${PREFIX}/share/${PORTNAME}${LLVM_SUFFIX}
DOCSDIR= ${PREFIX}/share/doc/${PORTNAME}${LLVM_SUFFIX}
GNU_CONFIGURE= yes
GNU_CONFIGURE_PREFIX= ${LLVM_PREFIX}
USES= gmake perl5
USE_LDCONFIG= yes
USE_PYTHON_BUILD= yes
MAKE_ARGS= CLANG_TBLGEN=${WRKSRC}/${RELTYPE}/bin/clang-tblgen \
LLVMIncDir=${LLVM_PREFIX}/include \
LLVMToolDir=${LLVM_PREFIX}/bin \
LLVMLibDir=${LLVM_PREFIX}/lib
SUB_FILES= llvm-wrapper.sh
SUB_LIST= LLVM_PREFIX="${LLVM_PREFIX}" LLVM_SUFFIX="${LLVM_SUFFIX}"
OPTIONS_DEFINE= ASSERTS DOCS
ASSERTS_DESC= Enable assertions (thread unsafe)
CONFIGURE_ARGS+= --enable-optimized --enable-shared
# Build some docs manually later
CONFIGURE_ARGS+= --disable-docs
PLIST_SUB+= PORTVERSION=${PORTVERSION}
COMMANDS= c-index-test \
clang \
clang++ \
clang-check \
clang-cpp \
clang-tblgen
FIRST_COMMAND= ${COMMANDS:C/^/XXXX/1:MXXXX*:C/^XXXX//}
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MASSERTS}
CONFIGURE_ARGS+= --enable-assertions
RELTYPE= Release+Asserts
.else
CONFIGURE_ARGS+= --disable-assertions