# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

DIRS += ['config']

if CONFIG['DEHYDRA_PATH']:
    DIRS += ['analysis-tests']

if CONFIG['JS_NATIVE_EDITLINE']:
    DIRS += ['editline']

# editline needs to get built before the shell
if not CONFIG['JS_DISABLE_SHELL']:
    DIRS += ['shell']

# FIXME: bug 530688 covers getting these working on Android
if CONFIG['OS_ARCH'] != 'ANDROID':
    TEST_DIRS += ['jsapi-tests']

TEST_DIRS += ['tests', 'gdb']

MODULE = 'js'

CONFIGURE_SUBST_FILES += ['devtools/rootAnalysis/Makefile']

# Changes to internal header files, used externally, massively slow down
# browser builds.  Don't add new files here unless you know what you're
# doing!
EXPORTS += [
    'js-config.h',
    'js.msg',
    'jsalloc.h',
    'jsapi.h',
    'jsclass.h',
    'jsclist.h',
    'jscpucfg.h',
    'jsdbgapi.h',
    'jsfriendapi.h',
    'jslock.h',
    'jsperf.h',
    'jsprf.h',
    'jsprototypes.h',
    'jsproxy.h',
    'jsprvtd.h',
    'jspubtd.h',
    'jstypes.h',
    'jsutil.h',
    'jsversion.h',
    'jswrapper.h',
]

if CONFIG['HAVE_DTRACE']:
    EXPORTS += [
        '$(CURDIR)/javascript-trace.h',
    ]

# If you add a header here, add it to js/src/jsapi-tests/testIntTypesABI.cpp so
# that we ensure we don't over-expose our internal integer typedefs.  Note that
# LegacyIntTypes.h below is deliberately exempted from this requirement.
EXPORTS.js += [
    'Anchor.h',
    'CallArgs.h',
    'CharacterEncoding.h',
    'Date.h',
    'GCAPI.h',
    'HashTable.h',
    'HeapAPI.h',
    'LegacyIntTypes.h',
    'MemoryMetrics.h',
    'PropertyKey.h',
    'RequiredDefines.h',
    'RootingAPI.h',
    'TemplateLib.h',
    'Utility.h',
    'Value.h',
    'Vector.h',
]

CPP_SOURCES += [
    'ArgumentsObject.cpp',
    'BytecodeCompiler.cpp',
    'BytecodeEmitter.cpp',
    'CharacterEncoding.cpp',
    'DateTime.cpp',
    'Debugger.cpp',
    'Eval.cpp',
    'ExecutableAllocator.cpp',
    'FoldConstants.cpp',
    'ForkJoin.cpp',
    'GlobalObject.cpp',
    'Interpreter.cpp',
    'Intl.cpp',
    'Iteration.cpp',
    'LifoAlloc.cpp',
    'MapObject.cpp',
    'Marking.cpp',
    'Memory.cpp',
    'Module.cpp',
    'Monitor.cpp',
    'NameFunctions.cpp',
    'Nursery.cpp',
    'Object.cpp',
    'ObjectImpl.cpp',
    'PageBlock.cpp',
    'ParallelArray.cpp',
    'ParseMaps.cpp',
    'ParseNode.cpp',
    'Parser.cpp',
    'Probes.cpp',
    'Profilers.cpp',
    'PropertyKey.cpp',
    'RegExp.cpp',
    'RegExpObject.cpp',
    'RegExpStatics.cpp',
    'RootMarking.cpp',
    'SPSProfiler.cpp',
    'ScopeObject.cpp',
    'SelfHosting.cpp',
    'Shape.cpp',
    'Stack.cpp',
    'Statistics.cpp',
    'StoreBuffer.cpp',
    'String.cpp',
    'StringBuffer.cpp',
    'TestingFunctions.cpp',
    'ThreadPool.cpp',
    'TokenStream.cpp',
    'Unicode.cpp',
    'Verifier.cpp',
    'Xdr.cpp',
    'YarrCanonicalizeUCS2.cpp',
    'YarrInterpreter.cpp',
    'YarrPattern.cpp',
    'YarrSyntaxChecker.cpp',
    'Zone.cpp',
    'jsalloc.cpp',
    'jsanalyze.cpp',
    'jsapi.cpp',
    'jsarray.cpp',
    'jsatom.cpp',
    'jsbool.cpp',
    'jsclone.cpp',
    'jscntxt.cpp',
    'jscompartment.cpp',
    'jscrashreport.cpp',
    'jsdate.cpp',
    'jsdbgapi.cpp',
    'jsdtoa.cpp',
    'jsexn.cpp',
    'jsfriendapi.cpp',
    'jsfun.cpp',
    'jsgc.cpp',
    'jsinfer.cpp',
    'jsiter.cpp',
    'jsmath.cpp',
    'jsmemorymetrics.cpp',
    'jsnativestack.cpp',
    'jsnum.cpp',
    'jsobj.cpp',
    'json.cpp',
    'jsonparser.cpp',
    'jsopcode.cpp',
    'jsperf.cpp',
    'jsprf.cpp',
    'jspropertytree.cpp',
    'jsproxy.cpp',
    'jsreflect.cpp',
    'jsscript.cpp',
    'jsstr.cpp',
    'jstypedarray.cpp',
    'jsutil.cpp',
    'jswatchpoint.cpp',
    'jsweakmap.cpp',
    'jsworkers.cpp',
    'jswrapper.cpp',
    'prmjtime.cpp',
    'sharkctl.cpp',
]

