X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/b5422865f473faf3977f31b96a635c4c8c4ede09..9dae56ea45a0f5f8136a5c93d6f3a7f99399ca73:/JavaScriptCore.scons?ds=sidebyside diff --git a/JavaScriptCore.scons b/JavaScriptCore.scons new file mode 100644 index 0000000..24e5003 --- /dev/null +++ b/JavaScriptCore.scons @@ -0,0 +1,307 @@ +# The keys in sources are the paths to the directories +# the values are an array of source files in those directories to compile +sources = {} +sources['API'] = [ + 'API/JSBase.cpp', + 'API/JSCallbackConstructor.cpp', + 'API/JSCallbackFunction.cpp', + 'API/JSCallbackObject.cpp', + 'API/JSClassRef.cpp', + 'API/JSContextRef.cpp', + 'API/JSObjectRef.cpp', + 'API/JSProfilerPrivate.cpp', + 'API/JSStringRef.cpp', + 'API/JSValueRef.cpp', + 'API/OpaqueJSString.cpp', +] +sources['bytecompiler'] = [ + 'bytecompiler/BytecodeGenerator.cpp', +] +sources['debugger'] = [ + 'debugger/Debugger.cpp', + 'debugger/DebuggerActivation.cpp', + 'debugger/DebuggerCallFrame.cpp', +] +sources['parser'] = [ + 'parser/Lexer.cpp', + 'parser/Nodes.cpp', + 'parser/Parser.cpp', +] +sources['pcre'] = [ + 'pcre/pcre_compile.cpp', + 'pcre/pcre_exec.cpp', + 'pcre/pcre_tables.cpp', + 'pcre/pcre_ucp_searchfuncs.cpp', + 'pcre/pcre_xclass.cpp', +] +sources['profiler'] = [ + 'profiler/HeavyProfile.cpp', + 'profiler/Profile.cpp', + 'profiler/ProfileGenerator.cpp', + 'profiler/ProfileNode.cpp', + 'profiler/Profiler.cpp', + 'profiler/TreeProfile.cpp', +] +sources['runtime'] = [ + 'runtime/ArgList.cpp', + 'runtime/Arguments.cpp', + 'runtime/ArrayConstructor.cpp', + 'runtime/ArrayPrototype.cpp', + 'runtime/BooleanConstructor.cpp', + 'runtime/BooleanObject.cpp', + 'runtime/BooleanPrototype.cpp', + 'runtime/CallData.cpp', + 'runtime/Collector.cpp', + 'runtime/Completion.cpp', + 'runtime/CommonIdentifiers.cpp', + 'runtime/ConstructData.cpp', + 'runtime/DateConstructor.cpp', + 'runtime/DateInstance.cpp', + 'runtime/DateMath.cpp', + 'runtime/DatePrototype.cpp', + 'runtime/Error.cpp', + 'runtime/ErrorConstructor.cpp', + 'runtime/ErrorInstance.cpp', + 'runtime/ErrorPrototype.cpp', + 'runtime/ExceptionHelpers.cpp', + 'runtime/FunctionConstructor.cpp', + 'runtime/FunctionPrototype.cpp', + 'runtime/GetterSetter.cpp', + 'runtime/GlobalEvalFunction.cpp', + 'runtime/Identifier.cpp', + 'runtime/InitializeThreading.cpp', + 'runtime/InternalFunction.cpp', + 'runtime/JSActivation.cpp', + 'runtime/JSArray.cpp', + 'runtime/JSByteArray.cpp', + 'runtime/JSCell.cpp', + 'runtime/JSFunction.cpp', + 'runtime/JSGlobalData.cpp', + 'runtime/JSGlobalObject.cpp', + 'runtime/JSGlobalObjectFunctions.cpp', + 'runtime/JSImmediate.cpp', + 'runtime/JSLock.cpp', + 'runtime/JSNotAnObject.cpp', + 'runtime/JSNumberCell.cpp', + 'runtime/JSObject.cpp', + 'runtime/JSPropertyNameIterator.cpp', + 'runtime/JSStaticScopeObject.cpp', + 'runtime/JSString.cpp', + 'runtime/JSValue.cpp', + 'runtime/JSVariableObject.cpp', + 'runtime/JSWrapperObject.cpp', + 'runtime/Lookup.cpp', + 'runtime/MathObject.cpp', + 'runtime/NativeErrorConstructor.cpp', + 'runtime/NativeErrorPrototype.cpp', + 'runtime/NumberConstructor.cpp', + 'runtime/NumberObject.cpp', + 'runtime/NumberPrototype.cpp', + 'runtime/ObjectConstructor.cpp', + 'runtime/ObjectPrototype.cpp', + 'runtime/Operations.cpp', + 'runtime/PropertyNameArray.cpp', + 'runtime/PropertySlot.cpp', + 'runtime/PrototypeFunction.cpp', + 'runtime/RegExp.cpp', + 'runtime/RegExpConstructor.cpp', + 'runtime/RegExpObject.cpp', + 'runtime/RegExpPrototype.cpp', + 'runtime/ScopeChain.cpp', + 'runtime/SmallStrings.cpp', + 'runtime/StringConstructor.cpp', + 'runtime/StringObject.cpp', + 'runtime/StringPrototype.cpp', + 'runtime/Structure.cpp', + 'runtime/StructureChain.cpp', + 'runtime/UString.cpp', +] +sources['bytecode'] = [ + 'bytecode/CodeBlock.cpp', + 'bytecode/StructureStubInfo.cpp', + 'bytecode/JumpTable.cpp', + 'bytecode/Opcode.cpp', + 'bytecode/SamplingTool.cpp', +] +sources['interpreter'] = [ + 'interpreter/CallFrame.cpp', + 'interpreter/Interpreter.cpp', + 'interpreter/RegisterFile.cpp', +] +sources['jit'] = [ + 'jit/ExecutableAllocator.cpp', + 'jit/JIT.cpp', +] +sources['wrec'] = [ + 'wrec/CharacterClass.cpp', + 'wrec/CharacterClassConstructor.cpp', + 'wrec/WREC.cpp', + 'wrec/WRECFunctors.cpp', + 'wrec/WRECGenerator.cpp', + 'wrec/WRECParser.cpp', +] +sources['wtf'] = [ + 'wtf/Assertions.cpp', + 'wtf/ByteArray.cpp', + 'wtf/CurrentTime.cpp', + 'wtf/FastMalloc.cpp', + 'wtf/HashTable.cpp', + 'wtf/RandomNumber.cpp', + 'wtf/RefCountedLeakCounter.cpp', + 'wtf/Threading.cpp', + 'wtf/dtoa.cpp', +] +sources['wtf/unicode'] = [ + 'wtf/unicode/CollatorDefault.cpp', + 'wtf/unicode/UTF8.cpp', +] +sources['wtf/unicode/icu'] = [ + 'wtf/unicode/icu/CollatorICU.cpp', +] + +env = Environment() + +building_on_win32 = env['PLATFORM'] == 'win32' or env['PLATFORM'] == 'cygwin' + +# Scons uses gcc when building under cygwin by default +# We also have to manually force 8.0 or Scons will try and +# look up what version to use using the registry and fail +# due to lack of cygwin-python registry support +if env['PLATFORM'] == 'cygwin': + env['MSVS_VERSION'] = '8.0' + # Some systems have PROGRAMFILES, some have ProgramFiles + # Scons msvc tool only expects 'ProgramFiles' + import os + if os.getenv('PROGRAMFILES') and not os.getenv('ProgramFiles'): + os.environ['ProgramFiles'] = os.getenv('PROGRAMFILES') + + env.Tool('msvc') + env.Tool('mslink') + env.Tool('mslib') + +# Scons is failing to carry the %PATH% value through correctly +# Hack IncrediBuild into our path so cl.exe doesn't crash +if env['PLATFORM'] == 'win32': + env.AppendENVPath('PATH', 'c:/Program Files/Xoreax/IncrediBuild') + +if env['PLATFORM'] == 'darwin': + sources['API'].append('API/JSStringRefCF.cpp') + sources['profiler'].append('profiler/ProfilerServer.mm') + sources['wtf'].append('wtf/ThreadingPthreads.cpp') + sources['wtf'].append('wtf/MainThread.cpp') + sources['wtf/mac'] = ['wtf/mac/MainThreadMac.mm'] + sources['wtf'].append('wtf/TCSystemAlloc.cpp') + sources['jit'].append('jit/ExecutableAllocatorPosix.cpp') +elif building_on_win32: + sources['wtf'].append('wtf/ThreadingNone.cpp') + sources['jit'].append('jit/ExecutableAllocatorWin.cpp') + env.Append(CPPDEFINES = ['ENABLE_JSC_MULTIPLE_THREADS=0']) + +derived_sources_path = 'DerivedSources/JavaScriptCore/' +def DerivedSources(path): + return derived_sources_path + path + +derived_sources_results = map(DerivedSources, [ + 'ArrayPrototype.lut.h', + 'DatePrototype.lut.h', + 'MathObject.lut.h', + 'NumberConstructor.lut.h', + 'RegExpConstructor.lut.h', + 'RegExpObject.lut.h', + 'StringPrototype.lut.h' + 'chartables.c', + 'grammar.cpp', + 'grammar.h', + 'lexer.lut.h', +]) + +derived_sources_sources = [ + 'runtime/ArrayPrototype.cpp', + 'runtime/DatePrototype.cpp', + 'runtime/MathObject.cpp', + 'runtime/NumberConstructor.cpp', + 'runtime/RegExpConstructor.cpp', + 'runtime/RegExpObject.cpp', + 'runtime/StringPrototype.cpp', + 'parser/Grammar.y', + 'parser/Lexer.cpp', +] + +# Generate DerivedSources +# Make sure Windows knows where bash (and all the other cygwin commands) live +if env['PLATFORM'] == 'win32': + env.AppendENVPath('PATH', 'C:/cygwin/bin') +env.Command(derived_sources_results, derived_sources_sources, 'bash make-generated-sources.sh') +sources[derived_sources_path] = [DerivedSources('Grammar.cpp')] + +# Handle os-version specific build settings +if env['PLATFORM'] == 'darwin': + from subprocess import Popen, PIPE + version_pieces = Popen(["sw_vers", "-productVersion"], stdout = PIPE).communicate()[0].split('.') + if map(int, version_pieces)[:2] > (10, 5): + # Dtrace doesn't exist in Tiger, and was broken in Leopard + env.Command(DerivedSources('TracingDtrace.h'), 'runtime/Tracing.d', '/usr/sbin/dtrace -h -o $TARGET -s $SOURCE') + +# This build file builds the Chromium port for now, support for +# others could be added later. +env.Append(CPPDEFINES = ['BUILDING_CHROMIUM__']) + +# I'm not certain how many of these windows defines are actually required. +if building_on_win32: + env.Append(CPPDEFINES = ['_WIN32_WINNT=0x0600', 'WINVER=0x0600', 'WIN32', '_WINDOWS', 'NOMINMAX', 'UNICODE', '_UNICODE', '__STD_C', '_HAS_EXCEPTIONS=0']) + +# Scons out-of-the-box only supports precompiled headers for MSVC +# remove this when we fix Scons to understand GCC precompiled headers +if env['CC'] == 'gcc': + env['CCFLAGS'] = '-include JavaScriptCorePrefix.h' +# Turns out the MSVC PCH support is badly broken +# env['PCH'] = 'JavaScriptCorePrefix.h' +# env['PCHSTOP'] = 'JavaScriptCorePrefix.h' + +if env['PLATFORM'] == 'darwin': + env['FRAMEWORKS'] = ['CoreFoundation', 'Foundation'] + env['LIBS'] = ['icucore'] + # Apple does not ship the ICU headers with Mac OS X, so WebKit includes a copy of 3.2 headers + env.Append(CPPPATH = 'icu') + +webkit_libraries_path = "../WebKitLibraries/win/" +def WebKitLibraries(path): + return webkit_libraries_path + path + +include_paths = ['.', '..', 'ForwardingHeaders'] + sources.keys() +env.Append(CPPPATH = include_paths) +if building_on_win32: + env.Append(CPPPATH = ['os-win32', WebKitLibraries('include')]) + env.Prepend(LIBPATH = [WebKitLibraries('lib')]) + env.Append(LIBS = ['icuin', 'icuuc', 'user32', 'winmm']) + +# Save off a copy of the environment for use with jsc +jsc_env = env.Clone() + +if building_on_win32: + env.StaticLibrary("JavaScriptCore", sources.values()) +else: + env.SharedLibrary("JavaScriptCore", sources.values()) + + +env = jsc_env + +# Build the jsc testing shell +shell_sources = ['jsc.cpp'] +build_directory = '.' # This should be changed to point to wherever JavaScriptCore gets built to + +# It's hacky to re-use the same environment from JavaScriptCore +# but it makes building on windows easier for now +env['CPPPATH'] = include_paths +env['LIBS'] = ['JavaScriptCore'] +env['LIBPATH'] = [build_directory] + +if env['PLATFORM'] == 'darwin': + env.Append(LIBS = ['edit']) + env.Append(CPPPATH = 'icu') +elif building_on_win32: + env.Append(CPPPATH = ['os-win32', WebKitLibraries('include')]) + env.Prepend(LIBPATH = [WebKitLibraries('lib')]) + env.Append(LIBS = ['icuin', 'icuuc', 'user32', 'winmm']) + +env.Program('jsc', shell_sources)