autoconf: detect ctf-tools and add ctf to libafs

CTF is a reduced form of debug information similar to DWARF and stab. It
describes types and function prototypes. The principal objective of the
format is to shrink the data size as much as possible so that it could
be included in a production environment. MDB, DTrace, and other tools
use CTF debug information to read and display structures correctly.

This commit introduces a new configure option called --with-ctf-tools.
This option can be used to specify an alternative path where the tools
can be found. If the path is not provided, the tools will be searched
in a set of default directories (including $PATH). The CTF debugging
information will only be included if the corresponding --enable-debug /
--enable-debug-kernel is specified.

Note: at the moment, the Solaris kernel module is the only module
benefited by this commit.

Change-Id: If0a584377652a573dd1846eae30d42697af398d0
Reviewed-on: https://gerrit.openafs.org/12680
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
This commit is contained in:
Marcio Barbosa 2018-02-05 21:16:17 +00:00 committed by Benjamin Kaduk
parent c7c71d2429
commit 88cb536f99
6 changed files with 78 additions and 0 deletions

View File

@ -499,6 +499,13 @@ I Other configure options
xsltproc. By default, the user's path is searched for those
programs in that order, and the first one found is used.
--with-ctf-tools[=DIR]
Location of ctfconvert and ctfmerge. Defaults to detect. These
tools create a reduced form of debug information that describes
types and function prototypes. This option is only relevant to
platforms that provide CTF tools and, at the moment, it is only
functional on Solaris (onbld package must be installed).
There are also some environment variables that you can set to control
aspects of the build. They can be set either on the configure command
line (preferred) or in the environment.

View File

@ -79,4 +79,5 @@ OPENAFS_C_STRUCT_LABEL_CHECK
OPENAFS_DIRENT_CHECKS
OPENAFS_SYS_RESOURCE_CHECKS
OPENAFS_UUID_CHECKS
OPENAFS_CTF_TOOLS_CHECKS
])

30
src/cf/ctf-tools.m4 Normal file
View File

@ -0,0 +1,30 @@
AC_DEFUN([OPENAFS_CTF_TOOLS_CHECKS],[
CTF_DEFAULT_PATH="$PATH:/usr/bin:/opt/onbld/bin/$HOST_CPU"
AC_ARG_WITH([ctf-tools],
AS_HELP_STRING([--with-ctf-tools@<:@=DIR@:>@],
[Location of the CTF tools]),
[CTF_TOOLS="$withval"],
[CTF_TOOLS="check"])
AS_CASE([$CTF_TOOLS],
[check], [AC_PATH_PROG([CTFCONVERT], [ctfconvert], [], [$CTF_DEFAULT_PATH])
AC_PATH_PROG([CTFMERGE], [ctfmerge], [], [$CTF_DEFAULT_PATH])],
[yes], [AC_PATH_PROG([CTFCONVERT], [ctfconvert], [], [$CTF_DEFAULT_PATH])
AC_PATH_PROG([CTFMERGE], [ctfmerge], [], [$CTF_DEFAULT_PATH])
AS_IF([test "x$CTFCONVERT" = "x"], [AC_ERROR("ctfconvert not found")])
AS_IF([test "x$CTFMERGE" = "x"], [AC_ERROR("ctfmerge not found")])],
[no], [],
[AC_PATH_PROG([CTFCONVERT], [ctfconvert], [], [$CTF_TOOLS])
AC_PATH_PROG([CTFMERGE], [ctfmerge], [], [$CTF_TOOLS])
AS_IF([test "x$CTFCONVERT" = "x"], [AC_ERROR("ctfconvert not found")])
AS_IF([test "x$CTFMERGE" = "x"], [AC_ERROR("ctfmerge not found")])]
)
AC_ARG_VAR([CTFCONVERT], [Path to ctfconvert])
AC_ARG_VAR([CTFMERGE], [Path to ctfmerge])
])

View File

