]>
git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/dpdk/mk/internal/rte.compile-pre.mk
1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright(c) 2010-2014 Intel Corporation
5 # Common to rte.lib.mk, rte.app.mk, rte.obj.mk
8 SRCS-all
:= $(SRCS-y
) $(SRCS-n
) $(SRCS-
)
10 # convert source to obj file
11 src2obj
= $(strip $(patsubst %.c
,%.o
,\
12 $(patsubst %.S
,%_s.o
,$(1))))
14 # add a dot in front of the file name
15 dotfile
= $(strip $(foreach f
,$(1),\
16 $(join $(dir $f),.
$(notdir $f))))
18 # convert source/obj files into dot-dep filename (does not
20 src2dep
= $(strip $(call dotfile
,$(patsubst %.c
,%.o.d
, \
21 $(patsubst %.S
,,$(1)))))
22 obj2dep
= $(strip $(call dotfile
,$(patsubst %.o
,%.o.d
,$(1))))
24 # convert source/obj files into dot-cmd filename
25 src2cmd
= $(strip $(call dotfile
,$(patsubst %.c
,%.o.cmd
, \
26 $(patsubst %.S
,%_s.o.cmd
,$(1)))))
27 obj2cmd
= $(strip $(call dotfile
,$(patsubst %.o
,%.o.cmd
,$(1))))
29 OBJS-y
:= $(call src2obj
,$(SRCS-y
))
30 OBJS-n
:= $(call src2obj
,$(SRCS-n
))
31 OBJS-
:= $(call src2obj
,$(SRCS-
))
32 OBJS-all
:= $(filter-out $(SRCS-all
),$(OBJS-y
) $(OBJS-n
) $(OBJS-
))
34 DEPS-y
:= $(call src2dep
,$(SRCS-y
))
35 DEPS-n
:= $(call src2dep
,$(SRCS-n
))
36 DEPS-
:= $(call src2dep
,$(SRCS-
))
37 DEPS-all
:= $(DEPS-y
) $(DEPS-n
) $(DEPS-
)
38 DEPSTMP-all
:= $(DEPS-all
:%.d
=%.d.tmp
)
40 CMDS-y
:= $(call src2cmd
,$(SRCS-y
))
41 CMDS-n
:= $(call src2cmd
,$(SRCS-n
))
42 CMDS-
:= $(call src2cmd
,$(SRCS-
))
43 CMDS-all
:= $(CMDS-y
) $(CMDS-n
) $(CMDS-
)
45 -include $(DEPS-y
) $(CMDS-y
)
47 # command to compile a .c file to generate an object
49 C_TO_O
= $(HOSTCC
) -Wp
,-MD
,$(call obj2dep
,$(@
)).tmp
$(HOST_CPPFLAGS
) $(HOST_CFLAGS
) \
50 $(CFLAGS_
$(@
)) $(HOST_EXTRA_CPPFLAGS
) $(HOST_EXTRA_CFLAGS
) -o
$@
-c
$<
51 C_TO_O_STR
= $(subst ','\'',$(C_TO_O)) #'# fix syntax highlight
52 C_TO_O_DISP
= $(if
$(V
),"$(C_TO_O_STR)"," HOSTCC $(@)")
54 C_TO_O
= $(CC
) -Wp
,-MD
,$(call obj2dep
,$(@
)).tmp
$(CPPFLAGS
) $(CFLAGS
) \
55 $(CFLAGS_
$(@
)) $(EXTRA_CPPFLAGS
) $(EXTRA_CFLAGS
) -o
$@
-c
$<
56 C_TO_O_STR
= $(subst ','\'',$(C_TO_O)) #'# fix syntax highlight
57 C_TO_O_DISP
= $(if
$(V
),"$(C_TO_O_STR)"," CC $(@)")
59 CHECK_SYMBOLS_SCRIPT
= $(RTE_SDK
)/buildtools
/check-symbols.sh
60 CHECK_SYMBOLS
= $(CHECK_SYMBOLS_SCRIPT
) $(SRCDIR
)/$(EXPORT_MAP
) $@
62 PMDINFO_GEN
= $(RTE_SDK_BIN
)/app
/dpdk-pmdinfogen
$@
$@.pmd.c
63 PMDINFO_CC
= $(CC
) $(CPPFLAGS
) $(CFLAGS
) $(EXTRA_CFLAGS
) -c
-o
$@.pmd.o
$@.pmd.c
64 PMDINFO_LD
= $(CROSS
)ld -r
$(filter-out -export-dynamic
,$(LDFLAGS
)) -o
$@.o
$@.pmd.o
$@
65 PMDINFO_TO_O
= if grep
-q
'RTE_PMD_REGISTER_.*(.*)' $<; then \
66 echo
"$(if $V,$(PMDINFO_GEN), PMDINFO $@.pmd.c)" && \
68 echo
"$(if $V,$(PMDINFO_CC), CC $@.pmd.o)" && \
70 echo
"$(if $V,$(PMDINFO_LD), LD $@)" && \
73 C_TO_O_CMD
= 'cmd_$@ = $(C_TO_O_STR)'
74 C_TO_O_DO
= @set
-e
; \
75 echo
$(C_TO_O_DISP
); \
79 echo
$(C_TO_O_CMD
) > $(call obj2cmd
,$(@
)) && \
80 sed
's,'$@
':,dep_'$@
' =,' $(call obj2dep
,$(@
)).tmp
> $(call obj2dep
,$(@
)) && \
81 rm -f
$(call obj2dep
,$(@
)).tmp
83 # return an empty string if string are equal
84 compare
= $(strip $(subst $(1),,$(2)) $(subst $(2),,$(1)))
86 # return a non-empty string if the dst file does not exist
87 file_missing
= $(call compare
,$(wildcard $@
),$@
)
89 # return a non-empty string if cmdline changed
90 cmdline_changed
= $(call compare
,$(strip $(cmd_
$@
)),$(strip $(1)))
92 # return a non-empty string if a dependency file does not exist
93 depfile_missing
= $(call compare
,$(wildcard $(dep_
$@
)),$(dep_
$@
))
95 # return an empty string if no prereq is newer than target
96 # - $^ -> names of all the prerequisites
97 # - $(wildcard $^) -> every existing prereq
98 # - $(filter-out $(wildcard $^),$^) -> every prereq that don't
99 # exist (filter-out removes existing ones from the list)
100 # - $? -> names of all the prerequisites newer than target
101 depfile_newer
= $(strip $(filter-out FORCE
,$? \
102 $(filter-out $(wildcard $^
),$^
)))
104 # return 1 if parameter is a non-empty string, else 0
105 boolean
= $(if
$1,1,0)
108 # Compile .c file if needed
109 # Note: dep_$$@ is from the .d file and DEP_$$@ can be specified by
110 # user (by default it is empty)
113 %.o
: %.c
$$(wildcard $$(dep_
$$@
)) $$(DEP_
$$(@
)) FORCE
114 @
[ -d
$(dir $@
) ] || mkdir
-p
$(dir $@
)
116 @echo
-n
"$< -> $@ " ; \
117 echo
-n
"file_missing=$(call boolean,$(file_missing)) " ; \
118 echo
-n
"cmdline_changed=$(call boolean,$(call cmdline_changed,$(C_TO_O))) " ; \
119 echo
-n
"depfile_missing=$(call boolean,$(depfile_missing)) " ; \
120 echo
"depfile_newer=$(call boolean,$(depfile_newer))")
123 $(call cmdline_changed
,$(C_TO_O
)),\
128 # command to assemble a .S file to generate an object
130 S_TO_O
= $(CPP
) $(HOST_CPPFLAGS
) $($(@
)_CPPFLAGS
) $(HOST_EXTRA_CPPFLAGS
) $< $(@
).tmp
&& \
131 $(HOSTAS
) $(HOST_ASFLAGS
) $($(@
)_ASFLAGS
) $(HOST_EXTRA_ASFLAGS
) -o
$@
$(@
).tmp
132 S_TO_O_STR
= $(subst ','\'',$(S_TO_O)) #'# fix syntax highlight
133 S_TO_O_DISP
= $(if
$(V
),"$(S_TO_O_STR)"," HOSTAS $(@)")
135 S_TO_O
= $(CPP
) $(CPPFLAGS
) $($(@
)_CPPFLAGS
) $(EXTRA_CPPFLAGS
) $< -o
$(@
).tmp
&& \
136 $(AS
) $(ASFLAGS
) $($(@
)_ASFLAGS
) $(EXTRA_ASFLAGS
) -o
$@
$(@
).tmp
137 S_TO_O_STR
= $(subst ','\'',$(S_TO_O)) #'# fix syntax highlight
138 S_TO_O_DISP
= $(if
$(V
),"$(S_TO_O_STR)"," AS $(@)")
141 S_TO_O_CMD
= "cmd_$@ = $(S_TO_O_STR)"
142 S_TO_O_DO
= @set
-e
; \
143 echo
$(S_TO_O_DISP
); \
145 echo
$(S_TO_O_CMD
) > $(call obj2cmd
,$(@
))
148 # Compile .S file if needed
149 # Note: DEP_$$@ can be specified by user (by default it is empty)
151 %_s.o
: %.S
$$(DEP_
$$@
) FORCE
152 @
[ ! -d
$(dir $@
) ] || mkdir
-p
$(dir $@
)
154 @echo
-n
"$< -> $@ " ; \
155 echo
-n
"file_missing=$(call boolean,$(file_missing)) " ; \
156 echo
-n
"cmdline_changed=$(call boolean,$(call cmdline_changed,$(S_TO_O_STR))) " ; \
157 echo
-n
"depfile_missing=$(call boolean,$(depfile_missing)) " ; \
158 echo
"depfile_newer=$(call boolean,$(depfile_newer)) ")
161 $(call cmdline_changed
,$(S_TO_O_STR
)),\