Home | History | Annotate | Download | only in yasm
      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