if CONFIG['MOZ_INSTRUMENTS']:
    CPP_SOURCES += [
        'Instruments.cpp',
    ]

if CONFIG['ENABLE_TRACE_LOGGING']:
    CPP_SOURCES += [
        'TraceLogging.cpp',
    ]

if CONFIG['ENABLE_ION']:
    CPP_SOURCES += [
        'AliasAnalysis.cpp',
        'AsmJS.cpp',
        'AsmJSLink.cpp',
        'AsmJSSignalHandlers.cpp',
        'BacktrackingAllocator.cpp',
        'Bailouts.cpp',
        'BaselineBailouts.cpp',
        'BaselineCompiler-shared.cpp',
        'BaselineCompiler.cpp',
        'BaselineFrame.cpp',
        'BaselineFrameInfo.cpp',
        'BaselineIC.cpp',
        'BaselineInspector.cpp',
        'BaselineJIT.cpp',
        'BitSet.cpp',
        'BytecodeAnalysis.cpp',
        'C1Spewer.cpp',
        'CodeGenerator-shared.cpp',
        'CodeGenerator.cpp',
        'EdgeCaseAnalysis.cpp',
        'EffectiveAddressAnalysis.cpp',
        'Ion.cpp',
        'IonAnalysis.cpp',
        'IonBuilder.cpp',
        'IonCaches.cpp',
        'IonFrames.cpp',
        'IonMacroAssembler.cpp',
        'IonSpewer.cpp',
        'JSONSpewer.cpp',
        'PerfSpewer.cpp',
        'LICM.cpp',
        'LIR.cpp',
        'LinearScan.cpp',
        'LiveRangeAllocator.cpp',
        'Lowering-shared.cpp',
        'Lowering.cpp',
        'MCallOptimize.cpp',
        'MIR.cpp',
        'MIRGraph.cpp',
        'MoveResolver.cpp',
        'ParallelArrayAnalysis.cpp',
        'ParallelFunctions.cpp',
        'RangeAnalysis.cpp',
        'RegisterAllocator.cpp',
        'Safepoints.cpp',
        'Snapshots.cpp',
        'StupidAllocator.cpp',
        'TypePolicy.cpp',
        'UnreachableCodeElimination.cpp',
        'VMFunctions.cpp',
        'ValueNumbering.cpp',
    ]
    if CONFIG['TARGET_CPU'].find('86') != -1:
        CPP_SOURCES += [
            'Assembler-x86-shared.cpp',
            'BaselineCompiler-x86-shared.cpp',
            'BaselineIC-x86-shared.cpp',
            'CodeGenerator-x86-shared.cpp',
            'IonFrames-x86-shared.cpp',
            'Lowering-x86-shared.cpp',
            'MoveEmitter-x86-shared.cpp',
        ]
        if CONFIG['TARGET_CPU'] == 'x86_64':
            CPP_SOURCES += [
                'Assembler-x64.cpp',
                'Bailouts-x64.cpp',
                'BaselineCompiler-x64.cpp',
                'BaselineIC-x64.cpp',
                'CodeGenerator-x64.cpp',
                'Lowering-x64.cpp',
                'MacroAssembler-x64.cpp',
                'Trampoline-x64.cpp',
            ]
        else:
            CPP_SOURCES += [
                'Assembler-x86.cpp',
                'Bailouts-x86.cpp',
                'BaselineCompiler-x86.cpp',
                'BaselineIC-x86.cpp',
                'CodeGenerator-x86.cpp',
                'Lowering-x86.cpp',
                'MacroAssembler-x86.cpp',
                'Trampoline-x86.cpp',
            ]
    elif CONFIG['TARGET_CPU'].find('arm') != -1:
        CPP_SOURCES += [
            'Architecture-arm.cpp',
            'Assembler-arm.cpp',
            'Bailouts-arm.cpp',
            'BaselineCompiler-arm.cpp',
            'BaselineIC-arm.cpp',
            'CodeGenerator-arm.cpp',
            'IonFrames-arm.cpp',
            'Lowering-arm.cpp',
            'MacroAssembler-arm.cpp',
            'MoveEmitter-arm.cpp',
            'Trampoline-arm.cpp',
        ]

if CONFIG['OS_ARCH'] == 'WINNT':
    CPP_SOURCES += [
        'ExecutableAllocatorWin.cpp',
        'OSAllocatorWin.cpp',
    ]
elif CONFIG['OS_ARCH'] == 'OS2':
    CPP_SOURCES += [
        'ExecutableAllocatorOS2.cpp',
        'OSAllocatorOS2.cpp',
    ]
else:
    CPP_SOURCES += [
        'ExecutableAllocatorPosix.cpp',
        'OSAllocatorPosix.cpp',
    ]

if CONFIG['ENABLE_ION'] or CONFIG['ENABLE_YARR_JIT']:
    CPP_SOURCES += [
        'ARMAssembler.cpp',
        'MacroAssemblerARM.cpp',
        'MacroAssemblerX86Common.cpp',
    ]

if CONFIG['ENABLE_YARR_JIT']:
    CPP_SOURCES += [
        'YarrJIT.cpp'
    ]

if CONFIG['JS_HAS_CTYPES']:
    CPP_SOURCES += [
        'CTypes.cpp',
        'Library.cpp',
    ]

if CONFIG['HAVE_LINUX_PERF_EVENT_H']:
    CPP_SOURCES += [
        'pm_linux.cpp'
    ]
else:
    CPP_SOURCES += [
        'pm_stub.cpp'
    ]
