Subversion Repositories DevTools

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

# -*- mode: mak -*-
###############################################################################
# File:         TOOLSET/standard.rul[e]
#
# Contents:     Toplevel toolset driver for doing stuff
#
#       CC              Compile a C source file
#       CCDEPEND
#       CXX             Compile a C++ source file
#       CCDEPEND
#       AS              Compile an assembler file
#       ASDEPEND
#       AR              Archive
#       LD              Linker
#       SHLD            Linked (shared library)
#
# Revision History:
#      `95       JONW   CMOS dev env
#       xx/08/99 APY    Ported
#       10/03/00 APY    Modified 'cc' output filtering
#       13/11/00        ${exe} now embeddes '.' if required.
#       29/11/00        SHLD and SHLDDEPEND
#       16/11/01        xx_term
#       06/05/04        $(show_environment) missing from several rules
#       08/07/04        cc_redirect filter now saves the exit code of the compile
#                       and uses it after the filter has been processed
#                       This will ensure that the user sees any errors
#
###############################################################################

#
#   Global control of compiler filters
#   USE_FILTER is defined by default
#
ifndef USE_FILTER
    cc_error_filter =
    cxx_error_filter =
    as_error_filter =
endif

###############################################################################
#  Compile a C file.
###############################################################################

cc_term         +=

ifdef cc_error_filter
 ifdef cc_redirect
define CC
        @$(cc_pre)
        @$(show_environment)
        $(cc) $(cc_flags) $(cc_o_switch) $(cc_source) > $(basename $@).err $(cc_term);\
        rv=$$?;\
        $(cc_error_filter) < $(basename $@).err;\
        exit $$rv;
        @$(cc_post)
endef
 else
  ifdef cc_redirect_stderr
define CC
        @$(cc_pre)
        @$(show_environment)
        $(cc) $(cc_flags) $(cc_o_switch) $(cc_source) 2>&1 | $(cc_error_filter) $(cc_term)
        @$(cc_post)
endef
  else
define CC
        @$(cc_pre)
        @$(show_environment)
        $(cc) $(cc_flags) $(cc_o_switch) $(cc_source) | $(cc_error_filter) $(cc_term)
        @$(cc_post)
endef
  endif
 endif
else
define CC
        @$(cc_pre)
        @$(show_environment)
        $(cc) $(cc_flags) $(cc_o_switch) $(cc_source) $(cc_term)
        @$(cc_post)
endef
endif

$(OBJDIR)/%.${o}:       %.c $(cc_init)
        $(CC)

ccdep_term +=
define CCDEPEND
        @$(ccdep_pre)
        @$(show_environment)
        $(ccdep) $(ccdep_flags) $(ccdep_o_switch) $(ccdep_source) $(ccdep_term)
        @$(ccdep_post)
endef


###############################################################################
#  Compile a C++ file.
###############################################################################

cxx_term        +=

ifdef cxx_error_filter
 ifdef cxx_redirect
define CXX
        @$(cxx_pre)
        @$(show_environment)
        $(cxx) $(cxx_flags) $(cxx_o_switch) $(cxx_source) > $(basename $@).err $(cxx_term);\
        rv=$$?;\
            $(cxx_error_filter) < $(basename $@).err;\
        exit $$rv
        @$(rm) $(basename $@).err
        @$(cxx_post)
endef
 else
  ifdef cxx_redirect_stderr
define CXX
        @$(cxx_pre)
        @$(show_environment)
        $(cxx) $(cxx_flags) $(cxx_o_switch) $(cxx_source) 2>&1 | $(cxx_error_filter) $(cxx_term)
        @$(cxx_post)
endef
  else
define CXX
        @$(cxx_pre)
        @$(show_environment)
        $(cxx) $(cxx_flags) $(cxx_o_switch) $(cxx_source) | $(cxx_error_filter) $(cxx_term)
        @$(cxx_post)
endef
  endif
 endif
else
define CXX
        @$(cxx_pre)
        @$(show_environment)
        $(cxx) $(cxx_flags) $(cxx_o_switch) $(cxx_source) $(cxx_term)
        @$(cxx_post)
endef
endif

ifdef cxx_init
$(OBJDIR)/%.${o}:       %.cc $(cxx_init)
        $(CXX)

$(OBJDIR)/%.${o}:       %.cpp $(cxx_init)
        $(CXX)
endif

###############################################################################
#  Assemble a file of assembler.
###############################################################################

as_term         +=


ifdef as_error_filter
 ifdef as_redirect
define AS
        @$(as_pre)
        @$(show_environment)
        $(as) $(as_flags) $(as_o_switch) $(as_source) > $(basename $@).as $(as_term)
        @$(as_error_filter) < $(basename $@).as
        @$(rm) $(basename $@).as
        @$(as_post)
  endef
 else
define AS
        @$(as_pre)
        @$(show_environment)
        $(as) $(as_flags) $(as_o_switch) $(as_source) | $(as_error_filer) $(as_term)
        @$(as_post)
endef
 endif
else
define AS
        @$(as_pre)
        @$(show_environment)
        $(as) $(as_flags) $(as_o_switch) $(as_source) $(as_term)
        @$(as_post)
endef
endif

ifdef as_init
$(OBJDIR)/%.${o}:       %.${s} $(as_init)
        $(AS)
endif

###############################################################################
#  Build a library
###############################################################################

ar_term         +=

define AR
        @$(ar_pre)
        @$(show_environment)
        $(ar) $(ar_flags) $(ar_o_switch) $(ar_term)
        @$(ar_post)
endef

ifdef ar_depend
$(BINDIR)/%.${a}:       $(ar_depend) $(ar_init)
        $(AR)
endif

###############################################################################
#  Merge libraries
###############################################################################

define ARMERGE
        @$(armerge_pre)
        @$(show_environment)
        $(armerge) $(armerge_flags) $(armerge_o_switch)
        @$(armerge_post)
endef

ifdef armerge_depend
$(BINDIR)/%.${a}:       $(armerge_depend) $(armerge_init)
        $(ARMERGE)
endif


###############################################################################
# Generate a large relocatable object module from a bunch of object
# modules. Only bother with this if the compiler suite defines a
# `rel' extension for file names.
###############################################################################

rel_ld_term     +=

ifdef rel
ifneq (${a},${rel})
#
#       Only have the rules for a large relocatable build if it's not
#       the same as a normal library build.
#
$(BINDIR)/%.$(rel):     $(rel_ld_init)
        @$(rel_ld_pre)
        @$(show_environment)
        $(rel_ld) $(rel_ldflags) $(rel_ld_o_switch) $(rel_ld_term)
        @$(rel_ld_post)
endif
endif

###############################################################################
#  Link a shared library
###############################################################################

shld_term       +=

ifdef shld
define SHLD
        @$(shld_pre)
        @$(show_environment)
        $(shld) $(shld_flags) $(shld_o_switch) $(shld_term)
        @$(shld_post)
endef
endif

###############################################################################
#  Link an executable
###############################################################################

ld_term         +=

define LD
        @$(ld_pre)
        @$(show_environment)
        $(ld) $(ld_flags) $(ld_o_switch) $(ld_term)
        @$(ld_post)
endef

ifdef ld_depend
$(BINDIR)/%$(exe):      $(ld_depend) $(ld_init)
        $(LD)
endif

#