############################################################################### # 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) # ############################################################################### # # 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 #