Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/tools Add tools/README, to collect hints like how to use
details: https://anonhg.NetBSD.org/src/rev/d79dda8704ba
branches: trunk
changeset: 331943:d79dda8704ba
user: apb <apb%NetBSD.org@localhost>
date: Mon Sep 01 13:50:15 2014 +0000
description:
Add tools/README, to collect hints like how to use
.if defined(HOSTPROG)
and
#if HAVE_NBTOOL_CONFIG_H
#include "nbtool_config.h"
#endif /* HAVE_NBTOOL_CONFIG_H */
diffstat:
tools/README | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 109 insertions(+), 0 deletions(-)
diffs (113 lines):
diff -r d6ada542e131 -r d79dda8704ba tools/README
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/README Mon Sep 01 13:50:15 2014 +0000
@@ -0,0 +1,109 @@
+$NetBSD: README,v 1.1 2014/09/01 13:50:15 apb Exp $
+
+Notes for NetBSD src/tools
+
+
+Background
+==========
+
+Several programs that are part of NetBSD are also built as tools. Such
+programs are typically built twice, once as a tool and once as part of
+the main build. Tools are relevant only when USETOOLS=yes, which is the
+default.
+
+Tools are built on the host platform, using the host compiler,
+and will run on the host platform during the cross-build of the
+remainder of NetBSD. They are built near the beginning of a NetBSD
+build (e.g. "build.sh tools" or "make tools" from the top level src
+directory), and installed in ${TOOLDIR}.
+
+Tools are executed during the main part of the build, when several
+TOOL_* variables defined in src/share/mk/bsd.*.mk will refer to the
+tools installed in ${TOOLDIR}.
+
+
+Portability
+===========
+
+Programs that are built as tools need to be more portable than other
+parts of NetBSD, because they will need to run on the host platform.
+They should restrict themselves to features that are defined in relevant
+standards, and features that are provided by the src/tools/compat
+framework.
+
+
+Compatibility framework
+=======================
+
+src/tools/compat provides a compatibility framework for use by tools.
+It installs the following components, and more:
+
+${TOOLDIR}/lib/libnbcompat.a
+
+ A library containing functions that are needed by some tools.
+
+${TOOLDIR}/include/nbtool_compat.h
+
+ A header file defining macros that are needed by some tools.
+
+${TOOLDIR}/share/compat/defs.mk
+
+ A makefile fragment, to be included by other makefiles,
+ to define make variables appropriate for building tools.
+
+ Among other things, this makefile fragment automatically adds
+ the libnbcompat.a library to the LDADD and DPADD variables,
+ so that tools will be linked with that library, and adds
+ -I${NETBSDSRCDIR}/tools/compat and -DHAVE_NBTOOL_CONFIG_H=1 to the
+ HOST_CPPFLAGS variable, so that compiled programs can detect when
+ they are being built as tools.
+
+
+Adapting Makefiles for use with tools
+=====================================
+
+Makefiles under src/tools/*/Makefile should define HOSTPROG in the
+make environment. This is typically done by tools/Makefile.hostprog,
+which is directly or indirectly included by all Makefiles in
+src/tools/*/Makefile.
+
+Makefiles in the non-tools part of the src tree make use tests such as
+".if defined(HOSTPROG)" to test whether or not the associated program
+is being built as a tool, and to modify their behaviour accordingly.
+For example, the Makefile may conditionally refrain from compiling and
+linking certain files, and the Makefile may conditionally pass macros to
+the compiler via constructs like this:
+
+ .if defined(HOSTPROG)
+ CPPFLAGS+= -DWITH_FEATURE_X=0
+ .else
+ CPPFLAGS+= -DWITH_FEATURE_X=1
+ .endif
+
+Adapting Programs for use with tools
+====================================
+
+The compiler should automatically be invoked with
+-DHAVE_NBTOOL_CONFIG_H=1, as a result of settings in
+${TOOLDIR}/share/compat/defs.mk, which should be included from
+src/tools/Makefile.host, which should be included directly or indirectly
+from src/tools/*/Makefile.
+
+In order to obtain the compatibility macros provided by the tools
+compatibility framework, almost every C source file that is built as
+part of a tool should have lines like this as the first non-comment
+lines:
+
+ #if HAVE_NBTOOL_CONFIG_H
+ #include "nbtool_config.h"
+ #endif /* HAVE_NBTOOL_CONFIG_H */
+
+To omit features from the tools version of a program, the program's
+source code should use preprocessor macros that are conditionally passed
+from its Makefile via CPPFLAGS. For example, it could use something
+like this:
+
+ #if WITH_FEATURE_X
+ ...
+ #endif /* WITH_FEATURE_X */
+
Home |
Main Index |
Thread Index |
Old Index