# Copyright (c) 2012 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. # This is an gyp include to use YASM for compiling assembly files. # # Files to be compiled with YASM should have an extension of .asm. # # There are three variables for this include: # yasm_flags : Pass additional flags into YASM. # yasm_output_path : Output directory for the compiled object files. # yasm_includes : Includes used by .asm code. Changes to which should force # recompilation. # # Sample usage: # 'sources': [ # 'ultra_optimized_awesome.asm', # ], # 'variables': { # 'yasm_flags': [ # '-I', 'assembly_include', # ], # 'yasm_output_path': '<(SHARED_INTERMEDIATE_DIR)/project', # 'yasm_includes': ['ultra_optimized_awesome.inc'] # }, # 'includes': [ # 'third_party/yasm/yasm_compile.gypi' # ], { 'variables': { 'yasm_flags': [], 'yasm_includes': [], 'conditions': [ [ 'use_system_yasm==0', { 'yasm_path': '<(PRODUCT_DIR)/yasm<(EXECUTABLE_SUFFIX)', }, { 'yasm_path': '<!(which yasm)', }], # Define yasm_flags that pass into YASM. [ 'os_posix==1 and OS!="mac" and OS!="ios" and target_arch=="ia32"', { 'yasm_flags': [ '-felf32', '-m', 'x86', ], }], [ 'os_posix==1 and OS!="mac" and OS!="ios" and target_arch=="x64"', { 'yasm_flags': [ '-DPIC', '-felf64', '-m', 'amd64', ], }], [ '(OS=="mac" or OS=="ios") and target_arch=="ia32"', { 'yasm_flags': [ '-fmacho32', '-m', 'x86', ], }], [ '(OS=="mac" or OS=="ios") and target_arch=="x64"', { 'yasm_flags': [ '-fmacho64', '-m', 'amd64', ], }], [ 'OS=="win" and target_arch=="ia32"', { 'yasm_flags': [ '-DPREFIX', '-fwin32', '-m', 'x86', ], }], [ 'OS=="win" and target_arch=="x64"', { 'yasm_flags': [ '-fwin64', '-m', 'amd64', ], }], # Define output extension. ['OS=="win"', { 'asm_obj_extension': 'obj', }, { 'asm_obj_extension': 'o', }], ], }, # variables 'conditions': [ # Only depend on YASM on x86 systems, do this so that compiling # .asm files for ARM will fail. ['use_system_yasm==0 and ( target_arch=="ia32" or target_arch=="x64" )', { 'dependencies': [ '<(DEPTH)/third_party/yasm/yasm.gyp:yasm#host', ], }], ], # conditions 'rules': [ { 'rule_name': 'assemble', 'extension': 'asm', 'inputs': [ '<(yasm_path)', '<@(yasm_includes)'], 'outputs': [ '<(yasm_output_path)/<(RULE_INPUT_ROOT).<(asm_obj_extension)', ], 'action': [ '<(yasm_path)', '<@(yasm_flags)', '-o', '<(yasm_output_path)/<(RULE_INPUT_ROOT).<(asm_obj_extension)', '<(RULE_INPUT_PATH)', ], 'process_outputs_as_sources': 1, 'message': 'Compile assembly <(RULE_INPUT_PATH)', }, ], # rules }