#
|
#
|
# $Id: README,v 1.2 2001-09-27 12:02:50 chris Exp $
|
# $Id: README,v 1.2 2001-09-27 12:02:50 chris Exp $
|
#
|
#
|
|
|
make/README
|
make/README
|
|
|
This file describes the layout and conventions of the application
|
This file describes the layout and conventions of the application
|
makefile support for RTEMS applications. Internally, RTEMS uses
|
makefile support for RTEMS applications. Internally, RTEMS uses
|
GNU-style autoconf/automake Makefiles as much as possible to
|
GNU-style autoconf/automake Makefiles as much as possible to
|
ease integration with other GNU tools.
|
ease integration with other GNU tools.
|
|
|
All of these "make" trees are substantially similar; however this
|
All of these "make" trees are substantially similar; however this
|
file documents the current state of the RTEMS Application Makefile
|
file documents the current state of the RTEMS Application Makefile
|
support.
|
support.
|
|
|
This make tree is based on a build system originally developed
|
This make tree is based on a build system originally developed
|
to simplify porting projects between various OS's. The primary
|
to simplify porting projects between various OS's. The primary
|
goals were:
|
goals were:
|
|
|
. simple *and* customizable individual makefiles
|
. simple *and* customizable individual makefiles
|
|
|
. use widely available GNU make. There is no pre-processing or
|
. use widely available GNU make. There is no pre-processing or
|
automatic generation of Makefiles.
|
automatic generation of Makefiles.
|
|
|
. Same makefiles work on *many* host OS's due to portability
|
. Same makefiles work on *many* host OS's due to portability
|
of GNU make and the host OS config files.
|
of GNU make and the host OS config files.
|
|
|
. Support for different compilers and operating systems
|
. Support for different compilers and operating systems
|
on a per-user basis. Using the same sources (including
|
on a per-user basis. Using the same sources (including
|
Makefiles) one developer can develop and test under SVR4,
|
Makefiles) one developer can develop and test under SVR4,
|
another under 4.x, another under HPUX.
|
another under 4.x, another under HPUX.
|
|
|
. Builtin support for compiling "variants" such as debug,
|
. Builtin support for compiling "variants" such as debug,
|
profile, and tcov versions. These variants can be built
|
profile, and tcov versions. These variants can be built
|
recursively.
|
recursively.
|
|
|
. Control of system dependencies. "hidden" dependencies on
|
. Control of system dependencies. "hidden" dependencies on
|
environment variables (such as PATH)
|
environment variables (such as PATH)
|
have been removed whenever possible. No matter what your
|
have been removed whenever possible. No matter what your
|
PATH variable is set to, you should get the same thing
|
PATH variable is set to, you should get the same thing
|
when you 'make' as everyone else on the project.
|
when you 'make' as everyone else on the project.
|
|
|
This Makefile system has evolved into its present form and as it
|
This Makefile system has evolved into its present form and as it
|
exists in RTEMS today, its sole goal is to build RTEMS applications.
|
exists in RTEMS today, its sole goal is to build RTEMS applications.
|
The use of these Makefiles hides the complexity of producing
|
The use of these Makefiles hides the complexity of producing
|
executables for a wide variety of embedded CPU families and target
|
executables for a wide variety of embedded CPU families and target
|
BSPs. Switching between RTEMS BSPs is accomplished via setting
|
BSPs. Switching between RTEMS BSPs is accomplished via setting
|
the environment variable "RTEMS_MAKEFILE_PATH."
|
the environment variable "RTEMS_MAKEFILE_PATH."
|
|
|
This description attempts to cover all aspects of the Makefile tree. Most
|
This description attempts to cover all aspects of the Makefile tree. Most
|
of what is described here is maintained automatically by the configuration
|
of what is described here is maintained automatically by the configuration
|
files.
|
files.
|
|
|
The example makefiles in make/Templates should be used as a starting
|
The example makefiles in make/Templates should be used as a starting
|
point for new directories.
|
point for new directories.
|
|
|
There are 2 main types of Makefile:
|
There are 2 main types of Makefile:
|
|
|
directory and leaf.
|
directory and leaf.
|
|
|
Directory Makefiles
|
Directory Makefiles
|
-------------------
|
-------------------
|
|
|
A Makefile in a source directory with sub-directories is called a
|
A Makefile in a source directory with sub-directories is called a
|
"directory" Makefile.
|
"directory" Makefile.
|
|
|
Directory Makefile's are simply responsible for acting as "middle-men"
|
Directory Makefile's are simply responsible for acting as "middle-men"
|
and recursing into their sub-directories and propagating the make.
|
and recursing into their sub-directories and propagating the make.
|
|
|
For example, directory src/bin will contain only a Makefile and
|
For example, directory src/bin will contain only a Makefile and
|
sub-directories. No actual source code will reside in the directory.
|
sub-directories. No actual source code will reside in the directory.
|
The following commands:
|
The following commands:
|
|
|
$ cd src/bin
|
$ cd src/bin
|
$ make all
|
$ make all
|
|
|
would descend into all the subdirectories of 'src/bin' and recursively
|
would descend into all the subdirectories of 'src/bin' and recursively
|
perform a 'make all'.
|
perform a 'make all'.
|
|
|
A 'make debug' will recurse thru sub-directories as a debug build.
|
A 'make debug' will recurse thru sub-directories as a debug build.
|
|
|
A template directory Makefile which should work in almost all
|
A template directory Makefile which should work in almost all
|
cases is in make/Templates/Makefile.dir
|
cases is in make/Templates/Makefile.dir
|
|
|
|
|
Leaf Makefiles
|
Leaf Makefiles
|
--------------
|
--------------
|
|
|
Source directories that contain source code for libraries or
|
Source directories that contain source code for libraries or
|
programs use a "leaf" Makefile.
|
programs use a "leaf" Makefile.
|
|
|
These makefiles contain the rules necessary to build programs
|
These makefiles contain the rules necessary to build programs
|
(or libraries).
|
(or libraries).
|
|
|
A template leaf Makefile is in Templates/Makefile.leaf . A template
|
A template leaf Makefile is in Templates/Makefile.leaf . A template
|
leaf Makefile for building libraries is in Templates/Makefile.lib .
|
leaf Makefile for building libraries is in Templates/Makefile.lib .
|
|
|
|
|
NOTE: To simplify nested makefile's and source maintenance, we disallow
|
NOTE: To simplify nested makefile's and source maintenance, we disallow
|
combining source and directories (that make(1) would be expected to
|
combining source and directories (that make(1) would be expected to
|
recurse into) in one source directory. Ie., a directory in the source
|
recurse into) in one source directory. Ie., a directory in the source
|
tree may contain EITHER source files OR recursive sub directories, but NOT
|
tree may contain EITHER source files OR recursive sub directories, but NOT
|
both. This assumption is generally shared with GNU automake.
|
both. This assumption is generally shared with GNU automake.
|
|
|
Variants (where objects go)
|
Variants (where objects go)
|
---------------------------
|
---------------------------
|
|
|
All binary targets are placed in a sub-directory whose name is (for
|
All binary targets are placed in a sub-directory whose name is (for
|
example):
|
example):
|
|
|
o-optimize/ -- optimized binaries
|
o-optimize/ -- optimized binaries
|
o-debug/ -- debug binaries
|
o-debug/ -- debug binaries
|
o-profile/ -- profiling binaries
|
o-profile/ -- profiling binaries
|
|
|
Using the template Makefiles, this will all happen automatically.
|
Using the template Makefiles, this will all happen automatically.
|
The contents of these directories are specific to a BSP.
|
The contents of these directories are specific to a BSP.
|
|
|
Within a Makefile, the ${ARCH} variable is set to o-optimize,
|
Within a Makefile, the ${ARCH} variable is set to o-optimize,
|
o-debug, etc., as appropriate.
|
o-debug, etc., as appropriate.
|
|
|
HISTORICAL NOTE: Prior to version 4.5, the name of the sub-directory
|
HISTORICAL NOTE: Prior to version 4.5, the name of the sub-directory
|
in which objects were placed included the BSP name.
|
in which objects were placed included the BSP name.
|
|
|
Typing 'make' will place objects in o-optimize.
|
Typing 'make' will place objects in o-optimize.
|
'make debug' will place objects in o-debug.
|
'make debug' will place objects in o-debug.
|
'make profile' will place objects in o-profile.
|
'make profile' will place objects in o-profile.
|
|
|
The debug and profile targets are equivalent to 'all' except that
|
The debug and profile targets are equivalent to 'all' except that
|
CFLAGS and/or LDFLAGS are modified as per the compiler config file for
|
CFLAGS and/or LDFLAGS are modified as per the compiler config file for
|
debug and profile support.
|
debug and profile support.
|
|
|
The targets debug, profile, etc., can be invoked recursively at
|
The targets debug, profile, etc., can be invoked recursively at
|
the directory make level. So from the top of a tree, one could
|
the directory make level. So from the top of a tree, one could
|
install a debug version of everything under that point by:
|
install a debug version of everything under that point by:
|
|
|
$ cd src/lib
|
$ cd src/lib
|
$ gmake debug
|
$ gmake debug
|
$ gmake install
|
$ gmake install
|
|
|
When building a command that is linked with a generated library, the
|
When building a command that is linked with a generated library, the
|
appropriate version of the library will be linked in.
|
appropriate version of the library will be linked in.
|
|
|
For example, the following fragments link the normal, debug, or
|
For example, the following fragments link the normal, debug, or
|
profile version of "libmine.a" as appropriate:
|
profile version of "libmine.a" as appropriate:
|
|
|
LD_LIBS += $(LIBMINE)
|
LD_LIBS += $(LIBMINE)
|
LIBMINE = ../libmine/${ARCH}/libmine.a
|
LIBMINE = ../libmine/${ARCH}/libmine.a
|
|
|
${ARCH}/pgm: $(LIBMINE) ${OBJS}
|
${ARCH}/pgm: $(LIBMINE) ${OBJS}
|
$(make-exe)
|
$(make-exe)
|
|
|
If we do 'gmake debug', then the library in
|
If we do 'gmake debug', then the library in
|
../libmine/o-debug/libmine.a will be linked in. If $(LIBMINE)
|
../libmine/o-debug/libmine.a will be linked in. If $(LIBMINE)
|
might not exist (or might be out of date) at this point, we could add
|
might not exist (or might be out of date) at this point, we could add
|
|
|
${LIBMINE}: FORCEIT
|
${LIBMINE}: FORCEIT
|
cd ../libmine; ${MAKE} ${VARIANT_VA}
|
cd ../libmine; ${MAKE} ${VARIANT_VA}
|
|
|
The above would generate the following command to build libmine.a:
|
The above would generate the following command to build libmine.a:
|
|
|
cd ../libmine; gmake debug
|
cd ../libmine; gmake debug
|
|
|
The macro reference ${VARIANT_VA} converts ${ARCH} to the word 'debug'
|
The macro reference ${VARIANT_VA} converts ${ARCH} to the word 'debug'
|
(in this example) and thus ensures the proper version of the library
|
(in this example) and thus ensures the proper version of the library
|
is built.
|
is built.
|
|
|
|
|
Targets
|
Targets
|
-------
|
-------
|
|
|
All Makefile's support the following targets:
|
All Makefile's support the following targets:
|
|
|
all -- make "everything"
|
all -- make "everything"
|
install -- install "everything"
|
install -- install "everything"
|
|
|
The following targets are provided automatically by
|
The following targets are provided automatically by
|
the included config files:
|
the included config files:
|
|
|
clean -- delete all targets
|
clean -- delete all targets
|
depend -- build a make dependency file
|
depend -- build a make dependency file
|
"variant targets" -- special variants, see below
|
"variant targets" -- special variants, see below
|
|
|
|
|
All directory Makefiles automatically propagate all these targets. If
|
All directory Makefiles automatically propagate all these targets. If
|
you don't wish to support 'all' or 'install' in your source directory,
|
you don't wish to support 'all' or 'install' in your source directory,
|
you must leave the rules section empty, as the parent directory Makefile
|
you must leave the rules section empty, as the parent directory Makefile
|
will attempt it on recursive make's.
|
will attempt it on recursive make's.
|
|
|
|
|
Configuration
|
Configuration
|
-------------
|
-------------
|
|
|
All the real work described here happens in file(s) included
|
All the real work described here happens in file(s) included
|
from your Makefile.
|
from your Makefile.
|
|
|
All Makefiles include a customization file which is used to select
|
All Makefiles include a customization file which is used to select
|
compiler and host operating system. The environment variable
|
compiler and host operating system. The environment variable
|
RTEMS_MAKEFILE_PATH must point to the directory containing this file; eg:
|
RTEMS_MAKEFILE_PATH must point to the directory containing this file; eg:
|
|
|
export RTEMS_MAKEFILE_PATH=/.../pc386/
|
export RTEMS_MAKEFILE_PATH=/.../pc386/
|
|
|
All leaf Makefile's also include either 'make/leaf.cfg' (or
|
All leaf Makefile's also include either 'make/leaf.cfg' (or
|
'make/lib.cfg' for building libraries). These config files provide
|
'make/lib.cfg' for building libraries). These config files provide
|
default rules and set up the command macros as appropriate.
|
default rules and set up the command macros as appropriate.
|
|
|
All directory Makefiles include 'make/directory.cfg'. directory.cfg
|
All directory Makefiles include 'make/directory.cfg'. directory.cfg
|
provides all the rules for recursing through sub directories.
|
provides all the rules for recursing through sub directories.
|
|
|
The Makefile templates already perform these include's.
|
The Makefile templates already perform these include's.
|
|
|
'make/leaf.cfg' (or directory.cfg) in turn includes:
|
'make/leaf.cfg' (or directory.cfg) in turn includes:
|
|
|
a file specifying general purpose rules appropriate for
|
a file specifying general purpose rules appropriate for
|
both leaf and directory makefiles.
|
both leaf and directory makefiles.
|
( make/main.cfg )
|
( make/main.cfg )
|
|
|
personality modules specified by the customization file for:
|
personality modules specified by the customization file for:
|
compiler ( make/compilers/??.cfg )
|
compiler ( make/compilers/??.cfg )
|
|
|
|
|
generic rules file
|
generic rules file
|
------------------
|
------------------
|
|
|
[ make/main.cfg ]
|
[ make/main.cfg ]
|
included by leaf.cfg or directory.cfg.
|
included by leaf.cfg or directory.cfg.
|
|
|
This file contains some standard rules and variable assignments
|
This file contains some standard rules and variable assignments
|
that all Makefiles need.
|
that all Makefiles need.
|
|
|
It also includes the FORCEIT: pseudo target.
|
It also includes the FORCEIT: pseudo target.
|
|
|
|
|
OS config file for host machine
|
OS config file for host machine
|
-------------------------------
|
-------------------------------
|
|
|
[ make/os/OS-NAME.cfg ]
|
[ make/os/OS-NAME.cfg ]
|
included by main.cfg
|
included by main.cfg
|
|
|
Figures out the target architecture and specifies command names
|
Figures out the target architecture and specifies command names
|
for the OS tools including RCS/CVS (but NOT for the compiler tools).
|
for the OS tools including RCS/CVS (but NOT for the compiler tools).
|
|
|
|
|
Compiler configuration for the target
|
Compiler configuration for the target
|
-------------------------------------
|
-------------------------------------
|
|
|
[ compilers/COMPILER-NAME.cfg ]
|
[ compilers/COMPILER-NAME.cfg ]
|
included by leaf.cfg
|
included by leaf.cfg
|
|
|
Specifies the names of tools for compiling programs.
|
Specifies the names of tools for compiling programs.
|
Names in here should be fully qualified, and NOT depend on $PATH.
|
Names in here should be fully qualified, and NOT depend on $PATH.
|
|
|
Also specifies compiler flags to be used to generate optimized,
|
Also specifies compiler flags to be used to generate optimized,
|
debugging and profile versions, as well as rules to compile
|
debugging and profile versions, as well as rules to compile
|
assembly language and make makefile dependencies.
|
assembly language and make makefile dependencies.
|
|
|
|
|
Configuration Variables
|
Configuration Variables
|
-----------------------
|
-----------------------
|
|
|
Variables you have to set in the environment or in your Makefile.
|
Variables you have to set in the environment or in your Makefile.
|
Note: the RTEMS module files set RTEMS_ROOT and RTEMS_CUSTOM
|
Note: the RTEMS module files set RTEMS_ROOT and RTEMS_CUSTOM
|
for you.
|
for you.
|
|
|
Makefile Variables
|
Makefile Variables
|
------------------
|
------------------
|
|
|
RTEMS_BSP -- name of your 'bsp' eg: pc386, mvme136
|
RTEMS_BSP -- name of your 'bsp' eg: pc386, mvme136
|
|
|
RTEMS_CPU -- CPU architecture e.g.: i386, m68k
|
RTEMS_CPU -- CPU architecture e.g.: i386, m68k
|
|
|
RTEMS_CPU_FAMILY -- CPU model e.g.: i486dx, m68020
|
RTEMS_CPU_FAMILY -- CPU model e.g.: i486dx, m68020
|
|
|
RTEMS_ROOT -- The root of your source tree.
|
RTEMS_ROOT -- The root of your source tree.
|
All other file names are derived from this.
|
All other file names are derived from this.
|
[ eg: % setenv RTEMS_ROOT $HOME/work/RTEMS ]
|
[ eg: % setenv RTEMS_ROOT $HOME/work/RTEMS ]
|
|
|
RTEMS_CUSTOM -- name of your config files in make/custom
|
RTEMS_CUSTOM -- name of your config files in make/custom
|
Example:
|
Example:
|
$(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
|
$(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
|
|
|
The value RTEMS_ROOT is used in the custom
|
The value RTEMS_ROOT is used in the custom
|
files to generate the make(1) variables:
|
files to generate the make(1) variables:
|
|
|
PROJECT_RELEASE
|
PROJECT_RELEASE
|
PROJECT_BIN
|
PROJECT_BIN
|
PROJECT_INCLUDE
|
PROJECT_INCLUDE
|
PROJECT_TOOLS
|
PROJECT_TOOLS
|
|
|
etc., which are used within the make config files themselves.
|
etc., which are used within the make config files themselves.
|
(The files in make/*.cfg try to avoid use of word RTEMS so
|
(The files in make/*.cfg try to avoid use of word RTEMS so
|
they can be more easily shared by other projects)
|
they can be more easily shared by other projects)
|
|
|
Preset variables
|
Preset variables
|
----------------
|
----------------
|
|
|
Aside from command names set by the OS and compiler config files,
|
Aside from command names set by the OS and compiler config files,
|
a number of MAKE variables are automatically set and maintained by
|
a number of MAKE variables are automatically set and maintained by
|
the config files.
|
the config files.
|
|
|
PROJECT_RELEASE
|
PROJECT_RELEASE
|
-- release/install directory
|
-- release/install directory
|
[ $(PROJECT_ROOT) ]
|
[ $(PROJECT_ROOT) ]
|
|
|
PROJECT_BIN
|
PROJECT_BIN
|
-- directory for installed binaries
|
-- directory for installed binaries
|
[ $(PROJECT_ROOT)/bin ]
|
[ $(PROJECT_ROOT)/bin ]
|
|
|
PROJECT_TOOLS
|
PROJECT_TOOLS
|
-- directory for build environment commands
|
-- directory for build environment commands
|
[ eg: $(PROJECT_ROOT)/build-tools ]
|
[ eg: $(PROJECT_ROOT)/build-tools ]
|
|
|
ARCH -- target sub-directory for object code
|
ARCH -- target sub-directory for object code
|
[ eg: o-optimize or o-debug ]
|
[ eg: o-optimize or o-debug ]
|
|
|
VARIANTS -- full list of all possible values for $(ARCH);
|
VARIANTS -- full list of all possible values for $(ARCH);
|
used mainly for 'make clean'
|
used mainly for 'make clean'
|
[ eg: "o-optimize o-debug o-profile" ]
|
[ eg: "o-optimize o-debug o-profile" ]
|
|
|
VARIANT_VA -- Variant name.
|
VARIANT_VA -- Variant name.
|
Normally "", but for 'make debug' it is "debug",
|
Normally "", but for 'make debug' it is "debug",
|
for 'make profile', "profile, etc.
|
for 'make profile', "profile, etc.
|
|
|
see make/leaf.cfg for more info.
|
see make/leaf.cfg for more info.
|
|
|
|
|
Preset compilation variables
|
Preset compilation variables
|
----------------------------
|
----------------------------
|
|
|
This is a list of some of the compilation variables.
|
This is a list of some of the compilation variables.
|
Refer to the compiler config files for the complete list.
|
Refer to the compiler config files for the complete list.
|
|
|
CFLAGS_OPTIMIZE_V -- value of optimize flag for compiler
|
CFLAGS_OPTIMIZE_V -- value of optimize flag for compiler
|
[ eg: -O ]
|
[ eg: -O ]
|
|
|
CFLAGS_DEBUG_V -- value of debug flag for compiler
|
CFLAGS_DEBUG_V -- value of debug flag for compiler
|
[ eg: -g ]
|
[ eg: -g ]
|
|
|
CFLAGS_PROFILE_V -- compiler profile flags
|
CFLAGS_PROFILE_V -- compiler profile flags
|
[ eg: -pg ]
|
[ eg: -pg ]
|
|
|
CFLAGS_DEBUG_OPTIMIZE_V
|
CFLAGS_DEBUG_OPTIMIZE_V
|
-- optimize flag if compiling for debug
|
-- optimize flag if compiling for debug
|
[ eg: "" ]
|
[ eg: "" ]
|
|
|
CFLAGS_DEBUG
|
CFLAGS_DEBUG
|
CFLAGS_PROFILE
|
CFLAGS_PROFILE
|
CFLAGS_OPTIMIZE -- current values for each depending
|
CFLAGS_OPTIMIZE -- current values for each depending
|
on make variant.
|
on make variant.
|
|
|
LDFLAGS_STATIC_LIBRARIES_V
|
LDFLAGS_STATIC_LIBRARIES_V
|
-- ld option for static libraries
|
-- ld option for static libraries
|
-Bstatic or -dy (svr4)
|
-Bstatic or -dy (svr4)
|
|
|
LDFLAGS_SHARED_LIBRARIES_V
|
LDFLAGS_SHARED_LIBRARIES_V
|
-- ld option for dynamic libraries
|
-- ld option for dynamic libraries
|
-Bdynamic or -dn (svr4)
|
-Bdynamic or -dn (svr4)
|
|
|
Makefile Variables
|
Makefile Variables
|
------------------
|
------------------
|
|
|
The following variables may be set in a typical Makefile.
|
The following variables may be set in a typical Makefile.
|
|
|
C_PIECES -- File names of your .c files without '.c' suffix.
|
C_PIECES -- File names of your .c files without '.c' suffix.
|
[ eg: C_PIECES=main funcs stuff ]
|
[ eg: C_PIECES=main funcs stuff ]
|
|
|
CC_PIECES -- ditto, except for .cc files
|
CC_PIECES -- ditto, except for .cc files
|
|
|
S_PIECES -- ditto, except for .S files.
|
S_PIECES -- ditto, except for .S files.
|
|
|
LIB -- target library name in leaf library makefiles.
|
LIB -- target library name in leaf library makefiles.
|
[ eg: LIB=${ARCH}/libmine.a ]
|
[ eg: LIB=${ARCH}/libmine.a ]
|
|
|
H_FILES -- your .h files in this directory.
|
H_FILES -- your .h files in this directory.
|
[ eg: H_FILES=stuff.h extra.h ]
|
[ eg: H_FILES=stuff.h extra.h ]
|
|
|
DEFINES -- cc -D items. Included in CPPFLAGS.
|
DEFINES -- cc -D items. Included in CPPFLAGS.
|
leaf Makefiles.
|
leaf Makefiles.
|
[ eg: DEFINES += -DUNIX ]
|
[ eg: DEFINES += -DUNIX ]
|
|
|
CPPFLAGS -- -I include directories.
|
CPPFLAGS -- -I include directories.
|
leaf Makefiles.
|
leaf Makefiles.
|
[ eg: CPPFLAGS += -I../include ]
|
[ eg: CPPFLAGS += -I../include ]
|
|
|
LD_PATHS -- arguments to -L for ld.
|
LD_PATHS -- arguments to -L for ld.
|
Will be prefixed with '-L' or '-L ' as appropriate
|
Will be prefixed with '-L' or '-L ' as appropriate
|
and included in LDFLAGS.
|
and included in LDFLAGS.
|
|
|
LDFLAGS -- -L arguments to ld; more may be ADDed.
|
LDFLAGS -- -L arguments to ld; more may be ADDed.
|
|
|
LD_LIBS -- libraries to be linked in.
|
LD_LIBS -- libraries to be linked in.
|
[ eg: LDLIBS += ../libfoo/${ARCH}/libfoo.a ]
|
[ eg: LDLIBS += ../libfoo/${ARCH}/libfoo.a ]
|
|
|
XCFLAGS -- "extra" CFLAGS for special needs. Pre-pended
|
XCFLAGS -- "extra" CFLAGS for special needs. Pre-pended
|
to CFLAGS.
|
to CFLAGS.
|
Not set or used by Makefiles.
|
Not set or used by Makefiles.
|
Can be set on command line to pass extra flags
|
Can be set on command line to pass extra flags
|
to the compiler.
|
to the compiler.
|
|
|
XCPPFLAGS -- ditto for CPPFLAGS
|
XCPPFLAGS -- ditto for CPPFLAGS
|
Can be set on command line to pass extra flags
|
Can be set on command line to pass extra flags
|
to the preprocessor.
|
to the preprocessor.
|
|
|
XCCPPFLAGS -- same as XCPPFLAGS for C++.
|
XCCPPFLAGS -- same as XCPPFLAGS for C++.
|
|
|
XCCFLAGS -- same as XCFLAGS for C++.
|
XCCFLAGS -- same as XCFLAGS for C++.
|
|
|
SUBDIRS -- list of sub directories for make recursion.
|
SUBDIRS -- list of sub directories for make recursion.
|
directory Makefiles only.
|
directory Makefiles only.
|
[ eg: SUBDIRS=cpu bsp ]
|
[ eg: SUBDIRS=cpu bsp ]
|
|
|
CLEAN_ADDITIONS
|
CLEAN_ADDITIONS
|
-- list of files or directories that should
|
-- list of files or directories that should
|
be deleted by 'make clean'
|
be deleted by 'make clean'
|
[ eg: CLEAN_ADDITIONS += y.tab.c ]
|
[ eg: CLEAN_ADDITIONS += y.tab.c ]
|
|
|
See 'leaf.cfg' for the 'clean:' rule and its
|
See 'leaf.cfg' for the 'clean:' rule and its
|
default deletions.
|
default deletions.
|
|
|
CLOBBER_ADDITIONS
|
CLOBBER_ADDITIONS
|
-- list of files or directories that should
|
-- list of files or directories that should
|
be deleted by 'make clobber'
|
be deleted by 'make clobber'
|
Since 'make clobber' includes 'make clean',
|
Since 'make clobber' includes 'make clean',
|
you don't need to duplicate items in both.
|
you don't need to duplicate items in both.
|
|
|
Command names
|
Command names
|
-------------
|
-------------
|
|
|
The following commands should only be called
|
The following commands should only be called
|
as make variables:
|
as make variables:
|
|
|
MAKE,INSTALL,INSTALL_VARIANT,SHELL
|
MAKE,INSTALL,INSTALL_VARIANT,SHELL
|
|
|
ECHO,CAT,CP,MV,LN,MKDIR,CHMOD
|
ECHO,CAT,CP,MV,LN,MKDIR,CHMOD
|
|
|
SED
|
SED
|
|
|
CC,CPP,AS,AR,LD,NM,SIZE,RANLIB,MKLIB,
|
CC,CPP,AS,AR,LD,NM,SIZE,RANLIB,MKLIB,
|
YACC,LEX,LINT,CTAGS,ETAGS
|
YACC,LEX,LINT,CTAGS,ETAGS
|
|
|
In addition, the following commands specifically support
|
In addition, the following commands specifically support
|
the installation of libraries, executables, header files,
|
the installation of libraries, executables, header files,
|
and other things that need to be installed:
|
and other things that need to be installed:
|
|
|
INSTALL_CHANGE - install a file only if the source
|
INSTALL_CHANGE - install a file only if the source
|
file is actually different than
|
file is actually different than
|
the installed copy or if there is
|
the installed copy or if there is
|
no installed copy. USAGE:
|
no installed copy. USAGE:
|
|
|
usage: install-if-change [ -vmV ] file [ file ... ] dest-directory-or-file
|
usage: install-if-change [ -vmV ] file [ file ... ] dest-directory-or-file
|
-v -- verbose
|
-v -- verbose
|
-V suffix -- suffix to append to targets (before any . suffix)
|
-V suffix -- suffix to append to targets (before any . suffix)
|
eg: -V _g would change 'foo' to 'foo_g' and
|
eg: -V _g would change 'foo' to 'foo_g' and
|
'libfoo.a' to 'libfoo_g.a'
|
'libfoo.a' to 'libfoo_g.a'
|
-m mode -- mode for new file(s)
|
-m mode -- mode for new file(s)
|
|
|
INSTALL_VARIANT - installs the built file using the
|
INSTALL_VARIANT - installs the built file using the
|
proper variant suffix (e.g. _g
|
proper variant suffix (e.g. _g
|
for debug turns libmine.a into libmine_g.a)
|
for debug turns libmine.a into libmine_g.a)
|
This is implemented as a macro that
|
This is implemented as a macro that
|
invokes install-if-change with the
|
invokes install-if-change with the
|
appropriate -V argument setting.
|
appropriate -V argument setting.
|
|
|
Special Directory Makefile Targets
|
Special Directory Makefile Targets
|
----------------------------------
|
----------------------------------
|
|
|
all_WRAPUP
|
all_WRAPUP
|
clean_WRAPUP
|
clean_WRAPUP
|
install_WRAPUP
|
install_WRAPUP
|
clean_WRAPUP
|
clean_WRAPUP
|
clobber_WRAPUP
|
clobber_WRAPUP
|
depend_WRAPUP
|
depend_WRAPUP
|
-- Specify additional commands for recursive
|
-- Specify additional commands for recursive
|
(directory level) targets.
|
(directory level) targets.
|
|
|
This is handy in certain cases where you need
|
This is handy in certain cases where you need
|
to do bit of work *after* a recursive make.
|
to do bit of work *after* a recursive make.
|
|
|
make/Templates
|
make/Templates
|
--------------
|
--------------
|
|
|
This directory contains Makefile and source file templates that
|
This directory contains Makefile and source file templates that
|
should help in creating or converting makefiles.
|
should help in creating or converting makefiles.
|
|
|
Makefile.leaf
|
Makefile.leaf
|
Template leaf Makefiles.
|
Template leaf Makefiles.
|
|
|
Makefile.lib
|
Makefile.lib
|
Template leaf library Makefiles.
|
Template leaf library Makefiles.
|
|
|
Makefile.dir
|
Makefile.dir
|
Template "directory" makefile.
|
Template "directory" makefile.
|
|
|
|
|
|
|
|
|
|
|