xref: /aosp_15_r20/external/angle/third_party/glmark2/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1# Copyright 2019 The ANGLE Project Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4#
5# Build integration for glmark2.
6
7import("../../gni/angle.gni")
8
9_glmark2_glad_common_sources = [
10  "src/src/glad/include/glad/egl.h",
11  "src/src/glad/include/glad/wgl.h",
12  "src/src/glad/src/egl.c",
13]
14
15if (is_win) {
16  _glmark2_glad_common_sources += [ "src/src/glad/src/wgl.c" ]
17}
18
19config("glmark2_glad_config") {
20  include_dirs = [ "src/src/glad/include" ]
21}
22
23source_set("glmark2_glad_gles") {
24  sources = _glmark2_glad_common_sources + [
25              "src/src/glad/include/glad/gles2.h",
26              "src/src/glad/src/gles2.c",
27            ]
28  public_configs = [ ":glmark2_glad_config" ]
29}
30
31source_set("glmark2_glad_gl") {
32  sources = _glmark2_glad_common_sources + [
33              "src/src/glad/include/glad/gl.h",
34              "src/src/glad/src/gl.c",
35            ]
36  public_configs = [ ":glmark2_glad_config" ]
37}
38
39glmark_data_path = "${angle_root}/third_party/glmark2/src/data"
40raw_glmark_data_path = rebase_path(glmark_data_path, root_build_dir)
41
42config("glmark2_common_config") {
43  defines = [ "GLMARK_DATA_PATH=\"${raw_glmark_data_path}\"" ]
44  include_dirs = [ "src/src" ]
45  cflags = []
46
47  if (is_clang) {
48    cflags += [ "-Wno-shadow" ]
49  }
50
51  if (is_win) {
52    include_dirs += [ "src/src/include" ]
53
54    # M_PI is nonstandard.
55    defines += [ "_USE_MATH_DEFINES" ]
56
57    if (!is_clang) {
58      cflags += [
59        # MSVC warns about the copyright character being illegal.
60        "/wd4828",
61
62        # A warning generated in scene-effect-2d in vec2::calc_offset
63        "/wd4146",
64
65        # Needs to be explicitly disabled after http://crrev.com/c/3189512
66        "/wd4312",
67      ]
68    }
69  }
70}
71
72config("glmark2_gles_config") {
73  defines = [ "GLMARK2_USE_GLESv2" ]
74}
75
76config("glmark2_gl_config") {
77  defines = [ "GLMARK2_USE_GL" ]
78}
79
80group("glmark2_gles") {
81  public_configs = [
82    ":glmark2_common_config",
83    ":glmark2_gles_config",
84  ]
85  public_deps = [ ":glmark2_glad_gles" ]
86}
87
88group("glmark2_gl") {
89  public_configs = [
90    ":glmark2_common_config",
91    ":glmark2_gl_config",
92  ]
93  public_deps = [ ":glmark2_glad_gl" ]
94}
95
96# Supplies compatible headers on Win32.
97config("glmark2_headers_config") {
98  if (is_win) {
99    if (is_clang) {
100      cflags = [
101        "-Wno-unused-function",
102        "-Wno-writable-strings",
103        "-Wno-extra-tokens",
104      ]
105    }
106  }
107}
108
109source_set("glmark2_headers") {
110  sources = [
111    "src/src/canvas.h",
112    "src/src/gl-headers.h",
113    "src/src/gl-state-egl.h",
114    "src/src/gl-state.h",
115    "src/src/gl-visual-config.h",
116    "src/src/mesh.h",
117    "src/src/options.h",
118    "src/src/scene.h",
119    "src/src/shared-library.h",
120    "src/src/texture.h",
121  ]
122
123  if (is_linux || is_chromeos) {
124    sources += [ "src/src/gl-state-glx.h" ]
125  }
126  if (is_win) {
127    sources += [
128      "src/src/gl-state-wgl.h",
129      "src/src/include/dirent.h",
130      "src/src/include/getopt.h",
131      "src/src/include/sys/time.h",
132    ]
133  }
134  public_configs = [ ":glmark2_headers_config" ]
135  include_dirs = [ "src/src" ]
136}
137
138config("glmark2_libmatrix_config") {
139  include_dirs = [ "src/src/libmatrix" ]
140}
141
142template("glmark2_libmatrix") {
143  source_set(target_name) {
144    forward_variables_from(invoker, "*")
145    sources = [
146      "src/src/libmatrix/gl-if.h",
147      "src/src/libmatrix/log.cc",
148      "src/src/libmatrix/log.h",
149      "src/src/libmatrix/mat.cc",
150      "src/src/libmatrix/mat.h",
151      "src/src/libmatrix/program.cc",
152      "src/src/libmatrix/program.h",
153      "src/src/libmatrix/shader-source.cc",
154      "src/src/libmatrix/shader-source.h",
155      "src/src/libmatrix/stack.h",
156      "src/src/libmatrix/util.cc",
157      "src/src/libmatrix/util.h",
158      "src/src/libmatrix/vec.h",
159    ]
160
161    if (is_clang) {
162      cflags_cc = [ "-Wno-implicit-fallthrough" ]
163    }
164    public_deps = [ ":glmark2_headers" ]
165    public_configs = [ ":glmark2_libmatrix_config" ]
166  }
167}
168
169glmark2_libmatrix("glmark2_libmatrix_gles") {
170  deps = [ ":glmark2_gles" ]
171}
172
173glmark2_libmatrix("glmark2_libmatrix_gl") {
174  deps = [ ":glmark2_gl" ]
175}
176
177config("glmark2_scene_ideas_config") {
178  include_dirs = [ "src/src/scene-ideas" ]
179}
180
181template("glmark2_scene_ideas") {
182  source_set(target_name) {
183    forward_variables_from(invoker, "*")
184    sources = [
185      "src/src/scene-ideas/a.cc",
186      "src/src/scene-ideas/characters.h",
187      "src/src/scene-ideas/d.cc",
188      "src/src/scene-ideas/e.cc",
189      "src/src/scene-ideas/i.cc",
190      "src/src/scene-ideas/lamp.cc",
191      "src/src/scene-ideas/lamp.h",
192      "src/src/scene-ideas/logo.cc",
193      "src/src/scene-ideas/logo.h",
194      "src/src/scene-ideas/m.cc",
195      "src/src/scene-ideas/n.cc",
196      "src/src/scene-ideas/o.cc",
197      "src/src/scene-ideas/s.cc",
198      "src/src/scene-ideas/splines.cc",
199      "src/src/scene-ideas/splines.h",
200      "src/src/scene-ideas/t.cc",
201      "src/src/scene-ideas/table.cc",
202      "src/src/scene-ideas/table.h",
203    ]
204    public_configs = [ ":glmark2_scene_ideas_config" ]
205  }
206}
207
208glmark2_scene_ideas("glmark2_scene_ideas_gles") {
209  deps = [
210    ":glmark2_gles",
211    ":glmark2_libmatrix_gles",
212  ]
213}
214
215glmark2_scene_ideas("glmark2_scene_ideas_gl") {
216  deps = [
217    ":glmark2_gl",
218    ":glmark2_libmatrix_gl",
219  ]
220}
221
222config("glmark2_scene_terrain_config") {
223  include_dirs = [ "src/src/scene-terrain" ]
224}
225
226template("glmark2_scene_terrain") {
227  source_set(target_name) {
228    forward_variables_from(invoker, "*")
229    sources = [
230      "src/src/scene-terrain/base-renderer.cpp",
231      "src/src/scene-terrain/blur-renderer.cpp",
232      "src/src/scene-terrain/copy-renderer.cpp",
233      "src/src/scene-terrain/luminance-renderer.cpp",
234      "src/src/scene-terrain/normal-from-height-renderer.cpp",
235      "src/src/scene-terrain/overlay-renderer.cpp",
236      "src/src/scene-terrain/renderer-chain.cpp",
237      "src/src/scene-terrain/renderer.h",
238      "src/src/scene-terrain/simplex-noise-renderer.cpp",
239      "src/src/scene-terrain/terrain-renderer.cpp",
240      "src/src/scene-terrain/texture-renderer.cpp",
241    ]
242
243    public_configs = [ ":glmark2_scene_terrain_config" ]
244  }
245}
246
247glmark2_scene_terrain("glmark2_scene_terrain_gles") {
248  deps = [
249    ":glmark2_gles",
250    ":glmark2_libmatrix_gles",
251  ]
252}
253
254glmark2_scene_terrain("glmark2_scene_terrain_gl") {
255  deps = [
256    ":glmark2_gl",
257    ":glmark2_libmatrix_gl",
258  ]
259}
260
261template("glmark2_common") {
262  source_set(target_name) {
263    forward_variables_from(invoker, "*")
264    sources = [
265      "src/src/benchmark-collection.cpp",
266      "src/src/benchmark-collection.h",
267      "src/src/benchmark.cpp",
268      "src/src/benchmark.h",
269      "src/src/default-benchmarks.h",
270      "src/src/gl-headers.cpp",
271      "src/src/gl-visual-config.cpp",
272      "src/src/gl-visual-config.h",
273      "src/src/image-reader.cpp",
274      "src/src/image-reader.h",
275      "src/src/main-loop.cpp",
276      "src/src/main-loop.h",
277      "src/src/mesh.cpp",
278      "src/src/model.cpp",
279      "src/src/model.h",
280      "src/src/native-state.h",
281      "src/src/options.cpp",
282      "src/src/scene-buffer.cpp",
283      "src/src/scene-build.cpp",
284      "src/src/scene-bump.cpp",
285      "src/src/scene-clear.cpp",
286      "src/src/scene-collection.h",
287      "src/src/scene-conditionals.cpp",
288      "src/src/scene-default-options.cpp",
289      "src/src/scene-desktop.cpp",
290      "src/src/scene-effect-2d.cpp",
291      "src/src/scene-function.cpp",
292      "src/src/scene-grid.cpp",
293      "src/src/scene-ideas.cpp",
294      "src/src/scene-jellyfish.cpp",
295      "src/src/scene-jellyfish.h",
296      "src/src/scene-loop.cpp",
297      "src/src/scene-pulsar.cpp",
298      "src/src/scene-refract.cpp",
299      "src/src/scene-refract.h",
300      "src/src/scene-shading.cpp",
301      "src/src/scene-shadow.cpp",
302      "src/src/scene-terrain.cpp",
303      "src/src/scene-texture.cpp",
304      "src/src/scene.cpp",
305      "src/src/shared-library.cpp",
306      "src/src/text-renderer.cpp",
307      "src/src/text-renderer.h",
308      "src/src/texture.cpp",
309    ]
310
311    public_deps += [
312      ":glmark2_headers",
313      "${angle_libpng_dir}:libpng",
314      "${angle_root}/third_party:jpeg",
315    ]
316  }
317}
318
319glmark2_common("glmark2_common_gles") {
320  public_deps = [
321    ":glmark2_gles",
322    ":glmark2_libmatrix_gles",
323    ":glmark2_scene_ideas_gles",
324    ":glmark2_scene_terrain_gles",
325  ]
326}
327
328glmark2_common("glmark2_common_gl") {
329  public_deps = [
330    ":glmark2_gl",
331    ":glmark2_libmatrix_gl",
332    ":glmark2_scene_ideas_gl",
333    ":glmark2_scene_terrain_gl",
334  ]
335}
336
337glmark2_version = "2017.07"
338
339template("glmark2_exe") {
340  executable(target_name) {
341    forward_variables_from(invoker, "*")
342    sources += [
343      "src/src/canvas-generic.cpp",
344      "src/src/canvas-generic.h",
345      "src/src/main.cpp",
346    ]
347    data = [ "src/data/" ]
348
349    defines += [ "GLMARK_VERSION=\"${glmark2_version}\"" ]
350
351    if (is_win) {
352      defines += [ "GLMARK2_USE_WIN32" ]
353      sources += [
354        "src/src/native-state-win32.cpp",
355        "src/src/native-state-win32.h",
356      ]
357    }
358    if (is_linux || is_chromeos) {
359      defines += [ "GLMARK2_USE_X11" ]
360      sources += [
361        "src/src/native-state-x11.cpp",
362        "src/src/native-state-x11.h",
363      ]
364      libs = [ "X11" ]
365    }
366  }
367}
368
369glmark2_exe("glmark2_angle") {
370  sources = [ "src/src/gl-state-egl.cpp" ]
371  deps = [ ":glmark2_common_gles" ]
372  data_deps = [
373    "${angle_root}:libEGL",
374    "${angle_root}:libGLESv2",
375  ]
376
377  defines = [
378    "EGL_EGL_PROTOTYPES=1",
379    "GLMARK2_USE_EGL",
380  ]
381
382  if ((is_linux || is_chromeos) && !is_component_build) {
383    # Set rpath to find shared libs in a non-component build.
384    public_configs = [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
385  }
386}
387
388if (is_linux || is_chromeos) {
389  glmark2_exe("glmark2_glx") {
390    sources = [
391      "src/src/gl-state-glx.cpp",
392      "src/src/glad/include/glad/glx.h",
393      "src/src/glad/src/glx.c",
394    ]
395    deps = [ ":glmark2_common_gl" ]
396
397    defines = [ "GLMARK2_USE_GLX" ]
398  }
399}
400
401# opengl32.lib/opengl32.dll are not available on Windows ARM64.
402if (is_win && target_cpu != "arm64") {
403  glmark2_exe("glmark2_wgl") {
404    sources = [ "src/src/gl-state-wgl.cpp" ]
405    deps = [ ":glmark2_common_gl" ]
406
407    libs = [ "opengl32.lib" ]
408    defines = [ "GLMARK2_USE_WGL" ]
409  }
410}
411