# Copyright 2015 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

{
  'targets': [
    {
      'target_name': 'nb',
      'type': 'static_library',
      'variables': {
        'includes_starboard': 1,
      },
      'conditions': [
        ['OS=="starboard" or (OS=="lb_shell" and target_arch == "ps3")', {
          'sources': [
            'allocator.h',
            'analytics/memory_tracker.cc',
            'analytics/memory_tracker.h',
            'analytics/memory_tracker_impl.cc',
            'analytics/memory_tracker_impl.h',
            'analytics/memory_tracker_helpers.cc',
            'analytics/memory_tracker_helpers.h',
            'atomic.h',
            'bit_cast.h',
            'bidirectional_fit_reuse_allocator.h',
            'bidirectional_fit_reuse_allocator.cc',
            'concurrent_map.h',
            'concurrent_ptr.h',
            'first_fit_reuse_allocator.h',
            'first_fit_reuse_allocator.cc',
            'fixed_no_free_allocator.cc',
            'fixed_no_free_allocator.h',
            'hash.cc',
            'hash.h',
            'memory_pool.h',
            'memory_scope.cc',
            'memory_scope.h',
            'move.h',
            'multipart_allocator.cc',
            'multipart_allocator.h',
            'pointer_arithmetic.h',
            'rect.h',
            'ref_counted.cc',
            'ref_counted.h',
            'reuse_allocator_base.cc',
            'reuse_allocator_base.h',
            'rewindable_vector.h',
            'starboard_memory_allocator.h',
            'scoped_ptr.h',
            'simple_thread.cc',
            'simple_thread.h',
            'simple_profiler.cc',
            'simple_profiler.h',
            'std_allocator.h',
            'string_interner.cc',
            'string_interner.h',
            'thread_collision_warner.cc',
            'thread_collision_warner.h',
            'thread_local_object.h',
            'thread_local_boolean.h',
            'thread_local_pointer.h',
          ],
          'dependencies': [
            '<(DEPTH)/starboard/starboard_headers_only.gyp:starboard_headers_only',
          ],
        }],
        ['target_arch == "ps4"', {
          'sources': [
            'kernel_contiguous_allocator_ps4.cc',
            'kernel_contiguous_allocator_ps4.h',
            'kernel_no_free_allocator_ps4.cc',
            'kernel_no_free_allocator_ps4.h',
          ],
        }],
      ],
    },

  ],
}
