initial revision
[ucgine.git] / mk / ucgine-copy-vars.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 # copy a file
29 # copy-y-$(copy) is provided by the user
30 #   $(copy) is the path of the directory containing the destination
31 #   files, and the variable contains the path of the files to copy. Several
32 #   copy-y-$(copy) can be present.
33
34 # list all path requested by user
35 _all-copy := $(patsubst copy-y-%,%,$(filter copy-y-%,$(.VARIABLES)))
36 all-copy :=
37
38 # for each copy, create the following variables:
39 #   out-$(copy) = output path of the executable
40 #   pre-$(copy) = list of prerequisites for this executable
41 # We also add the files in $(all-copy).
42 $(foreach copy,$(_all-copy),\
43         $(if $(notdir $(copy)), \
44                 $(if $(call compare,$(words $(copy-y-$(copy))),1), \
45                         $(error "only one source file is allowed in copy-y-$(copy)")) \
46                 $(eval dst := $(dir $(copy))$(notdir $(copy-y-$(copy)))) \
47                 $(eval out-$(copy) := $(dir $(copy))) \
48                 $(eval pre-$(copy) := $(copy-y-$(copy))) \
49                 $(eval all-copy += $(dst)) \
50         , \
51                 $(foreach src,$(copy-y-$(copy)),\
52                         $(eval dst := $(copy)$(notdir $(src))) \
53                         $(eval out-$(copy) := $(copy)) \
54                         $(eval pre-$(dst) := $(src)) \
55                         $(eval all-copy += $(dst)) \
56                 ) \
57         ) \
58 )
59
60 # add them to the list of targets and clean
61 all-targets += $(all-copy)
62 all-clean-file += $(all-copy)
63
64 # convert format of executable from elf to ihex
65 #   $1: source executable (elf)
66 #   $2: destination file
67 copy_cmd = $(CP) $(1) $(2)
68
69 # print line used to convert executable format
70 ifeq ($(V),1)
71 copy_print_cmd = echo $(call protect_quote,$(call copy_cmd,$1,$2))
72 else
73 copy_print_cmd = echo "  COPY $(2)"
74 endif