initial revision
[ucgine.git] / mk / ucgine-obj-rules.mk
1 #
2 # Copyright 2015, Olivier MATZ <zer0@droids-corp.org>
3 #
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are met:
6 #
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.
15 #
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.
26 #
27
28 # dump some infos if debug is enabled
29 ifeq ($(D),1)
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))) \
34 )
35 $(call disp_list,------ all-iobj,$(all-iobj))
36 $(foreach iobj,$(all-iobj),\
37         $(call disp_list,pre-$(iobj),$(pre-$(iobj))) \
38 )
39 endif
40
41 # if a generated file has the same name than a user target,
42 # generate an error
43 conflicts := $(filter $(all-iobj),$(all-targets))
44 $(if $(conflicts), \
45         $(error Intermediate file has the same names than user targets:\
46                 $(conflicts)))
47
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))) \
52 )
53 $(foreach iobj,$(all-iobj),\
54         $(eval -include $(call depfile,$(iobj))) \
55         $(eval -include $(call cmdfile,$(iobj))) \
56 )
57
58 # remove duplicates
59 filtered-all-iobj := $(sort $(all-iobj))
60
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,$@))
70
71 # remove duplicates
72 filtered-all-obj := $(sort $(all-obj))
73
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,$@))