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