SubDir TOP JavaScriptCore ;

local defines = [ FDefines BUILDING_HAIKU__=1 ] ;

# To turn off debugging symbols export NDEBUG=1 in the environment
SubDirC++Flags $(defines) ;
SubDirCcFlags $(defines) ;

# Define header locations
SubDirSysHdrs $(TOP) ;
SubDirSysHdrs $(TOP) JavaScriptCore ;
SubDirSysHdrs $(TOP) JavaScriptCore ForwardingHeaders ;
SubDirSysHdrs $(TOP) JavaScriptCore assembler ;
SubDirSysHdrs $(TOP) JavaScriptCore pcre ;
SubDirSysHdrs $(TOP) JavaScriptCore runtime ;

SubDirHdrs $(TOP) ;
SubDirHdrs $(TOP) JavaScriptCore ;
SubDirHdrs $(TOP) JavaScriptCore API ;
SubDirHdrs $(TOP) JavaScriptCore DerivedSources JavaScriptCore ;
SubDirHdrs $(TOP) JavaScriptCore ForwardingHeaders ;
SubDirHdrs $(TOP) JavaScriptCore assembler ;
SubDirHdrs $(TOP) JavaScriptCore bytecode ;
SubDirHdrs $(TOP) JavaScriptCore bytecompiler ;
SubDirHdrs $(TOP) JavaScriptCore debugger ;
SubDirHdrs $(TOP) JavaScriptCore interpreter ;
SubDirHdrs $(TOP) JavaScriptCore jit ;
SubDirHdrs $(TOP) JavaScriptCore parser ;
SubDirHdrs $(TOP) JavaScriptCore pcre ;
SubDirHdrs $(TOP) JavaScriptCore profiler ;
SubDirHdrs $(TOP) JavaScriptCore runtime ;
SubDirHdrs $(TOP) JavaScriptCore wtf ;
SubDirHdrs $(TOP) JavaScriptCore wrec ;
SubDirHdrs $(TOP) JavaScriptCore yarr ;
SubDirHdrs $(TOP) WebCore ;
SubDirHdrs $(TOP) WebCore platform ;

# Define the source directories. Any headers included with quotes should be in
# the following directories.
local sourceDirs =
    API
    DerivedSources/JavaScriptCore
    bytecode
    bytecompiler
    debugger
    interpreter
    jit
    parser
    pcre
    profiler
    runtime
    wtf
    wtf/haiku
    wtf/unicode
    wtf/unicode/icu
    wtf/text
    yarr
;

local sourceDir ;
for sourceDir in $(sourceDirs) {
    SEARCH_SOURCE += [ FDirName $(TOP) JavaScriptCore $(sourceDir) ] ;
}


