# Copyright 2015 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# GYP for building gpu
{
  'target_defaults': {
    'conditions': [
      ['skia_os != "win"', {
        'sources/': [ ['exclude', '_win.(h|cpp)$'],
        ],
      }],
      ['skia_os != "mac"', {
        'sources/': [ ['exclude', '_mac.(h|cpp|m|mm)$'],
        ],
      }],
      ['skia_os != "linux"', {
        'sources/': [ ['exclude', '_glx.(h|cpp)$'],
        ],
      }],
      ['skia_os != "ios"', {
        'sources/': [ ['exclude', '_iOS.(h|cpp|m|mm)$'],
        ],
      }],
      ['skia_os != "android"', {
        'sources/': [ ['exclude', '_android.(h|cpp)$'],
        ],
      }],
      ['skia_egl == 0', {
        'sources/': [ ['exclude', '_egl.(h|cpp)$'],
        ],
      }],
      ['skia_os == "android"', {
        'sources/': [ ['exclude', 'GrGLCreateNativeInterface_egl.cpp'],
        ],
      }],
      ['skia_egl == 1', {
        'sources/': [ ['exclude', '_glx.(h|cpp)$'],
        ],
      }],
      # nullify the targets in this gyp file if skia_gpu is 0
      [ 'skia_gpu == 0', {
        'sources/': [
          ['exclude', '.*'],
        ],
        'defines/': [
          ['exclude', '.*'],
        ],
        'include_dirs/': [
           ['exclude', '.*'],
        ],
        'link_settings': {
          'libraries/': [
            ['exclude', '.*'],
          ],
        },
        'direct_dependent_settings': {
          'defines/': [
            ['exclude', '.*'],
          ],
          'include_dirs/': [
            ['exclude', '.*'],
          ],
        },
      }],
    ],
    'direct_dependent_settings': {
      'include_dirs': [
        '../include/gpu',
      ],
    },
  },
  'targets': [
    {
      'target_name': 'skgpu',
      'product_name': 'skia_skgpu',
      'type': 'static_library',
      'standalone_static_library': 1,
      'dependencies': [
        'core.gyp:*',
        'utils.gyp:utils',
        'etc1.gyp:libetc1',
        'ktx.gyp:libSkKTX',
        'sksl.gyp:sksl',
      ],
      'includes': [
        'gpu.gypi',
      ],
      'include_dirs': [
        '../include/gpu',
        '../include/private',
        '../src/core',
        '../src/gpu',
        '../src/image/',
        '../src/sksl',
      ],
      'sources': [
        '<@(skgpu_sources)',
        '<@(skgpu_native_gl_sources)',
        '<@(skgpu_vk_sources)',
        'gpu.gypi', # Makes the gypi appear in IDEs (but does not modify the build).
      ],
      'conditions': [
        [ 'skia_gpu_extra_dependency_path', {
          'dependencies' : [
              '<(skia_gpu_extra_dependency_path):*',
          ],
          'export_dependent_settings': [
            '<(skia_gpu_extra_dependency_path):*',
          ],
        }],
        [ 'skia_chrome_utils', {
          'sources': [
            '../experimental/ChromeUtils/SkBorder.cpp',
            '../experimental/ChromeUtils/SkBorder.h',
          ],
          'defines': [
            'GR_CHROME_UTILS=1',
          ],
        }],
        [ 'skia_os == "linux"', {
          'sources!': [
            '../src/gpu/gl/GrGLDefaultInterface_none.cpp',
            '../src/gpu/gl/GrGLCreateNativeInterface_none.cpp',
          ],
        }],
        [ 'skia_os == "linux" and skia_egl == 1', {
          'link_settings': {
            'libraries': [
              '-lEGL',
              '-lGLESv2',
            ],
          },
        }],
        [ 'skia_os == "linux" and skia_egl == 0', {
          'link_settings': {
            'libraries': [
              '-lGL',
              '-lGLU',
              '-lX11',
            ],
          },
        }],
        [ 'skia_os == "mac"', {
          'link_settings': {
            'libraries': [
              '$(SDKROOT)/System/Library/Frameworks/OpenGL.framework',
            ],
          },
          'sources!': [
            '../src/gpu/gl/GrGLDefaultInterface_none.cpp',
            '../src/gpu/gl/GrGLCreateNativeInterface_none.cpp',
          ],
        }],
        [ 'skia_os in ["win", "ios"]', {
          'sources!': [
            '../src/gpu/gl/GrGLDefaultInterface_none.cpp',
            '../src/gpu/gl/GrGLCreateNativeInterface_none.cpp',
          ],
        }],
        [ 'skia_os == "android"', {
          'sources!': [
            '../src/gpu/gl/GrGLDefaultInterface_none.cpp',
            '../src/gpu/gl/GrGLCreateNativeInterface_none.cpp',
          ],
          'defines': [
            'GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE=1',
          ],
          'link_settings': {
            'libraries': [
              '-lGLESv2',
              '-lEGL',
            ],
          },
        }],
        [ 'skia_vulkan', {
          'link_settings': {
            'libraries': [ '<(vulkan_lib_name)', ],
          },
          'dependencies': [
            'shaderc.gyp:shaderc_combined',
          ],
          'conditions': [
            [ 'skia_os == "win"', {
             'variables': {
                'vulkan_lib_name': '-lvulkan-1',
                'vulkan_sdk_path' : '<!(echo %VULKAN_SDK%)',
              },
              'include_dirs': [
                '<(vulkan_sdk_path)/Include',
              ],
              'direct_dependent_settings': {
                'include_dirs': [
                  '<(vulkan_sdk_path)/Include',
                ],
              },
              'link_settings': {
                'conditions': [
                  [ 'skia_arch_type == "x86"', {
                    'library_dirs': [ '<(vulkan_sdk_path)/Bin32', ],
                  }, {
                    'library_dirs': [ '<(vulkan_sdk_path)/Bin', ],
                  }],
                ]
              },
            }, {
              'variables': {
                'vulkan_lib_name': '-lvulkan',
              },
            }],
            [ 'skia_os == "linux"', {
              'variables': {
                'vulkan_sdk_path' : '<!(echo $VULKAN_SDK)',
              },
              'include_dirs': [
                '<(vulkan_sdk_path)/include',
              ],
              'direct_dependent_settings': {
                'include_dirs': [
                  '<(vulkan_sdk_path)/include',
                ],
              },
              'link_settings': {
                'library_dirs': [ '<(vulkan_sdk_path)/lib', ],
              },
            }],
            [ 'skia_android_framework', {
              'include_dirs': [
                'frameworks/native/vulkan/include',
                '../tools/viewer/sk_app',
                '../tools/viewer/sk_app/android',
              ],
              'direct_dependent_settings': {
                'include_dirs': [
                  'frameworks/native/vulkan/include',
                  '../tools/viewer/sk_app',
                  '../tools/viewer/sk_app/android',
                ],
              },
              'dependencies!': [
                'shaderc.gyp:shaderc_combined',
              ],
              'sources': [
                # the gyp -> android.mk generator doesn't seem to like cpp files
                # in directories outside of src, bench, or dm.  Until this gets fixed
                # I just start the path in the src directory.
                '<(skia_src_path)/../tools/viewer/sk_app/WindowContext.cpp',
                '<(skia_src_path)/../tools/viewer/sk_app/VulkanWindowContext.cpp',
                '<(skia_src_path)/../tools/viewer/sk_app/android/VulkanWindowContext_android.cpp'
              ],
            }],
          ],
        }, {
          'sources!': [
            '<@(skgpu_vk_sources)',
          ],
        }],
      ],
    },
  ],
}
