Edit

kc3-lang/angle/BUILD.gn

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2016-07-18 10:10:29
    Hash : 509a1d46
    Message : GN: Enable more MSVS warnings. Some warnings were enabled only in standalone builds. Enabling them in the GN config will prevent standalone build breakage and also make some potentially harmful warnings more visible to non-Windows devs. BUG=angleproject:1449 Change-Id: I11fe9bac957864d37af37b3860a22fcbd91946ac Reviewed-on: https://chromium-review.googlesource.com/360961 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • BUILD.gn
  • # Copyright 2014-2015 The Chromium Authors. All rights reserved.
    # Use of this source code is governed by a BSD-style license that can be
    # found in the LICENSE file.
    
    # import the use_x11 variable
    import("//build/config/dcheck_always_on.gni")
    import("//build/config/linux/pkg_config.gni")
    import("//build/config/ui.gni")
    import("//third_party/angle/build/angle_common.gni")
    import("//ui/ozone/ozone.gni")
    
    if (ozone_platform_gbm) {
      pkg_config("libdrm") {
        packages = [ "libdrm" ]
      }
    }
    
    angle_git_is_present = exec_script("src/commit_id.py",
                                       [
                                         "check",
                                         rebase_path(".", root_build_dir),
                                       ],
                                       "value")
    
    angle_use_commit_id = angle_git_is_present == 1
    
    gles_gypi = exec_script("//build/gypi_to_gn.py",
                            [ rebase_path("src/libGLESv2.gypi") ],
                            "scope",
                            [ "src/libGLESv2.gypi" ])
    
    compiler_gypi = exec_script("//build/gypi_to_gn.py",
                                [ rebase_path("src/compiler.gypi") ],
                                "scope",
                                [ "src/compiler.gypi" ])
    
    # This config is exported to dependent targets (and also applied to internal
    # ones).
    config("external_config") {
      include_dirs = [ "include" ]
    }
    
    # This config is applied to internal Angle targets (not pushed to dependents).
    config("internal_config") {
      include_dirs = [
        "include",
        "src",
      ]
    }
    
    config("extra_warnings") {
      # Enable more default warnings on Windows.
      if (is_win) {
        cflags = [
          "/we4244",  # Conversion: possible loss of data.
          "/we4456",  # Variable shadowing.
        ]
      }
    }
    
    if (is_win) {
      copy("copy_compiler_dll") {
        sources = [
          "$windows_sdk_path/Redist/D3D/$target_cpu/d3dcompiler_47.dll",
        ]
        outputs = [
          "$root_out_dir/d3dcompiler_47.dll",
        ]
      }
    }
    
    angle_undefine_configs = [ "//build/config/compiler:default_include_dirs" ]
    
    component("translator") {
      sources = [
        "src/compiler/translator/ShaderLang.cpp",
        "src/compiler/translator/ShaderVars.cpp",
      ]
    
      defines = [ "ANGLE_TRANSLATOR_IMPLEMENTATION" ]
    
      configs -= angle_undefine_configs
      configs += [ ":internal_config" ]
    
      public_deps = [
        ":translator_lib",
      ]
    }
    
    # Holds the shared includes so we only need to list them once.
    source_set("includes") {
      sources = [
        "include/EGL/egl.h",
        "include/EGL/eglext.h",
        "include/EGL/eglplatform.h",
        "include/GLES2/gl2.h",
        "include/GLES2/gl2ext.h",
        "include/GLES2/gl2platform.h",
        "include/GLES3/gl3.h",
        "include/GLES3/gl31.h",
        "include/GLES3/gl32.h",
        "include/GLES3/gl3platform.h",
        "include/GLSLANG/ShaderLang.h",
        "include/KHR/khrplatform.h",
      ]
    }
    
    static_library("preprocessor") {
      sources = rebase_path(compiler_gypi.angle_preprocessor_sources, ".", "src")
    
      configs -= angle_undefine_configs
      configs += [ ":internal_config" ]
    }
    
    config("translator_static_config") {
      defines = [ "ANGLE_TRANSLATOR_STATIC" ]
    }
    
    config("debug_annotations_config") {
      if (is_debug) {
        defines = [ "ANGLE_ENABLE_DEBUG_ANNOTATIONS" ]
      }
    }
    
    config("angle_release_asserts_config") {
      if (dcheck_always_on) {
        defines = [ "ANGLE_ENABLE_RELEASE_ASSERTS" ]
      }
    }
    
    config("angle_common_config") {
      include_dirs = [ "src/common/third_party/numerics" ]
    }
    
    static_library("angle_common") {
      sources = rebase_path(gles_gypi.libangle_common_sources, ".", "src")
    
      configs -= angle_undefine_configs
      configs += [
        ":angle_common_config",
        ":debug_annotations_config",
        ":extra_warnings",
        ":internal_config",
      ]
    
      public_deps = [
        ":commit_id",
      ]
      public_configs = [
        ":angle_release_asserts_config",
        ":angle_common_config",
      ]
    }
    
    config("angle_image_util_config") {
      include_dirs = [
        "include",
        "src",
      ]
    }
    
    static_library("angle_image_util") {
      sources = rebase_path(gles_gypi.libangle_image_util_sources, ".", "src")
    
      configs -= angle_undefine_configs
      configs += [ ":internal_config" ]
    
      public_configs = [ ":angle_image_util_config" ]
    
      public_deps = [
        ":angle_common",
      ]
    }
    
    static_library("translator_lib") {
      sources = rebase_path(compiler_gypi.angle_translator_lib_sources, ".", "src")
      defines = []
    
      if (angle_enable_essl) {
        sources +=
            rebase_path(compiler_gypi.angle_translator_lib_essl_sources, ".", "src")
        defines += [ "ANGLE_ENABLE_ESSL" ]
      }
    
      if (angle_enable_glsl) {
        sources +=
            rebase_path(compiler_gypi.angle_translator_lib_glsl_sources, ".", "src")
        defines += [ "ANGLE_ENABLE_GLSL" ]
      }
    
      if (angle_enable_hlsl) {
        sources +=
            rebase_path(compiler_gypi.angle_translator_lib_hlsl_sources, ".", "src")
        defines += [ "ANGLE_ENABLE_HLSL" ]
      }
      configs -= angle_undefine_configs
      configs += [
        ":internal_config",
        ":translator_static_config",
      ]
      public_configs = [ ":external_config" ]
    
      deps = [
        ":includes",
        ":preprocessor",
      ]
    
      public_deps = [
        ":angle_common",
      ]
    
      if (is_win) {
        # Necessary to suppress some system header xtree warnigns in Release.
        # For some reason this warning doesn't get triggered in Chromium
        cflags = [ "/wd4718" ]
      }
    }
    
    static_library("translator_static") {
      sources = [
        "src/compiler/translator/ShaderLang.cpp",
        "src/compiler/translator/ShaderVars.cpp",
      ]
    
      if (angle_enable_hlsl) {
        defines = [ "ANGLE_ENABLE_HLSL" ]
      }
    
      configs -= angle_undefine_configs
      configs += [ ":internal_config" ]
      public_configs = [ ":translator_static_config" ]
    
      public_deps = [
        ":translator_lib",
      ]
    }
    
    config("commit_id_config") {
      include_dirs = [ "$root_gen_dir/angle" ]
    }
    
    commit_id_output_file = "$root_gen_dir/angle/id/commit.h"
    if (angle_use_commit_id) {
      action("commit_id") {
        script = "src/commit_id.py"
        outputs = [
          commit_id_output_file,
        ]
    
        args = [
          "gen",
          rebase_path(".", root_build_dir),
          rebase_path(commit_id_output_file, root_build_dir),
        ]
    
        public_configs = [ ":commit_id_config" ]
      }
    } else {
      copy("commit_id") {
        sources = [
          "src/commit.h",
        ]
        outputs = [
          commit_id_output_file,
        ]
        public_configs = [ ":commit_id_config" ]
      }
    }
    
    config("libANGLE_config") {
      cflags = []
      defines = []
      if (angle_enable_d3d9) {
        defines += [ "ANGLE_ENABLE_D3D9" ]
      }
      if (angle_enable_d3d11) {
        defines += [ "ANGLE_ENABLE_D3D11" ]
      }
      if (angle_enable_gl) {
        defines += [ "ANGLE_ENABLE_OPENGL" ]
        if (use_x11) {
          defines += [ "ANGLE_USE_X11" ]
        }
      }
      if (angle_enable_vulkan) {
        defines += [ "ANGLE_ENABLE_VULKAN" ]
      }
      defines += [
        "GL_GLEXT_PROTOTYPES",
        "EGL_EGLEXT_PROTOTYPES",
      ]
    
      if (is_win) {
        defines += [
          "GL_APICALL=",
          "EGLAPI=",
        ]
      } else {
        defines += [
          "GL_APICALL=__attribute__((visibility(\"default\")))",
          "EGLAPI=__attribute__((visibility(\"default\")))",
        ]
      }
      if (is_win) {
        cflags += [ "/wd4530" ]  # C++ exception handler used, but unwind semantics are not enabled.
      }
    }
    
    static_library("libANGLE") {
      sources = rebase_path(gles_gypi.libangle_sources, ".", "src")
    
      include_dirs = []
      libs = []
      defines = [ "LIBANGLE_IMPLEMENTATION" ]
      public_deps = [
        ":angle_common",
      ]
      deps = [
        ":angle_image_util",
        ":commit_id",
        ":includes",
        ":translator_static",
      ]
    
      # Shared D3D sources.
      if (angle_enable_d3d9 || angle_enable_d3d11) {
        sources += rebase_path(gles_gypi.libangle_d3d_shared_sources, ".", "src")
    
        defines += [ "ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={ " + "\"d3dcompiler_47.dll\", \"d3dcompiler_46.dll\", \"d3dcompiler_43.dll\" }" ]
      }
    
      if (angle_enable_d3d9) {
        sources += rebase_path(gles_gypi.libangle_d3d9_sources, ".", "src")
        libs += [ "d3d9.lib" ]
      }
    
      if (angle_enable_d3d11) {
        sources += rebase_path(gles_gypi.libangle_d3d11_sources, ".", "src")
        sources += rebase_path(gles_gypi.libangle_d3d11_win32_sources, ".", "src")
        libs += [
          "dxguid.lib",
          "Cfgmgr32.lib",
          "setupapi.lib",
        ]
      }
    
      if (angle_enable_gl) {
        sources += rebase_path(gles_gypi.libangle_gl_sources, ".", "src")
        include_dirs += [ "src/third_party/khronos" ]
    
        if (is_win) {
          sources += rebase_path(gles_gypi.libangle_gl_wgl_sources, ".", "src")
        }
        if (use_x11) {
          sources += rebase_path(gles_gypi.libangle_gl_glx_sources, ".", "src")
          deps += [ "src/third_party/libXNVCtrl:libXNVCtrl" ]
          libs += [
            "X11",
            "Xi",
            "Xext",
          ]
        }
        if (is_mac) {
          sources += rebase_path(gles_gypi.libangle_gl_cgl_sources, ".", "src")
          libs += [
            "Cocoa.framework",
            "IOSurface.framework",
            "OpenGL.framework",
            "QuartzCore.framework",
          ]
        }
        if (is_android) {
          sources += rebase_path(gles_gypi.libangle_gl_egl_sources, ".", "src")
          sources += rebase_path(gles_gypi.libangle_gl_egl_dl_sources, ".", "src")
          sources +=
              rebase_path(gles_gypi.libangle_gl_egl_android_sources, ".", "src")
          libs += [
            "android",
            "log",
          ]
        }
        if (ozone_platform_gbm) {
          configs += [ ":libdrm" ]
          defines += [ "ANGLE_USE_OZONE" ]
          deps += [ "//third_party/minigbm" ]
          sources += rebase_path(gles_gypi.libangle_gl_egl_sources, ".", "src")
          sources += rebase_path(gles_gypi.libangle_gl_egl_dl_sources, ".", "src")
          sources += rebase_path(gles_gypi.libangle_gl_ozone_sources, ".", "src")
        }
      }
    
      if (angle_enable_vulkan) {
        sources += rebase_path(gles_gypi.libangle_vulkan_sources, ".", "src")
      }
    
      if (is_debug) {
        defines += [ "ANGLE_GENERATE_SHADER_DEBUG_INFO" ]
      }
    
      configs -= angle_undefine_configs
    
      configs += [
        ":commit_id_config",
        ":debug_annotations_config",
        ":extra_warnings",
        ":libANGLE_config",
        ":internal_config",
      ]
    
      if (is_win) {
        data_deps = [
          ":copy_compiler_dll",
        ]
      }
    }
    
    config("shared_library_public_config") {
      if (is_mac && !is_component_build) {
        # Executable targets that depend on the shared libraries below need to have
        # the rpath setup in non-component build configurations.
        ldflags = [
          "-rpath",
          "@executable_path/",
        ]
      }
    }
    
    shared_library("libGLESv2") {
      sources = rebase_path(gles_gypi.libglesv2_sources, ".", "src")
    
      if (is_win) {
        ldflags =
            [ "/DEF:" + rebase_path("src/libGLESv2/libGLESv2.def", root_build_dir) ]
      }
    
      if (is_mac && !is_component_build) {
        ldflags = [
          "-install_name",
          "@rpath/${target_name}.dylib",
        ]
        public_configs = [ ":shared_library_public_config" ]
      }
    
      configs -= angle_undefine_configs
      configs += [
        ":internal_config",
        ":commit_id_config",
        ":debug_annotations_config",
        ":libANGLE_config",
      ]
    
      defines = [ "LIBGLESV2_IMPLEMENTATION" ]
    
      deps = [
        ":includes",
        ":libANGLE",
      ]
    }
    
    shared_library("libEGL") {
      sources = rebase_path(gles_gypi.libegl_sources, ".", "src")
    
      if (is_win) {
        ldflags = [ "/DEF:" + rebase_path("src/libEGL/libEGL.def", root_build_dir) ]
      }
    
      if (is_mac && !is_component_build) {
        ldflags = [
          "-install_name",
          "@rpath/${target_name}.dylib",
        ]
        public_configs = [ ":shared_library_public_config" ]
      }
    
      configs -= angle_undefine_configs
      configs += [
        ":commit_id_config",
        ":debug_annotations_config",
        ":extra_warnings",
        ":internal_config",
        ":libANGLE_config",
      ]
    
      defines = [ "LIBEGL_IMPLEMENTATION" ]
    
      deps = [
        ":includes",
        ":libGLESv2",
      ]
    }
    
    util_gypi = exec_script("//build/gypi_to_gn.py",
                            [ rebase_path("util/util.gyp") ],
                            "scope",
                            [ "util/util.gyp" ])
    
    config("angle_util_config") {
      include_dirs = [ "util" ]
      if (is_linux && use_x11) {
        libs = [ "X11" ]
      }
    }
    
    static_library("angle_util") {
      sources = rebase_path(util_gypi.util_sources, ".", "util")
    
      if (is_win) {
        sources += rebase_path(util_gypi.util_win32_sources, ".", "util")
      }
    
      if (is_linux) {
        sources += rebase_path(util_gypi.util_linux_sources, ".", "util")
        libs = [
          "rt",
          "dl",
        ]
      }
    
      if (is_mac) {
        sources += rebase_path(util_gypi.util_osx_sources, ".", "util")
      }
    
      if (use_x11) {
        sources += rebase_path(util_gypi.util_x11_sources, ".", "util")
      }
    
      if (is_android) {
        # To prevent linux sources filtering on android
        set_sources_assignment_filter([])
        sources += rebase_path(util_gypi.util_linux_sources, ".", "util")
        sources += rebase_path(util_gypi.util_android_sources, ".", "util")
        libs = [
          "android",
          "log",
        ]
      }
    
      if (use_ozone) {
        sources += rebase_path(util_gypi.util_ozone_sources, ".", "util")
      }
    
      defines = [
        "GL_GLEXT_PROTOTYPES",
        "EGL_EGLEXT_PROTOTYPES",
      ]
    
      configs += [
        ":debug_annotations_config",
        ":extra_warnings",
      ]
    
      public_configs = [
        ":angle_util_config",
        ":internal_config",
      ]
    
      deps = [
        ":angle_common",
        ":libEGL",
        ":libGLESv2",
      ]
    }