@ -51,6 +51,9 @@ AC_DEFUN([OPENAFS_SUMMARY],[
AS_IF([test "${summary_doxygen}" = "yes" -a "${HAVE_DOT}" = "yes"],
[summary_doxygen_graphs="yes"],
[summary_doxygen_graphs="no"])
AS_IF([test "x$CTFCONVERT" != "x" -a "x$CTFMERGE" != "x"],
[summary_ctf_tools="yes"],
[summary_ctf_tools="no"])
cat <<EOF
***************************************************************
@ -62,6 +65,7 @@ OpenAFS configure summary
debug:
userspace : ${enable_debug}
kernel : ${enable_debug_kernel}
ctf-tools : ${summary_ctf_tools}
options:
transarc paths : ${enable_transarc_paths}
namei fileserver : ${openafs_cv_summary_check_namei}

View File

@ -51,6 +51,8 @@ FSINCLUDES = @FSINCLUDES@
GENCAT = @GENCAT@
INCLUDE_LIBINTL = @INCLUDE_libintl@
KERN_DBG = @KERN_DBG@
CTFCONVERT = @CTFCONVERT@
CTFMERGE = @CTFMERGE@
KERN_OPTMZ = @KERN_OPTMZ@
LD = @LD@
LDFLAGS_roken = @LDFLAGS_roken@
@ -316,3 +318,33 @@ LT_CLEAN=$(RM) -rf .lwp .libs *.la *.lo
AFS_LDRULE =$(RUN_LD) $(CC) $(AFS_LDFLAGS) $(AFS_CFLAGS) $(LDFLAGS_$(@)) -o $@
AFS_LDRULE_NOQ =$(RUN_LD_NOQ) $(CC) $(AFS_LDFLAGS) $(AFS_CFLAGS) $(LDFLAGS_$(@)) -o $@
RUN_CTFCONVERT=@RUN_CTFCONVERT() { \
CTFLABEL=$$1 ; \
CTFDBG=$$2 ; \
shift ; shift ; \
if test "x$${CTFDBG}" = "x" ; then exit 0; fi; \
if test "x${CTFCONVERT}" = "x" ; then exit 0; fi; \
if test "x${CTFMERGE}" = "x" ; then \
echo "refusing to run ctfconvert; missing ctfmerge"; \
exit 1; \
fi; \
for t in $$@ ; do \
echo "${CTFCONVERT} -g -l $${CTFLABEL} $$t"; \
${CTFCONVERT} -g -l $${CTFLABEL} $$t; \
done ; \
} ; RUN_CTFCONVERT
RUN_CTFMERGE=@RUN_CTFMERGE () { \
CTFLABEL=$$1 ; \
CTFDBG=$$2 ; \
shift ; shift ; \
if test "x$${CTFDBG}" = "x" ; then exit 0; fi; \
if test "x${CTFMERGE}" = "x" ; then exit 0; fi; \
if test "x${CTFCONVERT}" = "x" ; then \
echo "refusing to run ctfmerge; missing ctfconvert"; \
exit 1; \
fi; \
echo "$(CTFMERGE) -g -l $${CTFLABEL} -o $$@"; \
$(CTFMERGE) -g -l $${CTFLABEL} -o $$@; \
} ; RUN_CTFMERGE

View File

@ -146,9 +146,13 @@ dest_libafs: $(LIBAFS) $(LIBAFSNONFS)
${LIBAFS}: $(AFSAOBJS) $(AFSNFSOBJS)
$(RM) -f $@
$(RUN_CTFCONVERT) libafs "${KERN_DBG}" ${AFSAOBJS} ${AFSNFSOBJS}
$(LD) $(LDFLAGS) -o $@ $(AFSAOBJS) ${AFSNFSOBJS}
$(RUN_CTFMERGE) libafs "${KERN_DBG}" $@ $(AFSAOBJS) ${AFSNFSOBJS}
${LIBAFSNONFS}: $(AFSAOBJS) $(AFSNONFSOBJS)
$(RM) -f $@
$(RUN_CTFCONVERT) libafs "${KERN_DBG}" ${AFSAOBJS} ${AFSNONFSOBJS}
$(LD) $(LDFLAGS) -o $@ $(AFSAOBJS) ${AFSNONFSOBJS}
$(RUN_CTFMERGE) libafs "${KERN_DBG}" $@ $(AFSAOBJS) ${AFSNONFSOBJS}