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 # create a symbolic link of a file
29 # slink-y-$(slink) is provided by the user
30 # $(slink) is the path of the directory containing the destination
31 # files, and the variable contains the path of the files to linked. Several
32 # slink-y-$(slink) can be present.
34 # list all path requested by user
35 _all-slink := $(patsubst slink-y-%,%,$(filter slink-y-%,$(.VARIABLES)))
38 # for each slink, create the following variables:
39 # out-$(slink) = output path of the executable
40 # pre-$(slink) = list of prerequisites for this executable
41 # We also add the files in $(all-slink).
42 $(foreach slink,$(_all-slink),\
43 $(if $(notdir $(slink)), \
44 $(if $(call compare,$(words $(slink-y-$(slink))),1), \
45 $(error "only one source file is allowed in slink-y-$(slink)")) \
46 $(eval dst := $(dir $(slink))$(notdir $(slink-y-$(slink)))) \
47 $(eval out-$(slink) := $(dir $(slink))) \
48 $(eval pre-$(slink) := $(slink-y-$(slink))) \
49 $(eval all-slink += $(dst)) \
51 $(foreach src,$(slink-y-$(slink)),\
52 $(eval dst := $(slink)$(notdir $(src))) \
53 $(eval out-$(slink) := $(slink)) \
54 $(eval pre-$(dst) := $(src)) \
55 $(eval all-slink += $(dst)) \
60 # add them to the list of targets and clean
61 all-targets += $(all-slink)
62 all-clean-file += $(all-slink)
64 # convert format of executable from elf to ihex
65 # $1: source executable (elf)
66 # $2: destination file
67 slink_cmd = $(LN) -nsf $(abspath $(1)) $(2)
69 # print line used to convert executable format
71 slink_print_cmd = echo $(call protect_quote,$(call slink_cmd,$1,$2))
73 slink_print_cmd = echo " SLINK $(2)"