2 # Copyright 2015, Olivier MATZ <zer0@droids-corp.org>
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are met:
7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above copyright
10 # notice, this list of conditions and the following disclaimer in the
11 # documentation and/or other materials provided with the distribution.
12 # * Neither the name of the University of California, Berkeley nor the
13 # names of its contributors may be used to endorse or promote products
14 # derived from this software without specific prior written permission.
16 # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
17 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 # DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
20 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 # dump some infos if debug is enabled
30 $(call disp_list,------ all-obj,$(all-obj))
31 $(foreach obj,$(all-obj),\
32 $(info,out-$(obj): $(out-$(obj))) \
33 $(call disp_list,pre-$(obj),$(pre-$(obj))) \
35 $(call disp_list,------ all-iobj,$(all-iobj))
36 $(foreach iobj,$(all-iobj),\
37 $(call disp_list,pre-$(iobj),$(pre-$(iobj))) \
41 # if a generated file has the same name than a user target,
43 conflicts := $(filter $(all-iobj),$(all-targets))
45 $(error Intermediate file has the same names than user targets:\
48 # include dependencies and commands files if they exist
49 $(foreach obj,$(all-obj),\
50 $(eval -include $(call depfile,$(obj))) \
51 $(eval -include $(call cmdfile,$(obj))) \
53 $(foreach iobj,$(all-iobj),\
54 $(eval -include $(call depfile,$(iobj))) \
55 $(eval -include $(call cmdfile,$(iobj))) \
59 filtered-all-iobj := $(sort $(all-iobj))
61 # convert source files to intermediate object file
62 $(filtered-all-iobj): $$(pre-$$@) $$(wildcard $$(dep-$$@)) FORCE
63 @[ -d $(dir $@) ] || mkdir -p $(dir $@)
64 @$(call display_deps,$(pre-$(@)),$@,$(call compile_cmd,$(pre-$(@)),$@),$?)
65 @$(if $(call check_deps,$@,$(call compile_cmd,$(pre-$(@)),$@),$?),\
66 $(call compile_print_cmd,$(pre-$(@)),$@) && \
67 $(call compile_cmd,$(pre-$(@)),$@) && \
68 $(call save_cmd,$(call compile_cmd,$(pre-$(@)),$@),$@) && \
69 $(call obj-fixdep,$@))
72 filtered-all-obj := $(sort $(all-obj))
74 # combine several objects files to one
75 $(filtered-all-obj): $$(pre-$$@) $$(wildcard $$(dep-$$@)) FORCE
76 @[ -d $(dir $@) ] || mkdir -p $(dir $@)
77 @$(call display_deps,$(pre-$(@)),$@,\
78 $(call combine_cmd,$(pre-$(@)),$@),$?)
79 @$(if $(call check_deps,$@,$(call combine_cmd,$(pre-$(@)),$@),$?),\
80 $(call combine_print_cmd,$(pre-$(@)),$@) && \
81 $(call combine_cmd,$(pre-$(@)),$@) && \
82 $(call save_cmd,$(call combine_cmd,$(pre-$(@)),$@),$@) && \
83 $(call create_empty_depfile,$@))