From owner-p4-projects@FreeBSD.ORG Sat Aug 3 02:10:28 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CDC51899; Sat, 3 Aug 2013 02:10:28 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 89E3A897 for ; Sat, 3 Aug 2013 02:10:28 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 77287232C for ; Sat, 3 Aug 2013 02:10:28 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r732ARK1025994 for ; Sat, 3 Aug 2013 02:10:27 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r732ARl9025991 for perforce@freebsd.org; Sat, 3 Aug 2013 02:10:27 GMT (envelope-from brooks@freebsd.org) Date: Sat, 3 Aug 2013 02:10:27 GMT Message-Id: <201308030210.r732ARl9025991@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231658 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Aug 2013 02:10:29 -0000 http://p4web.freebsd.org/@@231658?ac=10 Change 231658 by brooks@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