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