]> git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/dpdk/mk/internal/rte.compile-pre.mk
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / dpdk / mk / internal / rte.compile-pre.mk
1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright(c) 2010-2014 Intel Corporation
3
4 #
5 # Common to rte.lib.mk, rte.app.mk, rte.obj.mk
6 #
7
8 SRCS-all := $(SRCS-y) $(SRCS-n) $(SRCS-)
9
10 # convert source to obj file
11 src2obj = $(strip $(patsubst %.c,%.o,\
12 $(patsubst %.S,%_s.o,$(1))))
13
14 # add a dot in front of the file name
15 dotfile = $(strip $(foreach f,$(1),\
16 $(join $(dir $f),.$(notdir $f))))
17
18 # convert source/obj files into dot-dep filename (does not
19 # include .S files)
20 src2dep = $(strip $(call dotfile,$(patsubst %.c,%.o.d, \
21 $(patsubst %.S,,$(1)))))
22 obj2dep = $(strip $(call dotfile,$(patsubst %.o,%.o.d,$(1))))
23
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))))
28
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-))
33
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)
39
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-)
44
45 -include $(DEPS-y) $(CMDS-y)
46
47 # command to compile a .c file to generate an object
48 ifeq ($(USE_HOST),1)
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 $(@)")
53 else
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 $(@)")
58 endif
59 CHECK_SYMBOLS_SCRIPT = $(RTE_SDK)/buildtools/check-symbols.sh
60 CHECK_SYMBOLS = $(CHECK_SYMBOLS_SCRIPT) $(SRCDIR)/$(EXPORT_MAP) $@
61
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)" && \
67 $(PMDINFO_GEN) && \
68 echo "$(if $V,$(PMDINFO_CC), CC $@.pmd.o)" && \
69 $(PMDINFO_CC) && \
70 echo "$(if $V,$(PMDINFO_LD), LD $@)" && \
71 $(PMDINFO_LD) && \
72 mv -f $@.o $@; fi
73 C_TO_O_CMD = 'cmd_$@ = $(C_TO_O_STR)'
74 C_TO_O_DO = @set -e; \
75 echo $(C_TO_O_DISP); \
76 $(C_TO_O) && \
77 $(PMDINFO_TO_O) && \
78 $(CHECK_SYMBOLS) && \
79 echo $(C_TO_O_CMD) > $(call obj2cmd,$(@)) && \
80 sed 's,'$@':,dep_'$@' =,' $(call obj2dep,$(@)).tmp > $(call obj2dep,$(@)) && \
81 rm -f $(call obj2dep,$(@)).tmp
82
83 # return an empty string if string are equal
84 compare = $(strip $(subst $(1),,$(2)) $(subst $(2),,$(1)))
85
86 # return a non-empty string if the dst file does not exist
87 file_missing = $(call compare,$(wildcard $@),$@)
88
89 # return a non-empty string if cmdline changed
90 cmdline_changed = $(call compare,$(strip $(cmd_$@)),$(strip $(1)))
91
92 # return a non-empty string if a dependency file does not exist
93 depfile_missing = $(call compare,$(wildcard $(dep_$@)),$(dep_$@))
94
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 $^),$^)))
103
104 # return 1 if parameter is a non-empty string, else 0
105 boolean = $(if $1,1,0)
106
107 #
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)
111 #
112 .SECONDEXPANSION:
113 %.o: %.c $$(wildcard $$(dep_$$@)) $$(DEP_$$(@)) FORCE
114 @[ -d $(dir $@) ] || mkdir -p $(dir $@)
115 $(if $(D),\
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))")
121 $(if $(or \
122 $(file_missing),\
123 $(call cmdline_changed,$(C_TO_O)),\
124 $(depfile_missing),\
125 $(depfile_newer)),\
126 $(C_TO_O_DO))
127
128 # command to assemble a .S file to generate an object
129 ifeq ($(USE_HOST),1)
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 $(@)")
134 else
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 $(@)")
139 endif
140
141 S_TO_O_CMD = "cmd_$@ = $(S_TO_O_STR)"
142 S_TO_O_DO = @set -e; \
143 echo $(S_TO_O_DISP); \
144 $(S_TO_O) && \
145 echo $(S_TO_O_CMD) > $(call obj2cmd,$(@))
146
147 #
148 # Compile .S file if needed
149 # Note: DEP_$$@ can be specified by user (by default it is empty)
150 #
151 %_s.o: %.S $$(DEP_$$@) FORCE
152 @[ ! -d $(dir $@) ] || mkdir -p $(dir $@)
153 $(if $(D),\
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)) ")
159 $(if $(or \
160 $(file_missing),\
161 $(call cmdline_changed,$(S_TO_O_STR)),\
162 $(depfile_missing),\
163 $(depfile_newer)),\
164 $(S_TO_O_DO))