# Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

# This file contains all sources (vm and tests) for the compiler pipeline.
# Unit test files need to have a "_test" suffix appended to the name.
compiler_sources = [
  "aot/aot_call_specializer.cc",
  "aot/aot_call_specializer.h",
  "aot/precompiler.cc",
  "aot/precompiler.h",
  "asm_intrinsifier.cc",
  "asm_intrinsifier.h",
  "asm_intrinsifier_arm.cc",
  "asm_intrinsifier_arm64.cc",
  "asm_intrinsifier_dbc.cc",
  "asm_intrinsifier_ia32.cc",
  "asm_intrinsifier_x64.cc",
  "assembler/assembler.cc",
  "assembler/assembler.h",
  "assembler/assembler_arm.cc",
  "assembler/assembler_arm.h",
  "assembler/assembler_arm64.cc",
  "assembler/assembler_arm64.h",
  "assembler/assembler_dbc.cc",
  "assembler/assembler_dbc.h",
  "assembler/assembler_ia32.cc",
  "assembler/assembler_ia32.h",
  "assembler/assembler_x64.cc",
  "assembler/assembler_x64.h",
  "assembler/disassembler.cc",
  "assembler/disassembler.h",
  "assembler/disassembler_arm.cc",
  "assembler/disassembler_arm64.cc",
  "assembler/disassembler_dbc.cc",
  "assembler/disassembler_kbc.cc",
  "assembler/disassembler_kbc.h",
  "assembler/disassembler_x86.cc",
  "assembler/object_pool_builder.h",
  "backend/block_builder.h",
  "backend/block_scheduler.cc",
  "backend/block_scheduler.h",
  "backend/branch_optimizer.cc",
  "backend/branch_optimizer.h",
  "backend/code_statistics.cc",
  "backend/code_statistics.h",
  "backend/compile_type.h",
  "backend/constant_propagator.cc",
  "backend/constant_propagator.h",
  "backend/flow_graph.cc",
  "backend/flow_graph.h",
  "backend/flow_graph_checker.cc",
  "backend/flow_graph_checker.h",
  "backend/flow_graph_compiler.cc",
  "backend/flow_graph_compiler.h",
  "backend/flow_graph_compiler_arm.cc",
  "backend/flow_graph_compiler_arm64.cc",
  "backend/flow_graph_compiler_dbc.cc",
  "backend/flow_graph_compiler_ia32.cc",
  "backend/flow_graph_compiler_x64.cc",
  "backend/il.cc",
  "backend/il.h",
  "backend/il_arm.cc",
  "backend/il_arm64.cc",
  "backend/il_dbc.cc",
  "backend/il_ia32.cc",
  "backend/il_printer.cc",
  "backend/il_printer.h",
  "backend/il_x64.cc",
  "backend/inliner.cc",
  "backend/inliner.h",
  "backend/linearscan.cc",
  "backend/linearscan.h",
  "backend/locations.cc",
  "backend/locations.h",
  "backend/locations_helpers.h",
  "backend/locations_helpers_arm.h",
  "backend/loops.cc",
  "backend/loops.h",
  "backend/range_analysis.cc",
  "backend/range_analysis.h",
  "backend/redundancy_elimination.cc",
  "backend/redundancy_elimination.h",
  "backend/slot.cc",
  "backend/slot.h",
  "backend/type_propagator.cc",
  "backend/type_propagator.h",
  "call_specializer.cc",
  "call_specializer.h",
  "cha.cc",
  "cha.h",
  "compiler_pass.cc",
  "compiler_pass.h",
  "compiler_state.cc",
  "compiler_state.h",
  "ffi.cc",
  "ffi.h",
  "frontend/base_flow_graph_builder.cc",
  "frontend/base_flow_graph_builder.h",
  "frontend/bytecode_flow_graph_builder.cc",
  "frontend/bytecode_flow_graph_builder.h",
  "frontend/bytecode_reader.cc",
  "frontend/bytecode_reader.h",
  "frontend/bytecode_scope_builder.cc",
  "frontend/bytecode_scope_builder.h",
  "frontend/constant_evaluator.cc",
  "frontend/constant_evaluator.h",
  "frontend/flow_graph_builder.cc",
  "frontend/flow_graph_builder.h",
  "frontend/kernel_binary_flowgraph.cc",
  "frontend/kernel_binary_flowgraph.h",
  "frontend/kernel_fingerprints.cc",
  "frontend/kernel_fingerprints.h",
  "frontend/kernel_to_il.cc",
  "frontend/kernel_to_il.h",
  "frontend/kernel_translation_helper.cc",
  "frontend/kernel_translation_helper.h",
  "frontend/prologue_builder.cc",
  "frontend/prologue_builder.h",
  "frontend/scope_builder.cc",
  "frontend/scope_builder.h",
  "graph_intrinsifier.cc",
  "graph_intrinsifier.h",
  "graph_intrinsifier_arm.cc",
  "graph_intrinsifier_arm64.cc",
  "graph_intrinsifier_ia32.cc",
  "graph_intrinsifier_x64.cc",
  "intrinsifier.cc",
  "intrinsifier.h",
  "jit/compiler.cc",
  "jit/compiler.h",
  "jit/jit_call_specializer.cc",
  "jit/jit_call_specializer.h",
  "method_recognizer.cc",
  "method_recognizer.h",
  "recognized_methods_list.h",
  "relocation.cc",
  "relocation.h",
  "runtime_api.cc",
  "runtime_api.h",
  "stub_code_compiler.h",
  "stub_code_compiler_arm.cc",
  "stub_code_compiler_arm64.cc",
  "stub_code_compiler_dbc.cc",
  "stub_code_compiler_ia32.cc",
  "stub_code_compiler_x64.cc",
]

# The most common way to include assembly files in C projects is to have
# separate assembly files per architecture and operating system (for example
# boringssl).
#
# Not that this diverges from our convention to build every file on every OS
# but have ifdef guards which make the files empty on some configurations.
if (is_linux || is_mac) {
  # MASM on Windows does not support c preproccesor style flags.
  compiler_sources += [ "ffi_dbc_trampoline_x64_linux_mac.S" ]
}

compiler_sources_tests = [
  "assembler/assembler_arm64_test.cc",
  "assembler/assembler_arm_test.cc",
  "assembler/assembler_dbc_test.cc",
  "assembler/assembler_ia32_test.cc",
  "assembler/assembler_test.cc",
  "assembler/assembler_x64_test.cc",
  "assembler/disassembler_test.cc",
  "backend/il_test.cc",
  "backend/il_test_helper.h",
  "backend/il_test_helper.cc",
  "backend/inliner_test.cc",
  "backend/locations_helpers_test.cc",
  "backend/loops_test.cc",
  "backend/range_analysis_test.cc",
  "backend/redundancy_elimination_test.cc",
  "backend/slot_test.cc",
  "backend/type_propagator_test.cc",
  "backend/typed_data_aot_test.cc",
  "cha_test.cc",
]
