1# Copyright 2016 Google Inc.
2#
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6declare_args() {
7}
8
9angle_root = "../externals/angle2"
10
11import("../third_party.gni")
12import("$angle_root/src/compiler.gni")
13import("$angle_root/src/libGLESv2.gni")
14
15third_party("angle2") {
16  public_include_dirs = [ "$angle_root/include" ]
17  deps = [
18    ":libEGL",
19    ":libGLESv2",
20  ]
21}
22
23config("common") {
24  defines = [
25    "ANGLE_ENABLE_ESSL",
26    "ANGLE_ENABLE_GLSL",
27    "ANGLE_ENABLE_HLSL",
28    "ANGLE_ENABLE_OPENGL",
29    "EGL_EGLEXT_PROTOTYPES",
30    "GL_GLEXT_PROTOTYPES",
31  ]
32  include_dirs = [
33    "$root_gen_dir/angle2",
34    "$angle_root/include",
35    "$angle_root/src",
36    "$angle_root/src/common/third_party/base",
37    "$angle_root/src/third_party/khronos",
38  ]
39  cflags_cc = []
40  assert(is_linux || is_win)  # TODO: is_mac?
41  if (is_linux) {
42    defines += [
43      "ANGLE_USE_X11",
44      "GL_APICALL=__attribute__((visibility(\"default\")))",
45      "GL_API=__attribute__((visibility(\"default\")))",
46      "EGLAPI=__attribute__((visibility(\"default\")))",
47    ]
48    cflags_cc += [ "-std=c++14" ]
49  } else if (is_win) {
50    defines += [
51      "ANGLE_ENABLE_D3D11",
52      "ANGLE_ENABLE_D3D9",
53      "GL_APICALL=",
54      "GL_API=",
55      "EGLAPI=",
56    ]
57
58    # Allow noexcept, even though we build without exceptions
59    cflags_cc += [ "/wd4577" ]
60    if (is_clang) {
61      # utilities.cpp includes an 'unsigned long' <= UINT_MAX check
62      cflags_cc += [ "-Wno-tautological-constant-compare" ]
63    }
64  }
65}
66
67copy("commit_id") {
68  sources = [
69    "$angle_root/src/commit.h",
70  ]
71  outputs = [
72    "$root_gen_dir/angle2/id/commit.h",
73  ]
74}
75
76shared_library("libGLESv2") {
77  configs += [ ":common" ]
78  configs -= [ "//gn:warnings" ]
79  defines = [
80    "LIBANGLE_IMPLEMENTATION",
81    "LIBGLESV2_IMPLEMENTATION",
82  ]
83  deps = [
84    ":commit_id",
85  ]
86  libs = []
87  sources = rebase_path(
88          angle_preprocessor_sources + angle_translator_sources +
89              angle_translator_essl_sources + angle_translator_glsl_sources +
90              angle_translator_hlsl_sources + libangle_sources +
91              libangle_common_sources + libangle_image_util_sources +
92              libglesv2_sources + libangle_gl_sources +
93              angle_system_utils_sources,
94          ".",
95          angle_root)
96  if (is_win) {
97    sources += [ "$angle_root/src/libGLESv2/libGLESv2_autogen.def" ]
98  }
99  if (is_linux) {
100    libs += [
101      "X11",
102      "Xi",
103      "Xext",
104    ]
105    sources += rebase_path(libangle_gl_glx_sources, ".", angle_root) +
106               [ "$angle_root/src/third_party/libXNVCtrl/NVCtrl.c" ]
107  } else if (is_win) {
108    defines += [
109      # TODO: ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES
110    ]
111    sources +=
112        rebase_path(libangle_gl_wgl_sources + libangle_d3d_shared_sources +
113                        libangle_d3d9_sources + libangle_d3d11_sources +
114                        libangle_d3d11_win32_sources,
115                    ".",
116                    angle_root)
117    libs += [
118      "d3d9.lib",
119      "dxguid.lib",
120      "gdi32.lib",
121      "user32.lib",
122    ]
123    deps += [
124      # TODO: copy_compiler_dll?
125    ]
126  }
127}
128
129shared_library("libEGL") {
130  configs += [ ":common" ]
131  configs -= [ "//gn:warnings" ]
132  defines = [ "LIBEGL_IMPLEMENTATION" ]
133  deps = [
134    ":libGLESv2",
135  ]
136  sources = rebase_path(libegl_sources, ".", angle_root)
137  if (is_win) {
138    sources += [ "$angle_root/src/libEGL/libEGL.def" ]
139  }
140}
141