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.
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.
34 # list all path requested by user
35 _all-copy := $(patsubst copy-y-%,%,$(filter copy-y-%,$(.VARIABLES)))
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)) \
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)) \
60 # add them to the list of targets and clean
61 all-targets += $(all-copy)
62 all-clean-file += $(all-copy)
64 # convert format of executable from elf to ihex
65 # $1: source executable (elf)
66 # $2: destination file
67 copy_cmd = $(CP) $(1) $(2)
69 # print line used to convert executable format
71 copy_print_cmd = echo $(call protect_quote,$(call copy_cmd,$1,$2))
73 copy_print_cmd = echo " COPY $(2)"