3 # Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
10 # * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # * Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in
14 # the documentation and/or other materials provided with the
16 # * Neither the name of Intel Corporation nor the names of its
17 # contributors may be used to endorse or promote products derived
18 # from this software without specific prior written permission.
20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 include $(RTE_SDK
)/mk
/internal
/rte.compile-pre.mk
33 include $(RTE_SDK
)/mk
/internal
/rte.install-pre.mk
34 include $(RTE_SDK
)/mk
/internal
/rte.clean-pre.mk
35 include $(RTE_SDK
)/mk
/internal
/rte.build-pre.mk
39 # VPATH contains at least SRCDIR
42 ifneq ($(CONFIG_RTE_MAJOR_ABI
),)
44 LIBABIVER
:= $(CONFIG_RTE_MAJOR_ABI
)
48 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB
),y
)
49 LIB
:= $(patsubst %.a
,%.so.
$(LIBABIVER
),$(LIB
))
50 ifeq ($(EXTLIB_BUILD
),n
)
51 ifeq ($(CONFIG_RTE_MAJOR_ABI
),)
52 ifeq ($(CONFIG_RTE_NEXT_ABI
),y
)
56 CPU_LDFLAGS
+= --version-script
=$(SRCDIR
)/$(EXPORT_MAP
)
62 _INSTALL
= $(INSTALL-FILES-y
) $(SYMLINK-FILES-y
) $(RTE_OUTPUT
)/lib
/$(LIB
)
69 install: build _postinstall
76 exe2cmd
= $(strip $(call dotfile
,$(patsubst %,%.cmd
,$(1))))
78 ifeq ($(LINK_USING_CC
),1)
79 # Override the definition of LD here, since we're linking with CC
80 LD
:= $(CC
) $(CPU_CFLAGS
)
81 _CPU_LDFLAGS
:= $(call linkerprefix
,$(CPU_LDFLAGS
))
82 override EXTRA_LDFLAGS
:= $(call linkerprefix
,$(EXTRA_LDFLAGS
))
84 _CPU_LDFLAGS
:= $(CPU_LDFLAGS
)
87 # Translate DEPDIRS into LDLIBS
88 # Ignore (sub)directory dependencies which do not provide an actual library
89 _IGNORE_DIRS
= librte_eal
/% librte_compat
90 _DEPDIRS
= $(filter-out $(_IGNORE_DIRS
),$(DEPDIRS
))
91 _LDDIRS
= $(subst librte_ether
,librte_ethdev
,$(_DEPDIRS
))
92 LDLIBS
+= $(subst lib
,-l
,$(_LDDIRS
))
94 O_TO_A
= $(AR
) crDs
$(LIB
) $(OBJS-y
)
95 O_TO_A_STR
= $(subst ','\'',$(O_TO_A)) #'# fix syntax highlight
96 O_TO_A_DISP
= $(if
$(V
),"$(O_TO_A_STR)"," AR $(@)")
97 O_TO_A_CMD
= "cmd_$@ = $(O_TO_A_STR)"
98 O_TO_A_DO
= @set
-e
; \
99 echo
$(O_TO_A_DISP
); \
101 echo
$(O_TO_A_CMD
) > $(call exe2cmd
,$(@
))
103 ifneq ($(CC_SUPPORTS_Z
),false
)
104 NO_UNDEFINED
:= -z defs
107 O_TO_S
= $(LD
) -L
$(RTE_SDK_BIN
)/lib
$(_CPU_LDFLAGS
) $(EXTRA_LDFLAGS
) \
108 -shared
$(OBJS-y
) $(NO_UNDEFINED
) $(LDLIBS
) -Wl
,-soname
,$(LIB
) -o
$(LIB
)
109 O_TO_S_STR
= $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight
110 O_TO_S_DISP
= $(if
$(V
),"$(O_TO_S_STR)"," LD $(@)")
111 O_TO_S_DO
= @set
-e
; \
112 echo
$(O_TO_S_DISP
); \
114 echo
$(O_TO_S_CMD
) > $(call exe2cmd
,$(@
))
119 # Archive objects in .a file if needed
121 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB
),y
)
122 $(LIB
): $(OBJS-y
) $(DEP_
$(LIB
)) FORCE
124 @echo
"Must Specify a $(LIB) ABI version"
127 @
[ -d
$(dir $@
) ] || mkdir
-p
$(dir $@
)
129 @echo
-n
"$< -> $@ " ; \
130 echo
-n
"file_missing=$(call boolean,$(file_missing)) " ; \
131 echo
-n
"cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_S_STR))) " ; \
132 echo
-n
"depfile_missing=$(call boolean,$(depfile_missing)) " ; \
133 echo
"depfile_newer=$(call boolean,$(depfile_newer)) ")
136 $(call cmdline_changed
,$(O_TO_S_STR
)),\
142 $(LIB
): $(OBJS-y
) $(DEP_
$(LIB
)) FORCE
143 @
[ -d
$(dir $@
) ] || mkdir
-p
$(dir $@
)
145 @echo
-n
"$< -> $@ " ; \
146 echo
-n
"file_missing=$(call boolean,$(file_missing)) " ; \
147 echo
-n
"cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_A_STR))) " ; \
148 echo
-n
"depfile_missing=$(call boolean,$(depfile_missing)) " ; \
149 echo
"depfile_newer=$(call boolean,$(depfile_newer)) ")
152 $(call cmdline_changed
,$(O_TO_A_STR
)),\
159 # install lib in $(RTE_OUTPUT)/lib
161 $(RTE_OUTPUT
)/lib
/$(LIB
): $(LIB
)
162 @echo
" INSTALL-LIB $(LIB)"
163 @
[ -d
$(RTE_OUTPUT
)/lib
] || mkdir
-p
$(RTE_OUTPUT
)/lib
164 $(Q
)cp
-f
$(LIB
) $(RTE_OUTPUT
)/lib
165 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB
),y
)
166 $(Q
)ln
-s
-f
$< $(shell echo
$@ | sed
's/\.so.*/.so/')
170 # Clean all generated files
177 $(Q
)rm -rf
$(LIB
) $(OBJS-all
) $(DEPS-all
) $(DEPSTMP-all
) \
178 $(CMDS-all
) .
$(LIB
).cmd
$(INSTALL-FILES-all
) *.pmd.c
*.pmd.o
179 $(Q
)rm -f
$(_BUILD_TARGETS
) $(_INSTALL_TARGETS
) $(_CLEAN_TARGETS
)
181 include $(RTE_SDK
)/mk
/internal
/rte.compile-post.mk
182 include $(RTE_SDK
)/mk
/internal
/rte.install-post.mk
183 include $(RTE_SDK
)/mk
/internal
/rte.clean-post.mk
184 include $(RTE_SDK
)/mk
/internal
/rte.build-post.mk