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