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 */
+

Reply via email to