• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2012 The Chromium 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# This is an gyp include to use YASM for compiling assembly files.
6#
7# Files to be compiled with YASM should have an extension of .asm.
8#
9# There are three variables for this include:
10# yasm_flags : Pass additional flags into YASM.
11# yasm_output_path : Output directory for the compiled object files.
12# yasm_includes : Includes used by .asm code.  Changes to which should force
13#                 recompilation.
14#
15# Sample usage:
16# 'sources': [
17#   'ultra_optimized_awesome.asm',
18# ],
19# 'variables': {
20#   'yasm_flags': [
21#     '-I', 'assembly_include',
22#   ],
23#   'yasm_output_path': '<(SHARED_INTERMEDIATE_DIR)/project',
24#   'yasm_includes': ['ultra_optimized_awesome.inc']
25# },
26# 'includes': [
27#   'third_party/yasm/yasm_compile.gypi'
28# ],
29
30{
31  'variables': {
32    'yasm_flags': [],
33    'yasm_includes': [],
34
35    'conditions': [
36      [ 'use_system_yasm==0', {
37        'yasm_path': '<(PRODUCT_DIR)/yasm<(EXECUTABLE_SUFFIX)',
38      }, {
39        'yasm_path': '<!(which yasm)',
40      }],
41
42      # Define yasm_flags that pass into YASM.
43      [ 'os_posix==1 and OS!="mac" and OS!="ios" and target_arch=="ia32"', {
44        'yasm_flags': [
45          '-felf32',
46          '-m', 'x86',
47        ],
48      }],
49      [ 'os_posix==1 and OS!="mac" and OS!="ios" and target_arch=="x64"', {
50        'yasm_flags': [
51          '-DPIC',
52          '-felf64',
53          '-m', 'amd64',
54        ],
55      }],
56      [ '(OS=="mac" or OS=="ios") and target_arch=="ia32"', {
57        'yasm_flags': [
58          '-fmacho32',
59          '-m', 'x86',
60        ],
61      }],
62      [ '(OS=="mac" or OS=="ios") and target_arch=="x64"', {
63        'yasm_flags': [
64          '-fmacho64',
65          '-m', 'amd64',
66        ],
67      }],
68      [ 'OS=="win" and target_arch=="ia32"', {
69        'yasm_flags': [
70          '-DPREFIX',
71          '-fwin32',
72          '-m', 'x86',
73        ],
74      }],
75      [ 'OS=="win" and target_arch=="x64"', {
76        'yasm_flags': [
77          '-fwin64',
78          '-m', 'amd64',
79        ],
80      }],
81
82      # Define output extension.
83      ['OS=="win"', {
84        'asm_obj_extension': 'obj',
85      }, {
86        'asm_obj_extension': 'o',
87      }],
88    ],
89  },  # variables
90
91  'conditions': [
92    # Only depend on YASM on x86 systems, do this so that compiling
93    # .asm files for ARM will fail.
94    ['use_system_yasm==0 and ( target_arch=="ia32" or target_arch=="x64" )', {
95      'dependencies': [
96        '<(DEPTH)/third_party/yasm/yasm.gyp:yasm#host',
97      ],
98    }],
99  ],  # conditions
100
101  'rules': [
102    {
103      'rule_name': 'assemble',
104      'extension': 'asm',
105      'inputs': [ '<(yasm_path)', '<@(yasm_includes)'],
106      'outputs': [
107        '<(yasm_output_path)/<(RULE_INPUT_ROOT).<(asm_obj_extension)',
108      ],
109      'action': [
110        '<(yasm_path)',
111        '<@(yasm_flags)',
112        '-o', '<(yasm_output_path)/<(RULE_INPUT_ROOT).<(asm_obj_extension)',
113        '<(RULE_INPUT_PATH)',
114      ],
115      'process_outputs_as_sources': 1,
116      'message': 'Compile assembly <(RULE_INPUT_PATH)',
117    },
118  ],  # rules
119}
120