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