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