RN rnmake  3.0.0
main.doxy
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // Package: RoadNarrows Make System
4 //
5 // File: main.doxy
6 //
7 // Description:
8 // This file contains the doxygen directives to generate the main page.
9 //
10 ////////////////////////////////////////////////////////////////////////////////
11 
12 /*! \file */
13 
14 /*! \mainpage RoadNarrows Make System
15 
16 \section rnmake_intro Introduction
17 
18 The rnmake system provides a fast and simple make system for RoadNarrows LLC
19 packages.
20 Each package has a required, but flexible, directory hierarchical structure.
21 
22 The rnmake system supports both native and cross-compliled target
23 architectures.
24 
25 The rnmake system is built around GNU make plus some simple shell (sh/bash)
26 utilities and the doxygen documentation tools.
27 
28 At RoadNarrows, a typical workstation builds for multiple targets. So rnmake
29 evolved to support multiple-target, cross-compilations. All supported compiler
30 tool chains are GNU gcc based. The target platform must be near Posix compliant.
31 
32 All rnmake core files reside under /<em>installpath</em>/rnmake where
33 /<em>installpath</em> is the installed directory path root of the rnmake/.
34 
35 \section rnmake_quickstart Quick Start
36 Change your current working directory to the top package directory.
37 
38 The default target architecture is defined by the environment variable
39 <b>RNMAKE_ARCH_DFT</b> if defined. Else the <em>i386</em>
40 32-bit Linux Posix is the default.
41 
42 To make the package for the default target architecture:
43 \code
44  $ make deps
45  $ make
46  $ make install
47 \endcode
48 
49 To clean or to clobber the pre-installed distribution:
50 \code
51  $ make clean
52  $ make distclean
53 \endcode
54 
55 To make for a specific target architecture, add arch=<em>arch</em> to the
56 command line. For example, to build and install for Arm PXA XScale Linux target:
57 \code
58  $ make arch=armpxa install
59 \endcode
60 
61 \section rnmake_pkg_def Package Definition
62 A package is a set of functionally related components such as libraries,
63 header files, applications, configuration files, and documentation.
64 
65 \section rnmake_prod_def Product Definition
66 A product is a collection of one or more packages.
67 Because a package has a focused use, a package may
68 be used across multiple products developed by RoadNarrows, RoadNarrows Robotics,
69 and RoadNarrows Intelligent Systems.
70 
71 \section rnmake_core_mk Core Make Files
72 \li The core make file \ref Rules.mk "rnmake/Rules.mk"
73 is included in all package make files. It
74 defines the set of rules to make a package.
75 \li The rnmake/Arch/ subdirectory
76 contains the make macro definitions to build for a given target platform
77 architecture. It includes tool-chain locations, install locations,
78 and build flags.
79 \li The rnmake/doxy/ subdirectory defines the doxygen directives and styles
80 for a package.
81 \li The rnmake/utils subdirectory contains simple shell utility scripts.
82 
83 \section rnmake_pkg_mk Package Make Files
84 \li Under each package's top directory <em>topdir</em> there exists the
85 subdirectory make/ where:\n
86 The Pkg.mk file defines the package specific make definitions.\n
87 The doxy.conf file defines the configuration for the doxygen document
88 generation.
89 \li For each source [sub]directory under <em>topdir</em>
90 there exists a Makefile defining how to make that level of the package.
91 
92 \section rnmake_doxy Doxygen
93 RoadNarrows heavily uses doxygen (see http://www.stack.nl/~dimitri/doxygen) to
94 document the source code. The rnmake system has built-in targets to support
95 the generation of doxygen HTML documenation.
96 
97 \section rnamke_rules Make Target Rules
98 \termblock
99 \term make [arch=<em>arch</em>] help
100  \termdata List available key make targets.
101 \endterm
102 \term \endterm
103 \term make [arch=<em>arch</em>] deps
104  \termdata Make dependencies.
105 \endterm
106 \term make [arch=<em>arch</em>] [all]
107  \termdata Compile libraries and applications.
108 \endterm
109 \term make [arch=<em>arch</em>] documents
110  \termdata Make documentation.
111 \endterm
112 \term make [arch=<em>arch</em>] install
113  \termdata Install distribution. (libraries, applications, and documentation
114  are automatically made as required).
115 \term \endterm
116 \endterm
117 \term make [arch=<em>arch</em>] tarballs
118  \termdata Make binary, source, and documenation compressed tar files
119  (tarballs).
120 \term \endterm
121 \endterm
122 \term make [arch=<em>arch</em>] clean
123  \termdata Clean object files.
124 \endterm
125 \term make [arch=<em>arch</em>] distclean
126  \termdata Clean plus remove distribution and local files, and dependencies.
127 \endterm
128 \term make [arch=<em>arch</em>] clobber
129  \termdata Same as distclean.
130 \endterm
131 \term \endterm
132 \term make [arch=<em>arch</em>] <em>file</em>.o
133  \termdata Make an individual object file.
134 \endterm
135 \term make [arch=<em>arch</em>] <em>file</em>.ii
136  \termdata Make an individual post c preprocessor file.
137 \endterm
138 \endtermblock
139 
140 \section rnmake_arch Architectures
141 The currently supported architectures are:
142 \termblock
143 \term i386
144  \termdata Linux with any Intel (backwards) compatible 32-bit architectures.
145 \endterm
146 \term x86_64
147  \termdata Linux with any AMD 64-bit architectures.
148 \endterm
149 \term armpxa
150  \termdata Cross-compiled Familiar Linux XScale Arm PXA architectures.
151 \endterm
152 \term armang
153  \termdata Cross-compiled Angstrom Linux XScale Arm PXA architectures.
154 \endterm
155 \term cygwin
156  \termdata Cross-compiled for Windows systems with install cygwin
157  (see http://www.cygwin.com).
158 \endterm
159 \term cygwin-nat
160  \termdata Natively compiled on Windows systems with install cygwin
161  (see http://www.cygwin.com).
162 \endterm
163 \term osx
164  \termdata Apple Mac OS-X natively compiled systems.
165  Tested on users' personal machines, but has not officially
166  RoadNarrows tested and verified.
167 \endterm
168 \endtermblock
169 New architectures are added as needed. One near-term addition will be the
170 Gumstix Verdex and Overo platform running Linux 2.6.
171 
172 \section rnmake_toolchains Tool Chains
173 No compiler tool chains are included. This is the responsibility of the
174 developer or organization.
175 
176 \subsection rnmake_toolchains_ver Verified Tool-Chains and Targets
177 The rnmake system and resultant compiled packages have been verified using the
178 following tool chains and cross-compiled targets:
179 \termblock
180 \term make
181  \termdata GNU make 3.8+.\n
182  make 3.81 Fedora Core 5/6 on 32-bit and 64-bit machines.\n
183  make 3.81 Ubuntu 8.1/9.4 on 32-bit and 64-bit machines.\n
184  make 3.8+ Windows cygwin on 32-bit machines.
185 \endterm
186 
187 \term gcc
188  \termdata GNU gcc 4.3+ compiler, link loader, pre-processor, archiver,
189  utilities, target system headers and libraries.\n
190  gcc 4.1.2 Fedora Core 5/6 on 32-bit and 64-bit machines.\n
191  gcc 4.3.2+ for Ubuntu 8.1/9.4 on 32-bit and 64-bit machines.\n
192  gcc 4.3+ Windows cygwin on 32-bit machines.
193 \endterm
194 
195 \term arm-linux-gcc
196  \termdata GNU gcc 4.1 cross-compiler, link loader, pre-processor, archiver,
197  utilities, target system headers and libraries.\n
198  gcc 4.1.0 Linux 2.4 XScale Arm PXA. Tested on the K-Team
199  KoreBot single board computer.
200 \endterm
201 
202 \term i686-pc-cygwin-gcc
203  \termdata GNU gcc 4.3+ cross-compiler, link loader, pre-processor,
204  archiver, utilities, target system headers and libraries.\n
205  gcc 4.3 for Fedora Core 5 & 6 on 32-bit and 64-bit machines.
206 \endterm
207 
208 \term doxygen
209  \termdata Doxygen 1.5.8 for Fedora Core 5/6, Ubuntu 8.1/9.4, and
210  Windows cygwin platforms
211 \endterm
212 
213 \term shell
214  \termdata System standard <b>sh</b> or <b>bash</b> shell.
215 \endterm
216 \endtermblock
217 
218 \section rnmake_tweaks Tweaks
219 There are many tweaks a developer can do to rnmake to alter its behavior by
220 simply editing the appropriate make file macros. Some common tweaks are:
221 \li Export the environment variable <b>RNMAKE_ARCH_DFT</b> to defined the
222 default make architecture.
223 \code
224 # Example
225 $ export RNMAKE_ARCH_DFT=x86_64
226 $
227 $ make # make [sub]package for x86_64 architecture
228 \endcode
229 \li A developer can easily add a new host architecture by adding their new
230 rnmake architecture make file Arch.<em>newarch</em>.mk to rnmake/Arch/
231 directory. The best way to start is to copy an existing Arch.<em>arch</em>.mk
232 file and make the appropriate changes.
233 \li For Arch.<em>arch</em>.mk (see files for full set of tweaks):
234  \termblock
235  \term prefix \termdata Defines where to install the package. \endterm
236  \term CROSS_COMPILE \termdata Tool chain command prefix string \endterm
237  \endtermblock
238 \li Top Makefile
239  \termblock
240  \term prefix_root
241  \termdata Root directory to install all target architectures.
242  If <em>prefix</em> is defined, <em>prefix_root</em> is ignored.\n
243  Default: <em>topdir</em>/xinstall/
244  \endtermblock
245 
246 \section rnmake_mani File Manifest
247 List of directories, files, and naming conventions.
248 
249 \subsection rnamake_mani_nom Nomenclature
250 \termblock
251 \term <em>rnmake</em>
252  \termdata Directory path to the top directory of the rnmake package.\n
253  Example: /prj/rnmake
254 \endterm
255 \term <em>pkgroot</em>
256  \termdata Directory path to package top directory.\n
257  Example: /prj/pkg/librnr
258 \endterm
259 \term <em>topdir</em>
260  \termdata Directory path to product's top directory. May be same as
261  <em>pkgroot</em> for single packages.
262 \endterm
263 \term <em>prefix</em>
264  \termdata Install root directory.\n
265  Example: <em>topdir</em>/xinstall/<em>arch</em>/ \n
266  Default: /prj/xinstall/<em>arch</em>/
267 \endterm
268 \term <em>arch</em>
269  \termdata Target host platform architecture.
270 \endterm
271 \term <em>pkg</em>
272  \termdata Package fully qualified name.
273 \endterm
274 \term <em>prod</em>
275  \termdata Product fully qualified name.
276 \endterm
277 \term <em>path</em>
278  \termdata A directory path.
279 \endterm
280 \endtermblock
281 
282 \subsection rnmake_mani_core Core Make System
283 \termblock
284 \term <em>rnmake</em>/
285  \termdata The rnmake top directory containing core make files including
286  Rules.mk.
287 \endterm
288 \term <em>rnmake</em>/Arch/
289  \termdata The subdirectory holding the architecture make files.
290 \endterm
291 \term <em>rnmake</em>/doxy/
292  \termdata The doxygen package files.
293 \endterm
294 \term <em>rnmake</em>/utils/
295  \termdata Various rnmake utility scripts.
296 \endterm
297 \endtermblock
298 
299 \subsection rnmake_mani_pkg General Package Structure
300 \termblock
301 \term <em>pkgroot</em>/docs/
302  \termdata Package doxygen main and support documentation.
303 \endterm
304 \term <em>pkgroot</em>/examples/
305  \termdata Package example programs.
306 \endterm
307 \term <em>pkgroot</em>/include/
308  \termdata Package top include directory.
309 \endterm
310 \term <em>pkgroot</em>/make/
311  \termdata Package wide make and configuration files.
312 \term <em>pkgroot</em>/<em>path</em>/
313  \termdata Package subcomponent directory. \n
314  For examploe: a subdirectory holding source files for a library.
315 \endterm
316 \endtermblock
317 
318 \subsection rnmake_mani_prod General Product Structure
319 \termblock
320 \term <em>topdir</em>/make/
321  \termdata Product wide make and configuration files.
322 \endterm
323 \term <em>topdir</em>/<em>pkg_n</em>/
324  \termdata Package <em>n</em> root directory.
325 \endterm
326 \endtermblock
327 
328 \subsection rnmake_mani_inter Make Intermediates
329 \termblock
330 \term <em>pkgroot</em>/<em>path</em>/.deps/
331  \termdata Source dependencies for package directory.
332 \endterm
333 \term <em>pkgroot</em>/<em>path</em>/.deps/deps.<em>arch</em>/
334  \termdata Source dependencies for <em>arch</em> architecure.
335 \endterm
336 \term <em>pkgroot</em>/<em>path</em>/obj/
337  \termdata Object files for packaage directory.
338 \endterm
339 \term <em>pkgroot</em>/<em>path</em>/obj/obj.<em>arch</em>/
340  \termdata Object files for <em>arch</em> architecure.
341 \endterm
342 \term <em>pkgroot</em>/loc/
343  \termdata Top directory containing local-only generated
344  libraries and applications. Local files are not installed.
345 \endterm
346 \term <em>topdir</em>/dist/
347  \termdata Distribution generated files top directory.
348  Distribution files are installed to <em>prefix</em>.
349 \endterm
350 \term <em>topdir</em>/dist/dist.<em>arch</em>/
351  \termdata Distribution generated files for <em>arch</em> architecture.
352 \endterm
353 \term <em>topdir</em>/dist/dist.<em>arch</em>/bin/
354  \termdata Executables.
355 \endterm
356 \term <em>topdir</em>/dist/dist.<em>arch</em>/lib/
357  \termdata Libraries.
358 \endterm
359 \term <em>topdir</em>/dist/dist.<em>arch></em>/etc/
360  \termdata System configuration.
361 \endterm
362 \term <em>topdir</em>/dist/dist.<em>arch</em>/share/
363  \termdata Package configuration and documenation including doxygen
364  generated HTML.
365 \endterm
366 \term <em>topdir</em>/dist/dist.<em>arch</em>/src/
367  \termdata A clean copy of source files for tarring, etc.
368 \endterm
369 \term <em>topdir</em>/dist/dist.<em>arch</em>/tmp/
370  \termdata Directory holding temporaries.
371 \endterm
372 \endtermblock
373 
374 \subsection rnmake_mani_ins Install
375 Install directories. Any of the following parameters can be overriden
376 as necessary
377 in an including Makefile or on the command line.
378 Note that these parameters are the same as the traditional <b>configuration</b>
379 naming convention.
380 \termblock
381 \term <em>prefix</em>/
382  \termdata Installed files root directory.
383 \endterm
384 \term <em>exec_prefix</em>
385  \termdata Installed executables root directory
386  <br>default: <em>prefix</em>
387 \endterm
388 \term <em>bindir</em>
389  \termdata Installed executables directory
390  <br>default: <em>exec_prefix</em>/bin
391 \endterm
392 \term <em>sbindir </em>
393  \termdata Installed system executables directory
394  <br>default: <em>exec_prefix</em>/sbin
395 \endterm
396 \term <em>libexecdir</em>
397  \termdata Installed executable libraries directory
398  <br>default: <em>exec_prefix</em>/libexec
399 \endterm
400 \term <em>sysconfdir</em>
401  \termdata Installed system configuration files directory
402  <br>default: <em>prefix</em>/etc
403 \endterm
404 \term <em>localstatedir</em>
405  \termdata Installed local state directory
406  <br>default: <em>prefix</em>/var
407 \endterm
408 \term <em>libdir</em>
409  \termdata Installed libraries directory
410  <br>default: <em>exec_prefix</em>/lib
411 \endterm
412 \term <em>includedir</em>
413  \termdata Installed API headers directory
414  <br>default: <em>prefix</em>/include
415 \endterm
416 \term <em>sharedir</em>
417  \termdata Installed shared data directory
418  <br>default: <em>prefix</em>/share
419 \endterm
420 \term <em>infodir</em>
421  \termdata Installed information directory
422  <br>default: <em>prefix</em>/info
423 \endterm
424 \term <em>docdir</em>
425  \termdata Installed documentation directory
426  <br>default: <em>prefix</em>/share/doc
427 \endterm
428 \term <em>mandir</em>
429  \termdata Installed manpages directory
430  <br>default: <em>prefix</em>/man
431 \endterm
432 \endtermblock
433 
434 \subsection rnmake_mani_tar Tarballs
435 \termblock
436 \term <em>topdir</em>/dist/<em>pkg</em>-doc.tar.gz
437  \termdata Package source documentation tarball file.
438 \endterm
439 \term <em>topdir</em>/dist/<em>pkg</em>-src.tar.gz
440  \termdata Package source tarball file.
441 \endterm
442 \term <em>topdir</em>/dist/<em>pkg</em>-<em>arch</em>.tar.gz
443  \termdata Package binary compiled source tarball file
444  for <em>arch</em> architecture (only if stand-alone package).
445 \endterm
446 \term <em>topdir</em>/dist/<em>prod</em>-<em>arch</em>.tar.gz
447  \termdata Product binary compiled source tarball file for <em>arch</em>
448  architecture .
449 \endterm
450 \endtermblock
451 
452 \page page_eula EULA
453 \section eula_txt RoadNarrows LLC rnmake Package End User Licence Agreement
454 
455 \subsection eula_permissions Permissions
456 Permission is hereby granted, without written agreement and without
457 license or royalty fees, to use, copy, modify, and distribute this
458 software and its documentation for any purpose, provided that
459 (1) The above copyright notice and the following two paragraphs
460 appear in all copies of the source code and (2) redistributions
461 including binaries reproduces these notices in the supporting
462 documentation. Substantial modifications to this software may be
463 copyrighted by their authors and need not follow the licensing terms
464 described here, provided that the new terms are clearly indicated in
465 all files where they apply.
466 
467 \subsection eula_warranties Warranties
468 In no event shall the author, RoadNarrows LLC or any members/employees
469 of RoadNarrows LLC or distributors of this software be liable to any
470 party for direct, indirect, special, incidental, or consequential
471 damages arising out of the use of this software and its documentation,
472 even if the authors or any of the above parties have been advised of
473 the possibility of such damage.
474 
475 The author and RoadNarrows LLC specifically disclaim any warranties,
476 including, but not limited to, the implied warranties of merchantability anD
477 fitness for a particular purpose. the software provided hereunder is on an
478 "as is" basis, and the authors and distributors have no obligation tO
479 provide maintenance, support, updates, enhancements, or modifications.
480 
481 \subsection eula_copyright Copyright
482 All Rights Reserved by RoadNarrows LLC
483 \n (C) 2004-2009
484 \n http://www.roadnarrows.com
485 
486 */