SharedLibrary libjavascriptcore.so :
    # API
    JSBase.cpp
    JSCallbackConstructor.cpp
    JSCallbackFunction.cpp
    JSCallbackObject.cpp
    JSClassRef.cpp
    JSContextRef.cpp
    JSObjectRef.cpp
    JSStringRef.cpp
    JSValueRef.cpp
    JSWeakObjectMapRefPrivate.cpp
    OpaqueJSString.cpp

	# DerivedSources/JavaScriptCore
	Grammar.cpp

    # bytecode
    CodeBlock.cpp
    JumpTable.cpp
    Opcode.cpp
    SamplingTool.cpp
    StructureStubInfo.cpp

	# bytecompiler
    BytecodeGenerator.cpp
    NodesCodegen.cpp

    # debugger
    Debugger.cpp
    DebuggerActivation.cpp
    DebuggerCallFrame.cpp

    # interpreter
    CallFrame.cpp
    Interpreter.cpp
    RegisterFile.cpp

    # jit
    ExecutableAllocator.cpp
    ExecutableAllocatorPosix.cpp
    JIT.cpp
    JITArithmetic.cpp
    JITCall.cpp
    JITOpcodes.cpp
    JITPropertyAccess32_64.cpp
    JITPropertyAccess.cpp
    JITStubs.cpp

    # parser
    Lexer.cpp
    Nodes.cpp
    Parser.cpp
    ParserArena.cpp

    # pcre
    pcre_compile.cpp
    pcre_exec.cpp
    pcre_tables.cpp
    pcre_ucp_searchfuncs.cpp
    pcre_xclass.cpp

    # profiler
    Profile.cpp
    ProfileGenerator.cpp
    ProfileNode.cpp
    Profiler.cpp

    # runtime
    ArgList.cpp
    Arguments.cpp
    ArrayConstructor.cpp
    ArrayPrototype.cpp
    BooleanConstructor.cpp
    BooleanObject.cpp
    BooleanPrototype.cpp
    CallData.cpp
    Collector.cpp
    CommonIdentifiers.cpp
    Completion.cpp
    ConstructData.cpp
    DateConstructor.cpp
    DateConversion.cpp
    DateInstance.cpp
    DatePrototype.cpp
    Error.cpp
    ErrorConstructor.cpp
    ErrorInstance.cpp
    ErrorPrototype.cpp
    ExceptionHelpers.cpp
    Executable.cpp
    FunctionConstructor.cpp
    FunctionPrototype.cpp
    GetterSetter.cpp
    GlobalEvalFunction.cpp
    Identifier.cpp
    InternalFunction.cpp
    InitializeThreading.cpp
    JSActivation.cpp
    JSArray.cpp
    JSAPIValueWrapper.cpp
    JSByteArray.cpp
    JSCell.cpp
    JSFunction.cpp
    JSGlobalData.cpp
    JSGlobalObject.cpp
    JSGlobalObjectFunctions.cpp
    JSImmediate.cpp
    JSLock.cpp
    JSNotAnObject.cpp
    JSNumberCell.cpp
    JSONObject.cpp
    JSObject.cpp
    JSPropertyNameIterator.cpp
    JSStaticScopeObject.cpp
    JSString.cpp
    JSValue.cpp
    JSVariableObject.cpp
    JSWrapperObject.cpp
    LiteralParser.cpp
    Lookup.cpp
    MarkStack.cpp
    MarkStackPosix.cpp
    MathObject.cpp
    NativeErrorConstructor.cpp
    NativeErrorPrototype.cpp
    NumberConstructor.cpp
    NumberObject.cpp
    NumberPrototype.cpp
    ObjectConstructor.cpp
    ObjectPrototype.cpp
    Operations.cpp
    PropertyDescriptor.cpp
    PropertyNameArray.cpp
    PropertySlot.cpp
    PrototypeFunction.cpp
    RegExp.cpp
    RegExpConstructor.cpp
    RegExpObject.cpp
    RegExpPrototype.cpp
    ScopeChain.cpp
    SmallStrings.cpp
    StringConstructor.cpp
    StringObject.cpp
    StringPrototype.cpp
    Structure.cpp
    StructureChain.cpp
    TimeoutChecker.cpp
    UString.cpp
    UStringImpl.cpp

    # wtf
    dtoa.cpp
    Assertions.cpp
    ByteArray.cpp
    CurrentTime.cpp
    DateMath.cpp
    FastMalloc.cpp
    HashTable.cpp
    MainThread.cpp
    RandomNumber.cpp
    RefCountedLeakCounter.cpp
    TCSystemAlloc.cpp
    Threading.cpp
    ThreadingPthreads.cpp
    ThreadIdentifierDataPthreads.cpp
    TypeTraits.cpp

    # wtf/haiku
    MainThreadHaiku.cpp

    # wtf/unicode
    CollatorDefault.cpp
    UTF8.cpp

    #wtf/unicode/icu
    CollatorICU.cpp

    #wtf/text
    CString.cpp

    # yarr
    RegexCompiler.cpp
    RegexInterpreter.cpp
    RegexJIT.cpp

    :
    # Other required libraries
    icuuc icudata icui18n stdc++
    # Haiku libraries
    be
;


#-----------------------------------------------------------------------------
# JavaScriptCore application
#-----------------------------------------------------------------------------

Application jsc :
    jsc.cpp
    :
    libjavascriptcore.so
    # Other required libraries
    stdc++
;

