1233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
2233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
4233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  Use of this source code is governed by a BSD-style license
5233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  that can be found in the LICENSE file in the root of the source
6233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  tree. An additional intellectual property rights grant can be found
7233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  in the file PATENTS.  All contributing project authors may
8233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  be found in the AUTHORS file in the root of the source tree.
9233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
10233d2500723e5594f3e7c70896ffeeef32b9c950ywan
11233d2500723e5594f3e7c70896ffeeef32b9c950ywan
12233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude config.mk
13233d2500723e5594f3e7c70896ffeeef32b9c950ywanquiet?=true
14233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(target),)
15233d2500723e5594f3e7c70896ffeeef32b9c950ywan# If a target wasn't specified, invoke for all enabled targets.
16233d2500723e5594f3e7c70896ffeeef32b9c950ywan.DEFAULT:
17233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@for t in $(ALL_TARGETS); do \
18233d2500723e5594f3e7c70896ffeeef32b9c950ywan	     $(MAKE) --no-print-directory target=$$t $(MAKECMDGOALS) || exit $$?;\
19233d2500723e5594f3e7c70896ffeeef32b9c950ywan        done
20233d2500723e5594f3e7c70896ffeeef32b9c950ywanall: .DEFAULT
21233d2500723e5594f3e7c70896ffeeef32b9c950ywanclean:: .DEFAULT
22233d2500723e5594f3e7c70896ffeeef32b9c950ywaninstall:: .DEFAULT
23233d2500723e5594f3e7c70896ffeeef32b9c950ywantest:: .DEFAULT
24233d2500723e5594f3e7c70896ffeeef32b9c950ywantestdata:: .DEFAULT
25233d2500723e5594f3e7c70896ffeeef32b9c950ywan
26233d2500723e5594f3e7c70896ffeeef32b9c950ywan
27233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Note: md5sum is not installed on OS X, but openssl is. Openssl may not be
28233d2500723e5594f3e7c70896ffeeef32b9c950ywan# installed on cygwin, so we need to autodetect here.
29233d2500723e5594f3e7c70896ffeeef32b9c950ywanmd5sum := $(firstword $(wildcard \
30233d2500723e5594f3e7c70896ffeeef32b9c950ywan          $(foreach e,md5sum openssl,\
31233d2500723e5594f3e7c70896ffeeef32b9c950ywan          $(foreach p,$(subst :, ,$(PATH)),$(p)/$(e)*))\
32233d2500723e5594f3e7c70896ffeeef32b9c950ywan          ))
33233d2500723e5594f3e7c70896ffeeef32b9c950ywanmd5sum := $(if $(filter %openssl,$(md5sum)),$(md5sum) dgst -md5,$(md5sum))
34233d2500723e5594f3e7c70896ffeeef32b9c950ywan
35233d2500723e5594f3e7c70896ffeeef32b9c950ywanTGT_CC:=$(word 3, $(subst -, ,$(TOOLCHAIN)))
36233d2500723e5594f3e7c70896ffeeef32b9c950ywandist:
37233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@for t in $(ALL_TARGETS); do \
38233d2500723e5594f3e7c70896ffeeef32b9c950ywan	     $(MAKE) --no-print-directory target=$$t $(MAKECMDGOALS) || exit $$?;\
39233d2500723e5594f3e7c70896ffeeef32b9c950ywan        done
40233d2500723e5594f3e7c70896ffeeef32b9c950ywan        # Run configure for the user with the current toolchain.
41233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@if [ -d "$(DIST_DIR)/src" ]; then \
42233d2500723e5594f3e7c70896ffeeef32b9c950ywan            mkdir -p "$(DIST_DIR)/build"; \
43233d2500723e5594f3e7c70896ffeeef32b9c950ywan            cd "$(DIST_DIR)/build"; \
44233d2500723e5594f3e7c70896ffeeef32b9c950ywan            echo "Rerunning configure $(CONFIGURE_ARGS)"; \
45233d2500723e5594f3e7c70896ffeeef32b9c950ywan            ../src/configure $(CONFIGURE_ARGS); \
46233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $(if $(filter vs%,$(TGT_CC)),make NO_LAUNCH_DEVENV=1;) \
47233d2500723e5594f3e7c70896ffeeef32b9c950ywan        fi
48233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@if [ -d "$(DIST_DIR)" ]; then \
49233d2500723e5594f3e7c70896ffeeef32b9c950ywan            echo "    [MD5SUM] $(DIST_DIR)"; \
50233d2500723e5594f3e7c70896ffeeef32b9c950ywan	    cd $(DIST_DIR) && \
51233d2500723e5594f3e7c70896ffeeef32b9c950ywan	    $(md5sum) `find . -name md5sums.txt -prune -o -type f -print` \
52233d2500723e5594f3e7c70896ffeeef32b9c950ywan                | sed -e 's/MD5(\(.*\))= \([0-9a-f]\{32\}\)/\2  \1/' \
53233d2500723e5594f3e7c70896ffeeef32b9c950ywan                > md5sums.txt;\
54233d2500723e5594f3e7c70896ffeeef32b9c950ywan        fi
55233d2500723e5594f3e7c70896ffeeef32b9c950ywan
56233d2500723e5594f3e7c70896ffeeef32b9c950ywan
57233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
58233d2500723e5594f3e7c70896ffeeef32b9c950ywan
59233d2500723e5594f3e7c70896ffeeef32b9c950ywanifneq ($(target),)
60233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Normally, we want to build the filename from the target and the toolchain.
61233d2500723e5594f3e7c70896ffeeef32b9c950ywan# This disambiguates from the $(target).mk file that exists in the source tree.
62233d2500723e5594f3e7c70896ffeeef32b9c950ywan# However, the toolchain is part of the target in universal builds, so we
63233d2500723e5594f3e7c70896ffeeef32b9c950ywan# don't want to include TOOLCHAIN in that case. FAT_ARCHS is used to test
64233d2500723e5594f3e7c70896ffeeef32b9c950ywan# if we're in the universal case.
65233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude $(target)$(if $(FAT_ARCHS),,-$(TOOLCHAIN)).mk
66233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
67233d2500723e5594f3e7c70896ffeeef32b9c950ywanBUILD_ROOT?=.
68233d2500723e5594f3e7c70896ffeeef32b9c950ywanVPATH=$(SRC_PATH_BARE)
69233d2500723e5594f3e7c70896ffeeef32b9c950ywanCFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)
70233d2500723e5594f3e7c70896ffeeef32b9c950ywanCXXFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)
71233d2500723e5594f3e7c70896ffeeef32b9c950ywanASFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT)/ -I$(SRC_PATH)/
72233d2500723e5594f3e7c70896ffeeef32b9c950ywanDIST_DIR?=dist
73233d2500723e5594f3e7c70896ffeeef32b9c950ywanHOSTCC?=gcc
74233d2500723e5594f3e7c70896ffeeef32b9c950ywanTGT_ISA:=$(word 1, $(subst -, ,$(TOOLCHAIN)))
75233d2500723e5594f3e7c70896ffeeef32b9c950ywanTGT_OS:=$(word 2, $(subst -, ,$(TOOLCHAIN)))
76233d2500723e5594f3e7c70896ffeeef32b9c950ywanTGT_CC:=$(word 3, $(subst -, ,$(TOOLCHAIN)))
77233d2500723e5594f3e7c70896ffeeef32b9c950ywanquiet:=$(if $(or $(verbose), $(V)),, yes)
78233d2500723e5594f3e7c70896ffeeef32b9c950ywanqexec=$(if $(quiet),@)
79233d2500723e5594f3e7c70896ffeeef32b9c950ywan
80233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Cancel built-in implicit rules
81233d2500723e5594f3e7c70896ffeeef32b9c950ywan%: %.o
82233d2500723e5594f3e7c70896ffeeef32b9c950ywan%.asm:
83233d2500723e5594f3e7c70896ffeeef32b9c950ywan%.a:
84233d2500723e5594f3e7c70896ffeeef32b9c950ywan%: %.cc
85233d2500723e5594f3e7c70896ffeeef32b9c950ywan
86233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
87233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Common rules"
88233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
89233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PHONY: all
90233d2500723e5594f3e7c70896ffeeef32b9c950ywanall:
91233d2500723e5594f3e7c70896ffeeef32b9c950ywan
92233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PHONY: clean
93233d2500723e5594f3e7c70896ffeeef32b9c950ywanclean::
94233d2500723e5594f3e7c70896ffeeef32b9c950ywan	rm -f $(OBJS-yes) $(OBJS-yes:.o=.d) $(OBJS-yes:.asm.s.o=.asm.s)
95233d2500723e5594f3e7c70896ffeeef32b9c950ywan	rm -f $(CLEAN-OBJS)
96233d2500723e5594f3e7c70896ffeeef32b9c950ywan
97233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PHONY: clean
98233d2500723e5594f3e7c70896ffeeef32b9c950ywandistclean: clean
99233d2500723e5594f3e7c70896ffeeef32b9c950ywan	if [ -z "$(target)" ]; then \
100233d2500723e5594f3e7c70896ffeeef32b9c950ywan      rm -f Makefile; \
101233d2500723e5594f3e7c70896ffeeef32b9c950ywan      rm -f config.log config.mk; \
102233d2500723e5594f3e7c70896ffeeef32b9c950ywan      rm -f vpx_config.[hc] vpx_config.asm; \
103233d2500723e5594f3e7c70896ffeeef32b9c950ywan    else \
104233d2500723e5594f3e7c70896ffeeef32b9c950ywan      rm -f $(target)-$(TOOLCHAIN).mk; \
105233d2500723e5594f3e7c70896ffeeef32b9c950ywan    fi
106233d2500723e5594f3e7c70896ffeeef32b9c950ywan
107233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PHONY: dist
108233d2500723e5594f3e7c70896ffeeef32b9c950ywandist:
109233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PHONY: install
110233d2500723e5594f3e7c70896ffeeef32b9c950ywaninstall::
111233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PHONY: test
112233d2500723e5594f3e7c70896ffeeef32b9c950ywantest::
113233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PHONY: testdata
114233d2500723e5594f3e7c70896ffeeef32b9c950ywantestdata::
115233d2500723e5594f3e7c70896ffeeef32b9c950ywan
116233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Add compiler flags for intrinsic files
117233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_mmx.c.d: CFLAGS += -mmmx
118233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_mmx.c.o: CFLAGS += -mmmx
119233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_sse2.c.d: CFLAGS += -msse2
120233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_sse2.c.o: CFLAGS += -msse2
121233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_sse3.c.d: CFLAGS += -msse3
122233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_sse3.c.o: CFLAGS += -msse3
123233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_ssse3.c.d: CFLAGS += -mssse3
124233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_ssse3.c.o: CFLAGS += -mssse3
125233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_sse4.c.d: CFLAGS += -msse4.1
126233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_sse4.c.o: CFLAGS += -msse4.1
127233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_avx.c.d: CFLAGS += -mavx
128233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_avx.c.o: CFLAGS += -mavx
129233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_avx2.c.d: CFLAGS += -mavx2
130233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%_avx2.c.o: CFLAGS += -mavx2
131233d2500723e5594f3e7c70896ffeeef32b9c950ywan
132233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.c.d: %.c
133233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [DEP] $@")
134233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)mkdir -p $(dir $@)
135233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(CC) $(INTERNAL_CFLAGS) $(CFLAGS) -M $< | $(fmt_deps) > $@
136233d2500723e5594f3e7c70896ffeeef32b9c950ywan
137233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.c.o: %.c
138233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [CC] $@")
139233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(CC) $(INTERNAL_CFLAGS) $(CFLAGS) -c -o $@ $<
140233d2500723e5594f3e7c70896ffeeef32b9c950ywan
141233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.cc.d: %.cc
142233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [DEP] $@")
143233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)mkdir -p $(dir $@)
144233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(CXX) $(INTERNAL_CFLAGS) $(CXXFLAGS) -M $< | $(fmt_deps) > $@
145233d2500723e5594f3e7c70896ffeeef32b9c950ywan
146233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.cc.o: %.cc
147233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [CXX] $@")
148233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(CXX) $(INTERNAL_CFLAGS) $(CXXFLAGS) -c -o $@ $<
149233d2500723e5594f3e7c70896ffeeef32b9c950ywan
150233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.asm.d: %.asm
151233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [DEP] $@")
152233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)mkdir -p $(dir $@)
153233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(SRC_PATH_BARE)/build/make/gen_asm_deps.sh \
154233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --build-pfx=$(BUILD_PFX) --depfile=$@ $(ASFLAGS) $< > $@
155233d2500723e5594f3e7c70896ffeeef32b9c950ywan
156233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.asm.o: %.asm
157233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [AS] $@")
158233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(AS) $(ASFLAGS) -o $@ $<
159233d2500723e5594f3e7c70896ffeeef32b9c950ywan
160233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.s.d: %.s
161233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [DEP] $@")
162233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)mkdir -p $(dir $@)
163233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(SRC_PATH_BARE)/build/make/gen_asm_deps.sh \
164233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --build-pfx=$(BUILD_PFX) --depfile=$@ $(ASFLAGS) $< > $@
165233d2500723e5594f3e7c70896ffeeef32b9c950ywan
166233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.s.o: %.s
167233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [AS] $@")
168233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(AS) $(ASFLAGS) -o $@ $<
169233d2500723e5594f3e7c70896ffeeef32b9c950ywan
170233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PRECIOUS: %.c.S
171233d2500723e5594f3e7c70896ffeeef32b9c950ywan%.c.S: CFLAGS += -DINLINE_ASM
172233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.c.S: %.c
173233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [GEN] $@")
174233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(CC) -S $(CFLAGS) -o $@ $<
175233d2500723e5594f3e7c70896ffeeef32b9c950ywan
176233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PRECIOUS: %.asm.s
177233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)%.asm.s: %.asm
178233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [ASM CONVERSION] $@")
179233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)mkdir -p $(dir $@)
180233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(ASM_CONVERSION) <$< >$@
181233d2500723e5594f3e7c70896ffeeef32b9c950ywan
182233d2500723e5594f3e7c70896ffeeef32b9c950ywan# If we're in debug mode, pretend we don't have GNU strip, to fall back to
183233d2500723e5594f3e7c70896ffeeef32b9c950ywan# the copy implementation
184233d2500723e5594f3e7c70896ffeeef32b9c950ywanHAVE_GNU_STRIP := $(if $(CONFIG_DEBUG),,$(HAVE_GNU_STRIP))
185233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(HAVE_GNU_STRIP),yes)
186233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Older binutils strip global sybols not needed for relocation processing
187233d2500723e5594f3e7c70896ffeeef32b9c950ywan# when given --strip-unneeded. Use nm and awk to identify globals and
188233d2500723e5594f3e7c70896ffeeef32b9c950ywan# keep them.
189233d2500723e5594f3e7c70896ffeeef32b9c950ywan%.a: %_g.a
190233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [STRIP] $@ < $<")
191233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(STRIP) --strip-unneeded \
192233d2500723e5594f3e7c70896ffeeef32b9c950ywan         `$(NM) $< | grep ' [A-TV-Z] ' | awk '{print "-K"$$3'}`\
193233d2500723e5594f3e7c70896ffeeef32b9c950ywan          -o $@ $<
194233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
195233d2500723e5594f3e7c70896ffeeef32b9c950ywan%.a: %_g.a
196233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [CP] $@ < $<")
197233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)cp $< $@
198233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
199233d2500723e5594f3e7c70896ffeeef32b9c950ywan
200233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
201233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Rule to extract assembly constants from C sources
202233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
203233d2500723e5594f3e7c70896ffeeef32b9c950ywanobj_int_extract: build/make/obj_int_extract.c
204233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [HOSTCC] $@")
205233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(HOSTCC) -I. -I$(SRC_PATH_BARE) -o $@ $<
206233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += obj_int_extract
207233d2500723e5594f3e7c70896ffeeef32b9c950ywan
208233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
209233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Utility functions
210233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
211233d2500723e5594f3e7c70896ffeeef32b9c950ywanpairmap=$(if $(strip $(2)),\
212233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(call $(1),$(word 1,$(2)),$(word 2,$(2)))\
213233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(call pairmap,$(1),$(wordlist 3,$(words $(2)),$(2)))\
214233d2500723e5594f3e7c70896ffeeef32b9c950ywan)
215233d2500723e5594f3e7c70896ffeeef32b9c950ywan
216233d2500723e5594f3e7c70896ffeeef32b9c950ywanenabled=$(filter-out $($(1)-no),$($(1)-yes))
217233d2500723e5594f3e7c70896ffeeef32b9c950ywancond_enabled=$(if $(filter yes,$($(1))), $(call enabled,$(2)))
218233d2500723e5594f3e7c70896ffeeef32b9c950ywan
219233d2500723e5594f3e7c70896ffeeef32b9c950ywanfind_file1=$(word 1,$(wildcard $(subst //,/,$(addsuffix /$(1),$(2)))))
220233d2500723e5594f3e7c70896ffeeef32b9c950ywanfind_file=$(foreach f,$(1),$(call find_file1,$(strip $(f)),$(strip $(2))) )
221233d2500723e5594f3e7c70896ffeeef32b9c950ywanobj_pats=.c=.c.o $(AS_SFX)=$(AS_SFX).o .cc=.cc.o
222233d2500723e5594f3e7c70896ffeeef32b9c950ywanobjs=$(addprefix $(BUILD_PFX),$(foreach p,$(obj_pats),$(filter %.o,$(1:$(p))) ))
223233d2500723e5594f3e7c70896ffeeef32b9c950ywan
224233d2500723e5594f3e7c70896ffeeef32b9c950ywaninstall_map_templates=$(eval $(call install_map_template,$(1),$(2)))
225233d2500723e5594f3e7c70896ffeeef32b9c950ywan
226233d2500723e5594f3e7c70896ffeeef32b9c950ywannot=$(subst yes,no,$(1))
227233d2500723e5594f3e7c70896ffeeef32b9c950ywan
228233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_MSVS),yes)
229233d2500723e5594f3e7c70896ffeeef32b9c950ywanlib_file_name=$(1).lib
230233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
231233d2500723e5594f3e7c70896ffeeef32b9c950ywanlib_file_name=lib$(1).a
232233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
233233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
234233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Rule Templates
235233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
236233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine linker_template
237233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1): $(filter-out -%,$(2))
238233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1):
239233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo    "    [LD] $$@")
240233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$$(LD) $$(strip $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -o $$@ $(2) $(3) $$(extralibs))
241233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
242233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine linkerxx_template
243233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1): $(filter-out -%,$(2))
244233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1):
245233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo    "    [LD] $$@")
246233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$$(CXX) $$(strip $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -o $$@ $(2) $(3) $$(extralibs))
247233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
248233d2500723e5594f3e7c70896ffeeef32b9c950ywan# make-3.80 has a bug with expanding large input strings to the eval function,
249233d2500723e5594f3e7c70896ffeeef32b9c950ywan# which was triggered in some cases by the following component of
250233d2500723e5594f3e7c70896ffeeef32b9c950ywan# linker_template:
251233d2500723e5594f3e7c70896ffeeef32b9c950ywan#   $(1): $$(call find_file, $(patsubst -l%,lib%.a,$(filter -l%,$(2))),\
252233d2500723e5594f3e7c70896ffeeef32b9c950ywan#                           $$(patsubst -L%,%,$$(filter -L%,$$(LDFLAGS) $(2))))
253233d2500723e5594f3e7c70896ffeeef32b9c950ywan# This may be useful to revisit in the future (it tries to locate libraries
254233d2500723e5594f3e7c70896ffeeef32b9c950ywan# in a search path and add them as prerequisites
255233d2500723e5594f3e7c70896ffeeef32b9c950ywan
256233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine install_map_template
257233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(DIST_DIR)/$(1): $(2)
258233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [INSTALL] $$@")
259233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)mkdir -p $$(dir $$@)
260233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)cp -p $$< $$@
261233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
262233d2500723e5594f3e7c70896ffeeef32b9c950ywan
263233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine archive_template
264233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Not using a pattern rule here because we don't want to generate empty
265233d2500723e5594f3e7c70896ffeeef32b9c950ywan# archives when they are listed as a dependency in files not responsible
266233d2500723e5594f3e7c70896ffeeef32b9c950ywan# for creating them.
267233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1):
268233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [AR] $$@")
269233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$$(AR) $$(ARFLAGS) $$@ $$?
270233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
271233d2500723e5594f3e7c70896ffeeef32b9c950ywan
272233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine so_template
273233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Not using a pattern rule here because we don't want to generate empty
274233d2500723e5594f3e7c70896ffeeef32b9c950ywan# archives when they are listed as a dependency in files not responsible
275233d2500723e5594f3e7c70896ffeeef32b9c950ywan# for creating them.
276233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
277233d2500723e5594f3e7c70896ffeeef32b9c950ywan# This needs further abstraction for dealing with non-GNU linkers.
278233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1):
279233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [LD] $$@")
280233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$$(LD) -shared $$(LDFLAGS) \
281233d2500723e5594f3e7c70896ffeeef32b9c950ywan            -Wl,--no-undefined -Wl,-soname,$$(SONAME) \
282233d2500723e5594f3e7c70896ffeeef32b9c950ywan            -Wl,--version-script,$$(EXPORTS_FILE) -o $$@ \
283233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $$(filter %.o,$$^) $$(extralibs)
284233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
285233d2500723e5594f3e7c70896ffeeef32b9c950ywan
286233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine dl_template
287233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Not using a pattern rule here because we don't want to generate empty
288233d2500723e5594f3e7c70896ffeeef32b9c950ywan# archives when they are listed as a dependency in files not responsible
289233d2500723e5594f3e7c70896ffeeef32b9c950ywan# for creating them.
290233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1):
291233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [LD] $$@")
292233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$$(LD) -dynamiclib $$(LDFLAGS) \
293233d2500723e5594f3e7c70896ffeeef32b9c950ywan	    -exported_symbols_list $$(EXPORTS_FILE) \
294233d2500723e5594f3e7c70896ffeeef32b9c950ywan        -Wl,-headerpad_max_install_names,-compatibility_version,1.0,-current_version,$$(VERSION_MAJOR) \
295233d2500723e5594f3e7c70896ffeeef32b9c950ywan        -o $$@ \
296233d2500723e5594f3e7c70896ffeeef32b9c950ywan        $$(filter %.o,$$^) $$(extralibs)
297233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
298233d2500723e5594f3e7c70896ffeeef32b9c950ywan
299233d2500723e5594f3e7c70896ffeeef32b9c950ywan
300233d2500723e5594f3e7c70896ffeeef32b9c950ywan
301233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine lipo_lib_template
302233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1): $(addsuffix /$(1),$(FAT_ARCHS))
303233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [LIPO] $$@")
304233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)libtool -static -o $$@ $$?
305233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
306233d2500723e5594f3e7c70896ffeeef32b9c950ywan
307233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine lipo_bin_template
308233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1): $(addsuffix /$(1),$(FAT_ARCHS))
309233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(if $(quiet),@echo "    [LIPO] $$@")
310233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)lipo -output $$@ -create $$?
311233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
312233d2500723e5594f3e7c70896ffeeef32b9c950ywan
313233d2500723e5594f3e7c70896ffeeef32b9c950ywan
314233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
315233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Get current configuration
316233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
317233d2500723e5594f3e7c70896ffeeef32b9c950ywanifneq ($(target),)
318233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude $(SRC_PATH_BARE)/$(target:-$(TOOLCHAIN)=).mk
319233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
320233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(filter %clean,$(MAKECMDGOALS)),)
321233d2500723e5594f3e7c70896ffeeef32b9c950ywan  # Older versions of make don't like -include directives with no arguments
322233d2500723e5594f3e7c70896ffeeef32b9c950ywan  ifneq ($(filter %.d,$(OBJS-yes:.o=.d)),)
323233d2500723e5594f3e7c70896ffeeef32b9c950ywan    -include $(filter %.d,$(OBJS-yes:.o=.d))
324233d2500723e5594f3e7c70896ffeeef32b9c950ywan  endif
325233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
326233d2500723e5594f3e7c70896ffeeef32b9c950ywan
327233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
328233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Configuration dependent rules
329233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
330233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(call pairmap,install_map_templates,$(INSTALL_MAPS))
331233d2500723e5594f3e7c70896ffeeef32b9c950ywan
332233d2500723e5594f3e7c70896ffeeef32b9c950ywanDOCS=$(call cond_enabled,CONFIG_INSTALL_DOCS,DOCS)
333233d2500723e5594f3e7c70896ffeeef32b9c950ywan.docs: $(DOCS)
334233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
335233d2500723e5594f3e7c70896ffeeef32b9c950ywan
336233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-DOCS=$(call cond_enabled,CONFIG_INSTALL_DOCS,INSTALL-DOCS)
337233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(MAKECMDGOALS),dist)
338233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-DOCS+=$(call cond_enabled,CONFIG_INSTALL_DOCS,DIST-DOCS)
339233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
340233d2500723e5594f3e7c70896ffeeef32b9c950ywan.install-docs: .docs $(addprefix $(DIST_DIR)/,$(INSTALL-DOCS))
341233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
342233d2500723e5594f3e7c70896ffeeef32b9c950ywan
343233d2500723e5594f3e7c70896ffeeef32b9c950ywanclean::
344233d2500723e5594f3e7c70896ffeeef32b9c950ywan	rm -f .docs .install-docs $(DOCS)
345233d2500723e5594f3e7c70896ffeeef32b9c950ywan
346233d2500723e5594f3e7c70896ffeeef32b9c950ywanBINS=$(call enabled,BINS)
347233d2500723e5594f3e7c70896ffeeef32b9c950ywan.bins: $(BINS)
348233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
349233d2500723e5594f3e7c70896ffeeef32b9c950ywan
350233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-BINS=$(call cond_enabled,CONFIG_INSTALL_BINS,INSTALL-BINS)
351233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(MAKECMDGOALS),dist)
352233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-BINS+=$(call cond_enabled,CONFIG_INSTALL_BINS,DIST-BINS)
353233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
354233d2500723e5594f3e7c70896ffeeef32b9c950ywan.install-bins: .bins $(addprefix $(DIST_DIR)/,$(INSTALL-BINS))
355233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
356233d2500723e5594f3e7c70896ffeeef32b9c950ywan
357233d2500723e5594f3e7c70896ffeeef32b9c950ywanclean::
358233d2500723e5594f3e7c70896ffeeef32b9c950ywan	rm -f .bins .install-bins $(BINS)
359233d2500723e5594f3e7c70896ffeeef32b9c950ywan
360233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBS=$(call enabled,LIBS)
361233d2500723e5594f3e7c70896ffeeef32b9c950ywan.libs: $(LIBS)
362233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
363233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(foreach lib,$(filter %_g.a,$(LIBS)),$(eval $(call archive_template,$(lib))))
364233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(foreach lib,$(filter %so.$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH),$(LIBS)),$(eval $(call so_template,$(lib))))
365233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(foreach lib,$(filter %$(VERSION_MAJOR).dylib,$(LIBS)),$(eval $(call dl_template,$(lib))))
366233d2500723e5594f3e7c70896ffeeef32b9c950ywan
367233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS=$(call cond_enabled,CONFIG_INSTALL_LIBS,INSTALL-LIBS)
368233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(MAKECMDGOALS),dist)
369233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS+=$(call cond_enabled,CONFIG_INSTALL_LIBS,DIST-LIBS)
370233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
371233d2500723e5594f3e7c70896ffeeef32b9c950ywan.install-libs: .libs $(addprefix $(DIST_DIR)/,$(INSTALL-LIBS))
372233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
373233d2500723e5594f3e7c70896ffeeef32b9c950ywan
374233d2500723e5594f3e7c70896ffeeef32b9c950ywanclean::
375233d2500723e5594f3e7c70896ffeeef32b9c950ywan	rm -f .libs .install-libs $(LIBS)
376233d2500723e5594f3e7c70896ffeeef32b9c950ywan
377233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_EXTERNAL_BUILD),yes)
378233d2500723e5594f3e7c70896ffeeef32b9c950ywanPROJECTS=$(call enabled,PROJECTS)
379233d2500723e5594f3e7c70896ffeeef32b9c950ywan.projects: $(PROJECTS)
380233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
381233d2500723e5594f3e7c70896ffeeef32b9c950ywan
382233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-PROJECTS=$(call cond_enabled,CONFIG_INSTALL_PROJECTS,INSTALL-PROJECTS)
383233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(MAKECMDGOALS),dist)
384233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-PROJECTS+=$(call cond_enabled,CONFIG_INSTALL_PROJECTS,DIST-PROJECTS)
385233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
386233d2500723e5594f3e7c70896ffeeef32b9c950ywan.install-projects: .projects $(addprefix $(DIST_DIR)/,$(INSTALL-PROJECTS))
387233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
388233d2500723e5594f3e7c70896ffeeef32b9c950ywan
389233d2500723e5594f3e7c70896ffeeef32b9c950ywanclean::
390233d2500723e5594f3e7c70896ffeeef32b9c950ywan	rm -f .projects .install-projects $(PROJECTS)
391233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
392233d2500723e5594f3e7c70896ffeeef32b9c950ywan
393233d2500723e5594f3e7c70896ffeeef32b9c950ywan# If there are any source files to be distributed, then include the build
394233d2500723e5594f3e7c70896ffeeef32b9c950ywan# system too.
395233d2500723e5594f3e7c70896ffeeef32b9c950ywanifneq ($(call enabled,DIST-SRCS),)
396233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-yes            += configure
397233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-yes            += build/make/configure.sh
398233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-yes            += build/make/gen_asm_deps.sh
399233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-yes            += build/make/Makefile
400233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(CONFIG_MSVS)  += build/make/gen_msvs_def.sh
401233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(CONFIG_MSVS)  += build/make/gen_msvs_proj.sh
402233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(CONFIG_MSVS)  += build/make/gen_msvs_sln.sh
403233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(CONFIG_MSVS)  += build/make/gen_msvs_vcxproj.sh
404233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(CONFIG_MSVS)  += build/x86-msvs/obj_int_extract.bat
405233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(CONFIG_MSVS)  += build/arm-msvs/obj_int_extract.bat
406233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh
407233d2500723e5594f3e7c70896ffeeef32b9c950ywan    # Include obj_int_extract if we use offsets from *_asm_*_offsets
408233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(ARCH_ARM)$(ARCH_X86)$(ARCH_X86_64)    += build/make/obj_int_extract.c
409233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(ARCH_ARM)    += build/make/ads2gas.pl
410233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(ARCH_ARM)    += build/make/ads2gas_apple.pl
411233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(ARCH_ARM)    += build/make/ads2armasm_ms.pl
412233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-$(ARCH_ARM)    += build/make/thumb.pm
413233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DIST-SRCS-yes            += $(target:-$(TOOLCHAIN)=).mk
414233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
415233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-SRCS := $(call cond_enabled,CONFIG_INSTALL_SRCS,INSTALL-SRCS)
416233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(MAKECMDGOALS),dist)
417233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-SRCS += $(call cond_enabled,CONFIG_INSTALL_SRCS,DIST-SRCS)
418233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
419233d2500723e5594f3e7c70896ffeeef32b9c950ywan.install-srcs: $(addprefix $(DIST_DIR)/src/,$(INSTALL-SRCS))
420233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@touch $@
421233d2500723e5594f3e7c70896ffeeef32b9c950ywan
422233d2500723e5594f3e7c70896ffeeef32b9c950ywanclean::
423233d2500723e5594f3e7c70896ffeeef32b9c950ywan	rm -f .install-srcs
424233d2500723e5594f3e7c70896ffeeef32b9c950ywan
425233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_EXTERNAL_BUILD),yes)
426233d2500723e5594f3e7c70896ffeeef32b9c950ywan    BUILD_TARGETS += .projects
427233d2500723e5594f3e7c70896ffeeef32b9c950ywan    INSTALL_TARGETS += .install-projects
428233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
429233d2500723e5594f3e7c70896ffeeef32b9c950ywanBUILD_TARGETS += .docs .libs .bins
430233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_TARGETS += .install-docs .install-srcs .install-libs .install-bins
431233d2500723e5594f3e7c70896ffeeef32b9c950ywanall: $(BUILD_TARGETS)
432233d2500723e5594f3e7c70896ffeeef32b9c950ywaninstall:: $(INSTALL_TARGETS)
433233d2500723e5594f3e7c70896ffeeef32b9c950ywandist: $(INSTALL_TARGETS)
434233d2500723e5594f3e7c70896ffeeef32b9c950ywantest::
435