swr/codegen: fix autotools build
[mesa.git] / src / gallium / drivers / swr / Makefile.am
1 # Copyright (C) 2015 Intel Corporation. All Rights Reserved.
2 #
3 # Permission is hereby granted, free of charge, to any person obtaining a
4 # copy of this software and associated documentation files (the "Software"),
5 # to deal in the Software without restriction, including without limitation
6 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 # and/or sell copies of the Software, and to permit persons to whom the
8 # Software is furnished to do so, subject to the following conditions:
9 #
10 # The above copyright notice and this permission notice (including the next
11 # paragraph) shall be included in all copies or substantial portions of the
12 # Software.
13 #
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20 # IN THE SOFTWARE.
21
22 include Makefile.sources
23 include $(top_srcdir)/src/gallium/Automake.inc
24
25 AM_CXXFLAGS = $(GALLIUM_DRIVER_CFLAGS) $(CXX11_CXXFLAGS)
26
27 noinst_LTLIBRARIES = libmesaswr.la
28
29 libmesaswr_la_SOURCES = \
30 $(CXX_SOURCES) \
31 $(JITTER_CXX_SOURCES) \
32 $(LOADER_SOURCES)
33
34 COMMON_CXXFLAGS = \
35 -fno-strict-aliasing \
36 $(GALLIUM_DRIVER_CFLAGS) \
37 $(LLVM_CXXFLAGS) \
38 $(CXX11_CXXFLAGS) \
39 -I$(builddir)/rasterizer/codegen \
40 -I$(builddir)/rasterizer/core \
41 -I$(builddir)/rasterizer/jitter \
42 -I$(builddir)/rasterizer/archrast \
43 -I$(srcdir)/rasterizer \
44 -I$(srcdir)/rasterizer/core \
45 -I$(srcdir)/rasterizer/codegen \
46 -I$(srcdir)/rasterizer/jitter \
47 -I$(srcdir)/rasterizer/archrast
48
49 # SWR_AVX_CXXFLAGS needed for intrinsic usage in swr api headers
50 libmesaswr_la_CXXFLAGS = \
51 $(SWR_AVX_CXXFLAGS) \
52 $(COMMON_CXXFLAGS)
53
54 if HAVE_SWR_AVX
55 libmesaswr_la_CXXFLAGS += -DHAVE_SWR_AVX
56 endif
57
58 if HAVE_SWR_AVX2
59 libmesaswr_la_CXXFLAGS += -DHAVE_SWR_AVX2
60 endif
61
62 if HAVE_SWR_KNL
63 libmesaswr_la_CXXFLAGS += -DHAVE_SWR_KNL
64 endif
65
66 if HAVE_SWR_SKX
67 libmesaswr_la_CXXFLAGS += -DHAVE_SWR_SKX
68 endif
69
70 COMMON_SOURCES = \
71 $(ARCHRAST_CXX_SOURCES) \
72 $(COMMON_CXX_SOURCES) \
73 $(CORE_CXX_SOURCES) \
74 $(MEMORY_CXX_SOURCES) \
75 $(BUILT_SOURCES)
76
77 BUILT_SOURCES = \
78 gen_swr_context_llvm.h \
79 rasterizer/codegen/gen_knobs.cpp \
80 rasterizer/codegen/gen_knobs.h \
81 rasterizer/jitter/gen_state_llvm.h \
82 rasterizer/jitter/gen_builder.hpp \
83 rasterizer/jitter/gen_builder_meta.hpp \
84 rasterizer/jitter/gen_builder_intrin.hpp \
85 rasterizer/codegen/gen_ar_event.hpp \
86 rasterizer/codegen/gen_ar_event.cpp \
87 rasterizer/codegen/gen_ar_eventhandler.hpp \
88 rasterizer/codegen/gen_ar_eventhandlerfile.hpp \
89 rasterizer/core/backends/gen_BackendPixelRate0.cpp \
90 rasterizer/core/backends/gen_BackendPixelRate1.cpp \
91 rasterizer/core/backends/gen_BackendPixelRate2.cpp \
92 rasterizer/core/backends/gen_BackendPixelRate3.cpp \
93 rasterizer/core/backends/gen_BackendPixelRate.hpp \
94 rasterizer/core/backends/gen_rasterizer0.cpp \
95 rasterizer/core/backends/gen_rasterizer1.cpp \
96 rasterizer/core/backends/gen_rasterizer2.cpp \
97 rasterizer/core/backends/gen_rasterizer3.cpp \
98 rasterizer/core/backends/gen_rasterizer.hpp
99
100 MKDIR_GEN = $(AM_V_at)$(MKDIR_P) $(@D)
101 PYTHON_GEN = $(AM_V_GEN)$(PYTHON) $(PYTHON_FLAGS)
102 gen_swr_context_llvm.h: rasterizer/codegen/gen_llvm_types.py rasterizer/codegen/templates/gen_llvm.hpp swr_context.h
103 $(PYTHON_GEN) \
104 $(srcdir)/rasterizer/codegen/gen_llvm_types.py \
105 --input $(srcdir)/swr_context.h \
106 --output ./gen_swr_context_llvm.h
107 $(AM_V_GEN)touch $@
108
109 rasterizer/codegen/gen_knobs.cpp: rasterizer/codegen/gen_knobs.py rasterizer/codegen/knob_defs.py rasterizer/codegen/templates/gen_knobs.cpp rasterizer/codegen/gen_common.py
110 $(MKDIR_GEN)
111 $(PYTHON_GEN) \
112 $(srcdir)/rasterizer/codegen/gen_knobs.py \
113 --output rasterizer/codegen/gen_knobs.cpp \
114 --gen_cpp
115 $(AM_V_GEN)touch $@
116
117 rasterizer/codegen/gen_knobs.h: rasterizer/codegen/gen_knobs.py rasterizer/codegen/knob_defs.py rasterizer/codegen/templates/gen_knobs.h rasterizer/codegen/gen_common.py
118 $(MKDIR_GEN)
119 $(PYTHON_GEN) \
120 $(srcdir)/rasterizer/codegen/gen_knobs.py \
121 --output rasterizer/codegen/gen_knobs.h \
122 --gen_h
123 $(AM_V_GEN)touch $@
124
125 rasterizer/jitter/gen_state_llvm.h: rasterizer/codegen/gen_llvm_types.py rasterizer/codegen/templates/gen_llvm.hpp rasterizer/core/state.h rasterizer/codegen/gen_common.py
126 $(MKDIR_GEN)
127 $(PYTHON_GEN) \
128 $(srcdir)/rasterizer/codegen/gen_llvm_types.py \
129 --input $(srcdir)/rasterizer/core/state.h \
130 --output rasterizer/jitter/gen_state_llvm.h
131 $(AM_V_GEN)touch $@
132
133 rasterizer/jitter/gen_builder.hpp: rasterizer/codegen/gen_llvm_ir_macros.py rasterizer/codegen/templates/gen_builder.hpp rasterizer/codegen/gen_common.py
134 $(MKDIR_GEN)
135 $(PYTHON_GEN) \
136 $(srcdir)/rasterizer/codegen/gen_llvm_ir_macros.py \
137 --input $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h \
138 --output rasterizer/jitter \
139 --gen_h
140 $(AM_V_GEN)touch $@
141
142 rasterizer/jitter/gen_builder_meta.hpp: rasterizer/codegen/gen_llvm_ir_macros.py rasterizer/codegen/templates/gen_builder.hpp rasterizer/codegen/gen_common.py
143 $(MKDIR_GEN)
144 $(PYTHON_GEN) \
145 $(srcdir)/rasterizer/codegen/gen_llvm_ir_macros.py \
146 --output rasterizer/jitter \
147 --gen_meta_h
148 $(AM_V_GEN)touch $@
149
150 rasterizer/jitter/gen_builder_intrin.hpp: rasterizer/codegen/gen_llvm_ir_macros.py rasterizer/codegen/templates/gen_builder.hpp rasterizer/codegen/gen_common.py
151 $(MKDIR_GEN)
152 $(PYTHON_GEN) \
153 $(srcdir)/rasterizer/codegen/gen_llvm_ir_macros.py \
154 --output rasterizer/jitter \
155 --gen_intrin_h
156 $(AM_V_GEN)touch $@
157
158 rasterizer/codegen/gen_ar_event.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_event.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
159 $(MKDIR_GEN)
160 $(PYTHON_GEN) \
161 $(srcdir)/rasterizer/codegen/gen_archrast.py \
162 --proto $(srcdir)/rasterizer/archrast/events.proto $(srcdir)/rasterizer/archrast/events_private.proto \
163 --output-dir rasterizer/codegen
164 $(AM_V_GEN)touch $@
165
166 rasterizer/codegen/gen_ar_event.cpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_event.cpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
167 $(MKDIR_GEN)
168 $(PYTHON_GEN) \
169 $(srcdir)/rasterizer/codegen/gen_archrast.py \
170 --proto $(srcdir)/rasterizer/archrast/events.proto $(srcdir)/rasterizer/archrast/events_private.proto \
171 --output-dir rasterizer/codegen
172 $(AM_V_GEN)touch $@
173
174 rasterizer/codegen/gen_ar_eventhandler.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_eventhandler.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
175 $(MKDIR_GEN)
176 $(PYTHON_GEN) \
177 $(srcdir)/rasterizer/codegen/gen_archrast.py \
178 --proto $(srcdir)/rasterizer/archrast/events.proto $(srcdir)/rasterizer/archrast/events_private.proto \
179 --output-dir rasterizer/codegen
180 $(AM_V_GEN)touch $@
181
182 rasterizer/codegen/gen_ar_eventhandlerfile.hpp: rasterizer/codegen/gen_archrast.py rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp rasterizer/archrast/events.proto rasterizer/archrast/events_private.proto rasterizer/codegen/gen_common.py
183 $(MKDIR_GEN)
184 $(PYTHON_GEN) \
185 $(srcdir)/rasterizer/codegen/gen_archrast.py \
186 --proto $(srcdir)/rasterizer/archrast/events.proto $(srcdir)/rasterizer/archrast/events_private.proto \
187 --output-dir rasterizer/codegen
188 $(AM_V_GEN)touch $@
189
190 rasterizer/core/backends/gen_BackendPixelRate0.cpp \
191 rasterizer/core/backends/gen_BackendPixelRate1.cpp \
192 rasterizer/core/backends/gen_BackendPixelRate2.cpp \
193 rasterizer/core/backends/gen_BackendPixelRate3.cpp \
194 rasterizer/core/backends/gen_BackendPixelRate.hpp: \
195 backend.intermediate
196
197 # 5 SWR_MULTISAMPLE_TYPE_COUNT
198 # 2 SWR_MSAA_SAMPLE_PATTERN_COUNT
199 # 3 SWR_INPUT_COVERAGE_COUNT
200 # 2 centroid
201 # 2 forcedSampleCount
202 # 2 canEarlyZ
203
204 # use intermediate rule to tell make that all files can be
205 # generated in one invocation of gen_backends.py (prevents
206 # parallel make race condition)
207 .INTERMEDIATE: backend.intermediate
208 backend.intermediate: rasterizer/codegen/gen_backends.py rasterizer/codegen/templates/gen_backend.cpp rasterizer/codegen/templates/gen_header_init.hpp
209 $(MKDIR_GEN)
210 $(PYTHON_GEN) \
211 $(srcdir)/rasterizer/codegen/gen_backends.py \
212 --outdir rasterizer/core/backends \
213 --dim 5 2 3 2 2 2 \
214 --numfiles 4 \
215 --cpp \
216 --hpp
217
218 rasterizer/core/backends/gen_rasterizer0.cpp \
219 rasterizer/core/backends/gen_rasterizer1.cpp \
220 rasterizer/core/backends/gen_rasterizer2.cpp \
221 rasterizer/core/backends/gen_rasterizer3.cpp \
222 rasterizer/core/backends/gen_rasterizer.hpp: \
223 rasterizer.intermediate
224
225 # 5 SWR_MULTISAMPLE_TYPE_COUNT
226 # 2 CenterPattern
227 # 2 Conservative
228 # 3 SWR_INPUT_COVERAGE_COUNT
229 # 5 STATE_VALID_TRI_EDGE_COUNT
230 # 2 RasterScissorEdges
231
232 # use intermediate rule to tell make that all files can be
233 # generated in one invocation of gen_backends.py (prevents
234 # parallel make race condition)
235 .INTERMEDIATE: rasterizer.intermediate
236 rasterizer.intermediate: rasterizer/codegen/gen_backends.py rasterizer/codegen/templates/gen_rasterizer.cpp rasterizer/codegen/templates/gen_header_init.hpp
237 $(MKDIR_GEN)
238 $(PYTHON_GEN) \
239 $(srcdir)/rasterizer/codegen/gen_backends.py \
240 --outdir rasterizer/core/backends \
241 --rast \
242 --dim 5 2 2 3 5 2 \
243 --numfiles 4 \
244 --cpp \
245 --hpp
246
247 COMMON_LDFLAGS = \
248 -shared \
249 -module \
250 -no-undefined \
251 $(GC_SECTIONS) \
252 $(LD_NO_UNDEFINED)
253
254 lib_LTLIBRARIES =
255
256 if HAVE_SWR_AVX
257 libswrAVX_la_CXXFLAGS = \
258 $(PTHREAD_CFLAGS) \
259 $(SWR_AVX_CXXFLAGS) \
260 -DKNOB_ARCH=KNOB_ARCH_AVX \
261 $(COMMON_CXXFLAGS)
262
263 libswrAVX_la_SOURCES = \
264 $(COMMON_SOURCES)
265
266 libswrAVX_la_LIBADD = \
267 $(PTHREAD_LIBS)
268
269 libswrAVX_la_LDFLAGS = \
270 $(COMMON_LDFLAGS)
271 endif
272
273 if HAVE_SWR_AVX2
274 libswrAVX2_la_CXXFLAGS = \
275 $(PTHREAD_CFLAGS) \
276 $(SWR_AVX2_CXXFLAGS) \
277 -DKNOB_ARCH=KNOB_ARCH_AVX2 \
278 $(COMMON_CXXFLAGS)
279
280 libswrAVX2_la_SOURCES = \
281 $(COMMON_SOURCES)
282
283 libswrAVX2_la_LIBADD = \
284 $(PTHREAD_LIBS)
285
286 libswrAVX2_la_LDFLAGS = \
287 $(COMMON_LDFLAGS)
288 endif
289
290 if HAVE_SWR_KNL
291 libswrKNL_la_CXXFLAGS = \
292 $(PTHREAD_CFLAGS) \
293 $(SWR_KNL_CXXFLAGS) \
294 -DKNOB_ARCH=KNOB_ARCH_AVX512 -DSIMD_ARCH_KNIGHTS \
295 $(COMMON_CXXFLAGS)
296
297 libswrKNL_la_SOURCES = \
298 $(COMMON_SOURCES)
299
300 libswrKNL_la_LIBADD = \
301 $(PTHREAD_LIBS)
302
303 libswrKNL_la_LDFLAGS = \
304 $(COMMON_LDFLAGS)
305 endif
306
307 if HAVE_SWR_SKX
308 libswrSKX_la_CXXFLAGS = \
309 $(PTHREAD_CFLAGS) \
310 $(SWR_SKX_CXXFLAGS) \
311 -DKNOB_ARCH=KNOB_ARCH_AVX512 \
312 $(COMMON_CXXFLAGS)
313
314 libswrSKX_la_SOURCES = \
315 $(COMMON_SOURCES)
316
317 libswrSKX_la_LIBADD = \
318 $(PTHREAD_LIBS)
319
320 libswrSKX_la_LDFLAGS = \
321 $(COMMON_LDFLAGS)
322 endif
323
324 if HAVE_SWR_BUILTIN
325 libmesaswr_la_CXXFLAGS += -DHAVE_SWR_BUILTIN
326 libmesaswr_la_LIBADD =
327 if HAVE_SWR_AVX
328 noinst_LTLIBRARIES += libswrAVX.la
329 libmesaswr_la_LIBADD += libswrAVX.la
330 endif
331 if HAVE_SWR_AVX2
332 noinst_LTLIBRARIES += libswrAVX2.la
333 libmesaswr_la_LIBADD += libswrAVX2.la
334 endif
335 if HAVE_SWR_KNL
336 noinst_LTLIBRARIES += libswrKNL.la
337 libmesaswr_la_LIBADD += libswrKNL.la
338 endif
339 if HAVE_SWR_SKX
340 noinst_LTLIBRARIES += libswrSKX.la
341 libmesaswr_la_LIBADD += libswrSKX.la
342 endif
343 else # !HAVE_SWR_BUILTIN
344 # gen_knobs.* included here to provide driver access to swr configuration
345 libmesaswr_la_SOURCES += \
346 $(COMMON_CXX_SOURCES) \
347 rasterizer/codegen/gen_knobs.cpp \
348 rasterizer/codegen/gen_knobs.h
349 if HAVE_SWR_AVX
350 lib_LTLIBRARIES += libswrAVX.la
351 endif
352 if HAVE_SWR_AVX2
353 lib_LTLIBRARIES += libswrAVX2.la
354 endif
355 if HAVE_SWR_KNL
356 lib_LTLIBRARIES += libswrKNL.la
357 endif
358 if HAVE_SWR_SKX
359 lib_LTLIBRARIES += libswrSKX.la
360 endif
361 endif
362
363 include $(top_srcdir)/install-gallium-links.mk
364
365 # Generated gen_builder.hpp is not backwards compatible. So ship only one
366 # created with the oldest supported version of LLVM.
367 dist-hook:
368 if SWR_INVALID_LLVM_VERSION
369 @echo "*****************************************"
370 @echo "LLVM 6.0.x required to create the tarball"
371 @echo "*****************************************"
372 @test
373 endif
374
375 EXTRA_DIST = \
376 SConscript \
377 meson.build \
378 rasterizer/jitter/meson.build \
379 rasterizer/codegen/meson.build \
380 rasterizer/core/backends/meson.build \
381 rasterizer/archrast/events.proto \
382 rasterizer/archrast/events_private.proto \
383 rasterizer/codegen/gen_llvm_ir_macros.py \
384 rasterizer/codegen/gen_llvm_types.py \
385 rasterizer/codegen/gen_archrast.py \
386 rasterizer/codegen/gen_backends.py \
387 rasterizer/codegen/gen_common.py \
388 rasterizer/codegen/gen_knobs.py \
389 rasterizer/codegen/knob_defs.py \
390 rasterizer/codegen/templates/gen_ar_event.cpp \
391 rasterizer/codegen/templates/gen_ar_event.hpp \
392 rasterizer/codegen/templates/gen_ar_eventhandler.hpp \
393 rasterizer/codegen/templates/gen_ar_eventhandlerfile.hpp \
394 rasterizer/codegen/templates/gen_backend.cpp \
395 rasterizer/codegen/templates/gen_builder.hpp \
396 rasterizer/codegen/templates/gen_header_init.hpp \
397 rasterizer/codegen/templates/gen_knobs.cpp \
398 rasterizer/codegen/templates/gen_knobs.h \
399 rasterizer/codegen/templates/gen_llvm.hpp \
400 rasterizer/codegen/templates/gen_rasterizer.cpp