Module Name: src
Committed By: apb
Date: Mon Sep 1 13:50:15 UTC 2014
Added Files:
src/tools: README
Log Message:
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 */
To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/tools/README
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Added files:
Index: src/tools/README
diff -u /dev/null src/tools/README:1.1
--- /dev/null Mon Sep 1 13:50:15 2014
+++ src/tools/README Mon Sep 1 13:50:15 2014
@@ -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 */
+