PERFORCE change 231658 for review
Brooks Davis
brooks at FreeBSD.org
Sat Aug 3 02:10:29 UTC 2013
http://p4web.freebsd.org/@@231658?ac=10
Change 231658 by brooks at brooks_zenith on 2013/08/03 02:10:26
Add support for building bitcode or IR for libraries. With
-DWITH_LLVM_INSTRUMENTED enabled libraries produce two files
lib${LIB}.(bc|ll)-a and lib${LIB}.native-a which contain bitcode
or IR from C and C++ files and native code from other sources
such as assembly files. If no files of a give class exist then
an empty files is created but not installed.
Further work may be required to build bitcode/IR early enough
for a WITH_SOAAP pass to be fully implemented, but this allows
buildworld to complete.
Affected files ...
.. //depot/projects/ctsrd/tesla/src/Makefile.inc1#17 edit
.. //depot/projects/ctsrd/tesla/src/share/mk/bsd.lib.mk#6 edit
.. //depot/projects/ctsrd/tesla/src/share/mk/sys.mk#15 edit
.. //depot/projects/ctsrd/tesla/src/tools/build/Makefile#2 edit
Differences ...
==== //depot/projects/ctsrd/tesla/src/Makefile.inc1#17 (text+ko) ====
@@ -272,7 +272,7 @@
CROSS_COMPILER_PREFIX?=${CROSS_TOOLCHAIN_PREFIX}
CROSS_BINUTILS_PREFIX?=${CROSS_TOOLCHAIN_PREFIX}
.endif
-XCOMPILERS= CC CXX CPP LLC
+XCOMPILERS= CC CXX CPP LLC LLVM_LINK
.for COMPILER in ${XCOMPILERS}
.if defined(CROSS_COMPILER_PREFIX)
X${COMPILER}?= ${CROSS_COMPILER_PREFIX}${${COMPILER}}
@@ -290,6 +290,7 @@
.endfor
WMAKEENV+= CC="${XCC} ${XFLAGS}" CXX="${XCXX} ${XFLAGS}" \
CPP="${XCPP} ${XFLAGS}" LLC="${XLLC}" \
+ LLVM_LINK="${XLLVM_LINK}" \
AS="${XAS}" AR="${XAR}" LD="${XLD}" NM=${XNM} \
OBJDUMP=${XOBJDUMP} RANLIB=${XRANLIB} STRINGS=${XSTRINGS} \
XFLAGS="${XFLAGS}"
@@ -591,7 +592,7 @@
cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32WMAKE} \
DIRPRFX=libexec/rtld-elf/ ${_t}
cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32WMAKE} \
- DIRPRFX=usr.bin/ldd ${_t}
+ -DNO_LLVM_IR DIRPRFX=usr.bin/ldd ${_t}
.endfor
distribute32 install32:
@@ -1538,8 +1539,8 @@
cd ${.CURDIR}/${_lib}; \
${MAKE} DIRPRFX=${_lib}/ obj; \
${MAKE} DIRPRFX=${_lib}/ depend; \
- ${MAKE} -DNO_PROFILE -DNO_PIC DIRPRFX=${_lib}/ all; \
- ${MAKE} -DNO_PROFILE -DNO_PIC DIRPRFX=${_lib}/ install
+ ${MAKE} -DNO_PROFILE -DNO_PIC -DNO_LLVM_IR DIRPRFX=${_lib}/ all; \
+ ${MAKE} -DNO_PROFILE -DNO_PIC -DNO_LLVM_IR DIRPRFX=${_lib}/ install
.endif
.endfor
@@ -1550,8 +1551,8 @@
cd ${.CURDIR}/${_lib}; \
${MAKE} DIRPRFX=${_lib}/ obj; \
${MAKE} DIRPRFX=${_lib}/ depend; \
- ${MAKE} DIRPRFX=${_lib}/ all; \
- ${MAKE} DIRPRFX=${_lib}/ install
+ ${MAKE} DIRPRFX=${_lib}/ -DNO_LLVM_IR all; \
+ ${MAKE} DIRPRFX=${_lib}/ -DNO_LLVM_IR install
.endif
.endfor
@@ -1563,8 +1564,8 @@
cd ${.CURDIR}/lib/libpam; \
${MAKE} DIRPRFX=lib/libpam/ obj; \
${MAKE} DIRPRFX=lib/libpam/ depend; \
- ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \
- ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install
+ ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET -DNO_LLVM_IR all; \
+ ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET -DNO_LLVM_IR install
_prereq_libs: ${_prereq_libs:S/$/__PL/}
_startup_libs: ${_startup_libs:S/$/__L/}
==== //depot/projects/ctsrd/tesla/src/share/mk/bsd.lib.mk#6 (text+ko) ====
@@ -60,13 +60,16 @@
PO_FLAG=-pg
-.c.obc:
- ${CC} -c -g -emit-llvm ${CFLAGS} ${.IMPSRC} -o ${.TARGET}
-
.c.o:
${CC} ${STATIC_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
${CTFCONVERT_CMD}
+.c.obc:
+ ${CC} -emit-llvm ${STATIC_CFLAGS} ${CFLAGS:N-O*} -c ${.IMPSRC} -o ${.TARGET}
+
+.c.oll:
+ ${CC} -emit-llvm ${STATIC_CFLAGS} ${CFLAGS:N-O*} -S ${.IMPSRC} -o ${.TARGET}
+
.c.po:
${CC} ${PO_FLAG} ${STATIC_CFLAGS} ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
${CTFCONVERT_CMD}
@@ -78,6 +81,12 @@
.cc.o .C.o .cpp.o .cxx.o:
${CXX} ${STATIC_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+.cc.obc .cpp.obc .cxx.obc .C.obc:
+ ${CXX} -emit-llvm ${STATIC_CXXFLAGS} ${CXXFLAGS:N-O*} -c ${.IMPSRC} -o ${.TARGET}
+
+.cc.oll .cpp.oll .cxx.oll .C.oll:
+ ${CXX} -emit-llvm ${STATIC_CXXFLAGS} ${CXXFLAGS:N-O*} -S ${.IMPSRC} -o ${.TARGET}
+
.cc.po .C.po .cpp.po .cxx.po:
${CXX} ${PO_FLAG} ${STATIC_CXXFLAGS} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
@@ -150,25 +159,36 @@
.endif
${RANLIB} ${.TARGET}
-.if defined(LLVM_IR) && !defined(NO_LLVM_IR)
-_LIBS+= lib${LIB}.bc lib${LIB}.bc-opt
-# XXX: force expantion now to avoid picking up generated C code.
-# Ideally we do want it, but there is an undiagnosed dependency issue that
-# causes the .obc file to not be built.
-LOBJS:= ${SRCS:M*.[Cc]:R:S/$/.obc/:N.obc} \
- ${SRCS:M*.cc:R:S/$/.obc/:N.obc} \
- ${SRCS:M*.cpp:R:S/$/.obc/:N.obc} \
- ${SRCS:M*.cxx:R:S/$/.obc/:N.obc}
-LLVM_LINK?= llvm-link
+.if !defined(NO_LLVM_IR) && ${MK_LLVM_INSTRUMENTED} != "no"
+_LIBS+= lib${LIB}.${LLVM_IR_TYPE}-a lib${LIB}.native-a
+OIRS= ${SRCS:M*.[Ccly]:R:S/$/.o${LLVM_IR_TYPE}/:N.o${LLVM_IR_TYPE}} \
+ ${SRCS:M*.cc:R:S/$/.o${LLVM_IR_TYPE}/:N.o${LLVM_IR_TYPE}} \
+ ${SRCS:M*.cpp:R:S/$/.o${LLVM_IR_TYPE}/:N.o${LLVM_IR_TYPE}} \
+ ${SRCS:M*.cxx:R:S/$/.o${LLVM_IR_TYPE}/:N.o${LLVM_IR_TYPE}}
+NOBJS= ${SRCS:M*.[Ss]:R:S/$/.o/:N.o}
+CLEANFILES+= ${OIRS} ${NOBJS} \
+ lib${LIB}.${LLVM_IR_TYPE}-a lib${LIB}.native-a
-lib${LIB}.bc: ${LOBJS}
- ${LLVM_LINK} -o ${.TARGET} ${LOBJS}
+lib${LIB}.${LLVM_IR_TYPE}-a: ${OIRS}
+ if [ -z "${OIRS}" ]; then \
+ touch ${.TARGET} ;\
+ else \
+ ${LLVM_LINK} -o ${.TARGET} ${OIRS} ;\
+ fi
-lib${LIB}.bc-opt: lib${LIB}.bc
-.if empty(OPT_PASSES)
- cp lib${LIB}.bc ${.TARGET}
+lib${LIB}.native-a: ${NOBJS}
+.if !defined(NM)
+ if [ -z "${NOBJS}" ]; then \
+ touch ${.TARGET} ;\
+ else \
+ ${AR} ${ARFLAGS} ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} ;\
+ fi
.else
- ${OPT} -o ${.TARGET} ${OPT_PASSES} lib${LIB}.bc
+ if [ -z "${NOBJS}" ]; then \
+ touch ${.TARGET} ;\
+ else \
+ ${AR} ${ARFLAGS} ${.TARGET} `NM='${NM}' lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} ;\
+ fi
.endif
.endif
@@ -304,6 +324,15 @@
${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
.endif
+.if defined(LIB) && !empty(LIB) && ${MK_INSTALLLIB} != "no" && \
+ !defined(NO_LLVM_IR) && ${MK_LLVM_INSTRUMENTED} != "no"
+ test -n lib${LIB}.${LLVM_IR_TYPE}-a && \
+ ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+ ${_INSTALLFLAGS} lib${LIB}.${LLVM_IR_TYPE}-a ${DESTDIR}${LIBDIR}
+ test -n lib${LIB}.native-a && \
+ ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+ ${_INSTALLFLAGS} lib${LIB}.native-a ${DESTDIR}${LIBDIR}
+.endif
.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
@@ -414,9 +443,6 @@
.endif
.if defined(LIB) && !empty(LIB)
rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
-.if defined(LLVM_IR)
- rm -f ${LOBJS}
-.endif
.endif
.if !defined(INTERNALLIB)
.if ${MK_PROFILE} != "no" && defined(LIB) && !empty(LIB)
==== //depot/projects/ctsrd/tesla/src/share/mk/sys.mk#15 (text+ko) ====
==== //depot/projects/ctsrd/tesla/src/tools/build/Makefile#2 (text+ko) ====
@@ -2,6 +2,8 @@
.PATH: ${.CURDIR}/../../include
+NO_LLVM_IR= yes
+
LIB= egacy
SRC=
INCSGROUPS= INCS
More information about the p4-projects
mailing list