Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Side by Side Diff: gears/SConscript

Issue 6576020: Remove Gears from Chrome (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: windows fixes Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gears/README.chromium ('k') | gears/SConscript.browser » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright (c) 2008 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 # Notes:
6 # This is the main Gears SConscript file. From here, we include sub-scripts
7 # that handle building various targets (third party libs, common exes, the
8 # browser plugins themselves, and installers). Some sub-scripts return a
9 # dictionary of variables to be appended to the environment, so other
10 # sub-scripts can use them.
11 #
12 # To check out the Gears sources, you need to make sure this directory is in
13 # your .gclient file, so its DEPS get processed. Example:
14 # { "name" : "src/gears",
15 # "url" : "svn://chrome-svn/chrome/trunk/src/gears",
16 # },
17 #
18 # This is a work-in-progress conversion of the current Gears set of Makefiles.
19 # A lot of the stuff doesn't translate to SCons-land well, and I'm not sure
20 # how faithful we want to be to the original.
21 #
22 # Questions:
23 # Should we flatten the output directory into
24 # Hammer/gears/platform/browser/*.obj like Gears does now? If so, how?
25
26 # Notes to self:
27 # - os.path.abspath('.') (the CWD) is variant_dir if it exists, else it's the
28 # toplevel_dir (which contains the SConstruct).
29 # - env.Entry('.') is the entry representing the variant_dir.
30 # - env.Entry('#') is the entry representing the toplevel_dir.
31 # - str(entry) gives the path relative to variant_dir, or abspath if the entry
32 # is outside the variant_dir.
33 # - entry.path gives the path relative to toplevel_dir.
34 # - entry.abspath gives the absolute path.
35
36 import os
37
38 Import('env')
39
40 env = env.Clone(
41 OPEN_DIR = "gears",
42 PRIVATE_DIR = "gears_internal",
43 THIRD_PARTY_DIR = "third_party",
44 PRIVATE_THIRD_PARTY_DIR = "third_party_internal",
45 )
46
47 if not os.path.exists(env.Dir('#/$OPEN_DIR').abspath):
48 print 'Skipping Gears build: no perforce tree checked out.'
49 Return()
50
51 # Argument switches
52
53 # TODO: how do we detect linux vs osx?
54 os_guess = env['PLATFORM']
55 if os_guess == 'posix':
56 os_guess = 'linux'
57 elif os_guess == 'darwin':
58 os_guess = 'osx'
59
60 # Map of OS -> valid browser targets for that OS.
61 os_browsers_map = {
62 'win32': ['IE', 'FF2', 'FF3', 'NPAPI'],
63 'wince': ['IE'],
64 'linux': ['FF2', 'FF3'],
65 'osx': ['SF', 'FF2', 'FF3'],
66 'android': ['NPAPI'],
67 'symbian': ['NPAPI'],
68 }
69
70 vars = Variables(None, ARGUMENTS)
71 vars.AddVariables(
72 EnumVariable('OS',
73 'Which OS is the target', os_guess, os_browsers_map.keys()),
74 EnumVariable('MODE',
75 'Type of binary to generate', 'dbg', ['dbg', 'opt']),
76 BoolVariable('OFFICIAL_BUILD',
77 'Create a binary suitable for public release', 0),
78 BoolVariable('GEARS_STATIC_LIB',
79 'Create a static library for linking with Chrome', 0),
80 )
81 vars.Update(env)
82
83 env['VALID_BROWSERS'] = os_browsers_map[env['OS']]
84
85 # Add BROWSER last, since its valid inputs depend on $OS.
86 vars.Add(
87 EnumVariable('BROWSER',
88 'Which browser we want to build the plugin for. "all" builds all '
89 'browsers for this OS.',
90 'all', env['VALID_BROWSERS'] + ['all']))
91 vars.Update(env)
92
93 env.Replace(
94 USING_CCTESTS = (env['MODE'] == 'dbg' or not env['OFFICIAL_BUILD'])
95 )
96
97 # Version
98 env.Replace(
99 MAJOR = '0',
100 MINOR = '5',
101 BUILD = '7',
102 PATCH = '0',
103 VERSION = '${MAJOR}.${MINOR}.${BUILD}.${PATCH}',
104
105 FRIENDLY_NAME = 'Google Gears',
106 SHORT_NAME = 'gears',
107 )
108
109 # Platform
110 # TODO: Symbian builds will override this value.
111 # For other platforms we set just one value.
112 if env['OS'] in ['wince', 'android']:
113 env.Replace(ARCH = 'arm')
114 elif env['OS'] == 'osx':
115 # On OSX we build a fat binary.
116 env.Replace(ARCH = 'i386+ppc')
117 else:
118 env.Replace(ARCH = 'i386')
119
120 # Output dirs
121 env.Replace(
122 BASE_OUTDIR = '$GEARS_DIR/$OS-$ARCH-$MODE',
123 COMMON_OUTDIR = '$BASE_OUTDIR/common',
124 BROWSER_OUTDIR = '$BASE_OUTDIR/${BROWSER.lower()}',
125 IE_OUTDIR = '$BASE_OUTDIR/ie',
126 FF2_OUTDIR = '$BASE_OUTDIR/ff2',
127 FF3_OUTDIR = '$BASE_OUTDIR/ff3',
128 NPAPI_OUTDIR = '$BASE_OUTDIR/npapi',
129 SF_OUTDIR = '$BASE_OUTDIR/sf',
130
131 GENFILES_DIR = "$BROWSER_OUTDIR/genfiles",
132 COMMON_GENFILES_DIR = "$COMMON_OUTDIR/genfiles",
133
134 INSTALLER_OUTDIR = '$BASE_OUTDIR/installers',
135 )
136
137 # Outputs
138 env.Replace(
139 INSTALLER_BASENAME = 'gears-${OS}-${MODE}-${VERSION}',
140
141 FF_XPI = '$INSTALLER_OUTDIR/${INSTALLER_BASENAME}.xpi',
142 WIN32_INSTALLER_MSI = '$INSTALLER_OUTDIR/${INSTALLER_BASENAME}.msi',
143 WINCE_INSTALLER_CAB = '$INSTALLER_OUTDIR/${INSTALLER_BASENAME}.cab',
144 # Keyston SF Metapackage installer, bundled with Keystone as part of a
145 # DMG.
146 SF_KEYSTONE_INSTALLER_DMG = '$INSTALLER_OUTDIR/${INSTALLER_BASENAME}.dmg',
147 SF_KEYSTONE_INSTALLER_MPKG = '$INSTALLER_OUTDIR/Safari/${FRIENDLY_NAME}.mpkg ',
148
149 SF_INSTALLER_PLUGIN_BUNDLE = '$INSTALLER_OUTDIR/Safari/StatsPane.bundle',
150 SF_PLUGIN_BUNDLE = '$INSTALLER_OUTDIR/Safari/Gears.bundle',
151 SF_PLUGIN_PROXY_BUNDLE = '$INSTALLER_OUTDIR/Safari/Gears.plugin',
152 SF_INPUTMANAGER_BUNDLE = '$INSTALLER_OUTDIR/Safari/GearsEnabler',
153 SF_INSTALLER_PKG = '$INSTALLER_OUTDIR/Safari/Gears.pkg',
154 )
155
156 # Library flags
157 env.Replace(
158 MOZJS_INCLUDE_PATHS = [
159 '$MOZJS_DIR',
160 '$THIRD_PARTY_DIR/spidermonkey/nspr/pr/include',
161 '$THIRD_PARTY_DIR/spidermonkey/nspr/pr/include/private',
162 '$THIRD_PARTY_DIR/spidermonkey/nspr/pr/include/obsolete',
163 '$OSX_SDK_ROOT/Developer/Headers/FlatCarbon/',
164 ],
165 MOZJS_DIR = '$THIRD_PARTY_DIR/spidermonkey',
166 )
167
168 # Add our tools to the PATH.
169 if env['OS'] in ['win32', 'wince']:
170 if os.path.exists(env.Dir('#/$PRIVATE_THIRD_PARTY_DIR').abspath):
171 # Clear out our environment so we don't accidentally use the system's
172 # libs.
173 env['ENV']['PATH'] = ''
174 env['ENV']['LIB'] = ''
175 env['ENV']['INCLUDE'] = ''
176
177 paths = []
178
179 # Keep system32 for 'xcopy'.
180 paths += [env.subst('${ENV["SYSTEMROOT"]}/system32')]
181 if env['OS'] == 'win32':
182 env.Append(
183 VC80 = env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/vc_80/files').abspath)
184 paths += [
185 env.subst('$VC80/common7/ide'),
186 env.subst('$VC80/vc/bin'),
187 env.subst('$VC80/common7/tools'),
188 env.subst('$VC80/common7/tools/bin'),
189 env.subst('$VC80/team_tools/performance_tools'),
190 ]
191 else: # wince
192 env.Append(
193 VC80 = env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/vc_80ce/files').abspath)
194 paths += [
195 env.subst('$VC80/bin/x86_arm'),
196 env.subst('$VC80/common7/ide'),
197 env.subst('$VC80/common7/tools'),
198 env.subst('$VC80/common7/tools/bin'),
199 env.subst('$VC80/vc/bin'),
200 env.subst('$VC80/smartdevices/sdktools'),
201 ]
202
203 paths += [
204 env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/wix/v3_0_2925/files').abspath]
205
206 paths += [env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/gnu/files').abspath]
207 paths += [env.Dir('#/$PRIVATE_THIRD_PARTY_DIR/python_24').abspath]
208
209 # Prepend them so our tools come first.
210 for each in reversed(paths):
211 env.PrependENVPath('PATH', each)
212 else:
213 # If we don't have a private third_party dir, we expect the system
214 # environment to be set up correctly to point to tool paths.
215 env['ENV']['PATH'] = os.environ['PATH']
216 env['ENV']['LIB'] = os.environ['LIB']
217 env['ENV']['INCLUDE'] = os.environ['INCLUDE']
218
219 mtcom = 'echo Manifest creation disabled, since it breaks a lot.'
220 env['MANIFEST_COM'] = mtcom
221 env['SHMANIFEST_COM'] = mtcom
222
223 # Building M4 files
224 env.Tool('m4')
225
226 env.Append(
227 M4ARCH = (env['ARCH'] == 'i386' and 'x86' or '$ARCH'),
228 M4FLAGS = [
229 '--prefix-builtins',
230 '-DPRODUCT_VERSION=$VERSION',
231 '-DPRODUCT_VERSION_MAJOR=$MAJOR',
232 '-DPRODUCT_VERSION_MINOR=$MINOR',
233 '-DPRODUCT_VERSION_BUILD=$BUILD',
234 '-DPRODUCT_VERSION_PATCH=$PATCH',
235 '-DPRODUCT_OS=$OS',
236 '-DPRODUCT_ARCH="$M4ARCH"',
237 '-DPRODUCT_GCC_VERSION="gcc3"',
238 '-DPRODUCT_MAINTAINER="google"',
239 '-DPRODUCT_FRIENDLY_NAME_UQ="$FRIENDLY_NAME"',
240 '-DPRODUCT_SHORT_NAME_UQ="$SHORT_NAME"',
241 '-DI18N_LANGUAGES="(${",".join(I18N_LANGS)})"',
242 ],
243 M4PATH = [
244 '$OPEN_DIR',
245 '.',
246 ],
247 )
248
249 # SCons magic to make M4PATH work.
250 env.Replace(
251 M4INCPREFIX = '-I',
252 M4INCSUFFIX = '',
253 _M4INCFLAGS = ('${_concat(M4INCPREFIX, M4PATH, M4INCSUFFIX, '
254 '__env__, RDirs, TARGET, SOURCE)}'),
255 M4COM = '$M4 $M4FLAGS ${_M4INCFLAGS} $SOURCE > $TARGET',
256 )
257
258 # TODO: Dependency scanner for m4 files - doesn't work. It can't detect files
259 # that don't exist!
260 #m4_include_re = re.compile(r'm4_include\((.*)\)', re.M)
261 #def m4_scan(node, env, path):
262 # contents = node.get_contents()
263 # includes = m4_include_re.findall(contents)
264 # ret_includes = []
265 # for include in includes:
266 # for dir in path:
267 # file = os.path.join(dir, include)
268 # if os.path.exists(file):
269 # ret_includes.append(file)
270 # break
271 # return ret_includes
272 #
273 #m4_scanner = Scanner(function = m4_scan, skeys = ['.m4', '.html_m4'])
274 #env.Append(SCANNERS = m4_scanner)
275
276
277 # OS X Iceberg package builder
278
279 env.Replace(ICEBERG = '/usr/local/bin/freeze')
280 if env.WhereIs('$ICEBERG'):
281 env.Replace(ICEBERGCOM = '"$ICEBERG" -v $SOURCE')
282 else:
283 env.Replace(ICEBERGCOM =
284 'echo To create a Safari installer for Gears, you must install Iceberg'
285 ' from http://s.sudre.free.fr/Software/Iceberg.html. You can install'
286 ' the Safari version manually by running the'
287 ' $OPEN_DIR/tools/osx/install_gears.sh script.')
288
289 iceberg_builder = Builder(action = '$ICEBERGCOM',
290 suffix = '.pkg', src_suffix = '.packproj')
291 env.Append(BUILDERS = {'Iceberg': iceberg_builder})
292
293
294 # C++ build flags.
295
296 # Clear out the inherited defines from Chrome's build. I want to match Gears'
297 # current build as closely as possible until we switch everyone to SCons, then
298 # gradually integrate.
299 env.Replace(
300 CPPPATH = [
301 '$OPEN_DIR',
302 '$OPEN_DIR/..',
303 '$THIRD_PARTY_DIR',
304 '$THIRD_PARTY_DIR/googleurl',
305 '$THIRD_PARTY_DIR/npapi',
306 '$THIRD_PARTY_DIR/zlib',
307 '$THIRD_PARTY_DIR/v8/bindings_local',
308 '.',
309 '$COMMON_OUTDIR',
310 ],
311 CFLAGS = [],
312 CCFLAGS = [],
313 CXXFLAGS = [],
314 CCPDBFLAGS = [],
315 CPPDEFINES = [
316 # SpiderMonkey (the Firefox JS engine)'s JS_GET_CLASS macro in jsapi.h needs
317 # this defined to work with the gecko SDK that we've built.
318 # The definition of JS_THREADSAFE must be kept in sync with MOZJS_CPPFLAGS.
319 'JS_THREADSAFE'
320 ],
321 FRAMEWORKPATH = [],
322 FRAMEWORKS = [],
323 LIBS = [],
324 LIBPATH = ['$COMPONENT_LIBRARY_DIR'],
325 COMMON_LINKFLAGS = [], # for both executables and shared libs
326 LINKFLAGS = ['$COMMON_LINKFLAGS'], # for executables
327 SHLINKFLAGS = ['$COMMON_LINKFLAGS'], # for shared libs
328 COMPONENT_LIBRARY_DIR = '$COMMON_OUTDIR/lib',
329 )
330
331 if env['MODE'] == 'dbg':
332 env.Append(
333 CPPDEFINES = [
334 'DEBUG=1',
335 '_DEBUG=1',
336 ],
337 M4FLAGS = '-DDEBUG=1',
338 )
339 else:
340 env.Append(
341 CPPDEFINES = 'NDEBUG=1',
342 M4FLAGS = '-DNDEBUG=1',
343 )
344 if env['USING_CCTESTS']:
345 env.Append(
346 CPPDEFINES = 'USING_CCTESTS=1',
347 M4FLAGS = '-DUSING_CCTESTS=1',
348 )
349 if env['OFFICIAL_BUILD']:
350 env.Append(
351 CPPDEFINES = 'OFFICIAL_BUILD=1',
352 M4FLAGS = '-DOFFICIAL_BUILD=1',
353 )
354 if env['GEARS_STATIC_LIB']:
355 env.Append(
356 CPPDEFINES = 'GEARS_STATIC_LIB=1',
357 )
358
359 # TODO: if USING_LIBPNG
360 env.Append(
361 CPPDEFINES = [
362 'PNG_USER_CONFIG',
363 'CHROME_PNG_WRITE_SUPPORT',
364 ]
365 )
366 if not env['GEARS_STATIC_LIB']:
367 # If we're not linking with Chrome, don't prefix all the symbols with
368 # webkit_.
369 env.Append(CPPDEFINES = ['GEARS_PNG_BUILD'])
370
371
372 # TODO: if USING_ZLIB
373 env.Append(
374 CPPDEFINES = [
375 'NO_GZIP',
376 'NO_GZCOMPRESS',
377 ]
378 )
379 if env['OS'] == 'wince':
380 env.Append(CPPDEFINES = 'NO_ERRNO_H')
381
382 # Languages
383
384 env['I18N_LANGS'] = [
385 'en-US',
386 'ar',
387 'bg',
388 'ca',
389 'cs',
390 'da',
391 'de',
392 'el',
393 'en-GB',
394 'es',
395 'et',
396 'fa',
397 'fi',
398 'fil',
399 'fr',
400 'he',
401 'hi',
402 'hr',
403 'hu',
404 'id',
405 'is',
406 'it',
407 'ja',
408 'ko',
409 'lt',
410 'lv',
411 'ms',
412 'nl',
413 'no',
414 'pl',
415 'pt-BR',
416 'pt-PT',
417 'ro',
418 'ru',
419 'sk',
420 'sl',
421 'sr',
422 'sv',
423 'th',
424 'tr',
425 'uk',
426 'ur',
427 'vi',
428 'zh-CN',
429 'zh-TW',
430 'ml',
431 'te',
432 'gu',
433 'kn',
434 'or',
435 'bn',
436 'ta',
437 'mr',
438 ]
439
440 # Platform-specific flags follow.
441
442 if env['OS'] in ['win32', 'wince']:
443 env.Replace(ARFLAGS = [])
444 env.Append(
445 CPPDEFINES = [
446 'STRICT',
447 '_UNICODE',
448 'UNICODE',
449 '_USRDLL',
450 'WIN32',
451 '_WINDLL',
452 '_CRT_SECURE_NO_DEPRECATE',
453 'NOMINMAX',
454
455 # In VC8, the way to disable exceptions is to remove all /EH* flags, and to
456 # define _HAS_EXCEPTIONS=0 (for C++ headers) and _ATL_NO_EXCEPTIONS (for ATL).
457 '_HAS_EXCEPTIONS=0',
458 '_ATL_NO_EXCEPTIONS',
459 # Do not export UTF functions.
460 'U_STATIC_IMPLEMENTATION',
461 ],
462 # Static lib flags.
463 ARFLAGS = [
464 '/NOLOGO',
465 ],
466 # Shared lib and exe flags.
467 COMMON_LINKFLAGS = [
468 '/NOLOGO',
469 '/DEBUG',
470 '/RELEASE',
471 '/PDB:${TARGET.base}.pdb',
472 ],
473 SHLINKFLAGS = [
474 '/DLL',
475 # Set the preferred base address. This value was chosen because (a) it's near
476 # the top of the valid address range, and (b) it doesn't conflict with other
477 # DLLs loaded by Chrome in either the browser or plugin process.
478 '/BASE:0x65000000',
479 ],
480 CPPFLAGS = [
481 '/nologo',
482 '/c',
483 '/W3',
484 '/WX',
485 '/GR-',
486 '/Fd"${TARGET.base}.pdb"',
487 ],
488 CXXFLAGS = [
489 '/TP',
490 '/J',
491 ],
492 CPPPATH = [
493 '$VC80_CPPPATH',
494 '$THIRD_PARTY_DIR/breakpad/src',
495 ],
496 CCPDBFLAGS = [
497 '/Zi', # TODO: Chrome defines /Z7, no idea what these are.
498 ],
499 LIBPATH = [
500 '$VC80_LIBPATH',
501 ],
502 )
503 if env['OS'] == 'win32':
504 env.Append(
505 CPPDEFINES = [
506 # We require APPVER=5.0 for things like HWND_MESSAGE.
507 # When APPVER=5.0, win32.mak in the Platform SDK sets:
508 # C defines: WINVER=0x0500
509 # _WIN32_WINNT=0x0500
510 # _WIN32_IE=0x0500
511 # _RICHEDIT_VER=0x0010
512 # RC defines: WINVER=0x0500
513 # MIDL flags: /target NT50
514 # Note: _WIN32_WINDOWS was replaced by _WIN32_WINNT for post-Win95 builds.
515 # Note: XP_WIN is only used by Firefox headers
516 '_WINDOWS',
517 'WINVER=0x0500',
518 '_WIN32_WINNT=0x0500',
519 '_WIN32_IE=0x0500',
520 '_RICHEDIT_VER=0x0010',
521 '_MERGE_PROXYSTUB',
522 'BREAKPAD_AVOID_STREAMS',
523 'XP_WIN',
524 ],
525 ARFLAGS = [
526 '/MACHINE:X86',
527 ],
528 COMMON_LINKFLAGS = [
529 '/MACHINE:X86',
530 '/NODEFAULTLIB:msvcrt',
531 # Flags for security hardening (only available for win32, not wince).
532 '/DYNAMICBASE',
533 '/SAFESEH',
534 ],
535 SHLINKFLAGS = [
536 # We only use /SUBSYSTEM on DLLs. For EXEs we omit the flag, and
537 # the presence of main() or WinMain() determines the subsystem.
538 '/SUBSYSTEM:WINDOWS',
539 ],
540 VC80_CPPPATH = [
541 # TODO: switch over to Chrome's SDK.
542 # Note: these must come after $THIRD_PARTY_DIR/npapi because we want our own
543 # npapi.h to take precedence.
544 '$PRIVATE_THIRD_PARTY_DIR/atlmfc_vc80/files/include',
545 '$PRIVATE_THIRD_PARTY_DIR/platformsdk_vc80/files/include',
546 '$PRIVATE_THIRD_PARTY_DIR/vc_80/files/vc/include',
547 ],
548 VC80_LIBPATH = [
549 '$PRIVATE_THIRD_PARTY_DIR/atlmfc_vc80/files/lib',
550 '$PRIVATE_THIRD_PARTY_DIR/platformsdk_vc80/files/lib',
551 '$PRIVATE_THIRD_PARTY_DIR/vc_80/files/vc/lib',
552 ],
553 )
554 else: # OS=wince
555 env.Append(
556 CPPDEFINES = [
557 # For Windows Mobile we need:
558 # C defines: _WIN32_WCE=0x0501
559 # _UNDER_CE=0x0501
560 '_WIN32_WCE=0x501',
561 'WINVER=_WIN32_WCE',
562 'UNDER_CE=0x501',
563 'OS_WINCE',
564 'WIN32_PLATFORM_PSPC',
565 'ARM',
566 '_ARM_',
567 'POCKETPC2003_UI_MODEL',
568 '_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA',
569 '_CE_CRT_ALLOW_WIN_MINMAX',
570 ],
571 ARFLAGS = [
572 '/MACHINE:THUMB',
573 ],
574 COMMON_LINKFLAGS = [
575 '/MACHINE:THUMB',
576 '/NODEFAULTLIB:secchk.lib',
577 '/NODEFAULTLIB:oldnames.lib',
578 ],
579 SHLINKFLAGS = [
580 '/SUBSYSTEM:WINDOWSCE,5.01',
581 ],
582 VC80_CPPPATH = [
583 '$PRIVATE_THIRD_PARTY_DIR/atlmfc_vc80ce/files/include',
584 '$PRIVATE_THIRD_PARTY_DIR/vc_80ce/files/include',
585 # Visual Studio must be setup before the PocketPC SDK.
586 '$PRIVATE_THIRD_PARTY_DIR/pocketpc_sdk_ce_50/files/include/armv4i',
587 ],
588 VC80_LIBPATH = [
589 '$PRIVATE_THIRD_PARTY_DIR/atlmfc_vc80ce/files/lib/armv4i',
590 '$PRIVATE_THIRD_PARTY_DIR/vc_80ce/files/lib/armv4i',
591 '$PRIVATE_THIRD_PARTY_DIR/pocketpc_sdk_ce_50/files/lib/armv4i',
592 ],
593 )
594
595 if env['MODE'] == 'dbg':
596 env.Append(
597 CPPFLAGS = [
598 '/MTd',
599 ],
600 )
601 else: # MODE=opt
602 env.Append(
603 CPPFLAGS = [
604 '/MT',
605 '/O2',
606 ],
607 COMMON_LINKFLAGS = [
608 '/INCREMENTAL:NO',
609 '/OPT:REF',
610 '/OPT:ICF',
611 ],
612 )
613 if not env['GEARS_STATIC_LIB']:
614 # Build with 2-byte wchar_t's only if we're building a DLL. To link with
615 # Chrome, we need 4-byte wchar_t.
616 env.Append(
617 CPPFLAGS = [
618 '/Zc:wchar_t-',
619 ],
620 )
621
622 #--------------------------- LINUX ---------------------------
623 elif env['OS'] == 'linux':
624 env.Append(
625 CPPDEFINES = [
626 'LINUX',
627 ],
628 CPPPATH = [
629 '$THIRD_PARTY_DIR/gtk/include/gtk-2.0',
630 '$THIRD_PARTY_DIR/gtk/include/atk-1.0',
631 '$THIRD_PARTY_DIR/gtk/include/glib-2.0',
632 '$THIRD_PARTY_DIR/gtk/include/pango-1.0',
633 '$THIRD_PARTY_DIR/gtk/include/cairo',
634 '$THIRD_PARTY_DIR/gtk/lib/gtk-2.0/include',
635 '$THIRD_PARTY_DIR/gtk/lib/glib-2.0/include',
636 ],
637 CCFLAGS = [
638 '-fPIC',
639 '-fmessage-length=0',
640 '-Wall',
641 '-Werror',
642 # NS_LITERAL_STRING does not work properly without this compiler option
643 '-fshort-wchar',
644 # Additions to compile on hardy
645 '-Wno-unused-variable',
646 '-Wno-missing-braces',
647 '-Wno-address',
648 '-m32',
649 ],
650 CXXFLAGS = [
651 '-fno-exceptions',
652 '-fno-rtti',
653 '-Wno-non-virtual-dtor',
654 '-Wno-ctor-dtor-privacy',
655 '-funsigned-char',
656 '-Wno-char-subscripts',
657 ],
658 COMMON_LINKFLAGS = [
659 '-fPIC',
660 '-Bsymbolic',
661 '-pthread',
662 ],
663 SHLINKFLAGS = [
664 '-shared',
665 '-Wl,--version-script',
666 '-Wl,$OPEN_DIR/tools/xpcom-ld-script',
667 # Additions to compile on hardy
668 '-m32',
669 ],
670 )
671 if env['MODE'] == 'dbg':
672 env.Append(
673 CPPFLAGS = [
674 '-g',
675 '-O0',
676 ],
677 )
678 else: # MODE=opt
679 env.Append(
680 CPPFLAGS = [
681 '-O2',
682 ],
683 )
684 #--------------------------- OSX ---------------------------
685 elif env['OS'] == 'osx':
686 # Gears uses the 10.4 SDK, so we need to build with g++-4.0.
687 # Chrome uses g++-4.2 so we override this here.
688 env['CC'] = 'gcc-4.0'
689 env['CXX'] = 'g++-4.0'
690 # Compile assembly files with the same command line as C files.
691 env['ASCOM'] = '$CCCOM'
692
693 env.Append(OSX_SDK_ROOT = '/Developer/SDKs/MacOSX10.4u.sdk')
694
695 env.Append(
696 CPPDEFINES = [
697 'OSX',
698 'OS_MACOSX',
699 # for breakpad
700 'USE_PROTECTED_ALLOCATIONS=1',
701 ],
702 CPPPATH = [
703 # Breakpad assumes it is in the include path
704 '$THIRD_PARTY_DIR/breakpad_osx/src',
705 ],
706 CCFLAGS = [
707 '-mmacosx-version-min=10.4',
708 ('-arch', 'ppc'),
709 ('-arch', 'i386'),
710 '-fPIC',
711 '-fmessage-length=0',
712 # TODO
713 # '-Wall',
714 # NS_LITERAL_STRING does not work properly without this compiler option
715 '-fshort-wchar',
716 '-fvisibility=hidden',
717 # Breakpad on OSX needs debug symbols to use the STABS format, rather than the
718 # default DWARF debug symbols format. Note that we enable gstabs for debug &
719 # opt; we strip them later in opt.
720 '-gstabs+',
721 ],
722 CXXFLAGS = [
723 '-fvisibility-inlines-hidden',
724 '-fno-exceptions',
725 '-fno-rtti',
726 ('-Wall',
727 '-Wno-non-virtual-dtor',
728 '-Wno-ctor-dtor-privacy',
729 '-Wno-char-subscripts',
730 # When a function is deprecated in gcc, it stupidly warns about all functions
731 # and member functions that have the same name, regardless of signature.
732 # Example: Standard osx headers deprecate 'SetPort', which causes a warning for
733 # url_canon::Replacements::SetPort().
734 '-Wno-deprecated-declarations',
735 ),
736 '-funsigned-char',
737 ('-include', env.File('#/$OPEN_DIR/base/safari/prefix_header.h').abspa th),
738 ('-isysroot', '$OSX_SDK_ROOT')
739 ],
740 COMMON_LINKFLAGS = [
741 '-mmacosx-version-min=10.4',
742 '-fPIC',
743 '-Bsymbolic',
744 ('-arch', 'ppc'),
745 ('-arch', 'i386'),
746 ('-isysroot', '$OSX_SDK_ROOT'),
747 '-Wl,-dead_strip',
748 ],
749 SHLINKFLAGS = [
750 '-bundle', # DLLFLAGS
751 ],
752 FRAMEWORKS = [
753 'Carbon',
754 'CoreServices',
755 'Cocoa',
756 'WebKit',
757 ],
758 M4FLAGS = [
759 '-DGEARS_ENABLER_PATH="$SF_INPUTMANAGER_BUNDLE"',
760 '-DGEARS_PLUGIN_PATH="$SF_PLUGIN_PROXY_BUNDLE"',
761 '-DGEARS_INSTALLER_OUT_DIR="$INSTALLER_OUTDIR/Safari"',
762
763 # Keystone
764 '-DKEYSTONE_BASE_DIR="$MAIN_DIR/$PRIVATE_THIRD_PARTY_DIR/googlemac/Rel eases/Keystone/"',
765 '-DGEARS_INSTALLER_PACKAGE="$SF_INSTALLER_PKG"',
766 '-DGEARS_GENFILES_DIR="$SF_OUTDIR/genfiles"',
767 '-DGEARS_TOOLS_DIR="$MAIN_DIR/$PRIVATE_DIR/tools"',
768 ],
769 )
770 if env['MODE'] == 'dbg':
771 env.Append(
772 CPPFLAGS = [
773 '-g',
774 '-O0',
775 ],
776 )
777 else: # MODE=opt
778 env.Append(
779 CPPFLAGS = [
780 '-O2',
781 ],
782 )
783 #--------------------------- ANDROID ---------------------------
784 elif env['OS'] == 'android':
785 if not os.environ['ANDROID_BUILD_TOP']:
786 print ("Please set ANDROID_BUILD_TOP to the top"
787 " level of your Android source.")
788 Return()
789
790 if not os.environ['ANDROID_TOOLCHAIN']:
791 print ("Cannot determine location of the target toolchain."
792 " Please set ANDROID_TOOLCHAIN manually.")
793 Return()
794
795 env['ANDROID_BUILD_TOP'] = os.environ['ANDROID_BUILD_TOP']
796
797 # Figure out the cross-compile prefix by finding the *-gcc executable
798 # and taking the '*' as the prefix for the rest.
799 cross_prefix_command = os.popen(
800 r"ls %s/*-gcc | sed 's|\(.*/.*\-\)gcc|\1|g'" %
801 os.environ['ANDROID_TOOLCHAIN'])
802 cross_prefix = cross_prefix_command.read().strip()
803 if cross_prefix_command.close() != None:
804 Return()
805
806 # Find the output directory. Assume the only target output directory.
807 product_out_command = os.popen("ls %s/out/target/product/*" %
808 os.environ['ANDROID_BUILD_TOP'])
809 product_out = product_out_command.read().strip()
810 if product_out_command.close() != None:
811 Return()
812
813 env['CC'] = cross_prefix + 'gcc'
814 env['CXX'] = cross_prefix + 'g++'
815
816 env.Append(
817 CPPPATH = [
818 '$OPEN_DIR/base/android',
819 '$THIRD_PARTY_DIR/stlport/stlport',
820 '$THIRD_PARTY_DIR/stlport/stlport/stl',
821 '$THIRD_PARTY_DIR/stlport/stlport/stl/config',
822 '$THIRD_PARTY_DIR/spidermonkey/nspr/pr/include',
823 '$ANDROID_BUILD_TOP/include',
824 '$ANDROID_BUILD_TOP/include/nativehelper',
825 '$ANDROID_BUILD_TOP/system',
826 '$ANDROID_BUILD_TOP/system/bionic/include',
827 '$ANDROID_BUILD_TOP/system/bionic/arch-arm/include',
828 '$ANDROID_BUILD_TOP/system/kernel_headers',
829 '$ANDROID_BUILD_TOP/system/bionic/kernel/arch-arm',
830 '$ANDROID_BUILD_TOP/system/bionic/kernel/common',
831 '$ANDROID_BUILD_TOP/system/libm/include ',
832 '$ANDROID_BUILD_TOP/bionic',
833 '$ANDROID_BUILD_TOP/bionic/libc/include',
834 '$ANDROID_BUILD_TOP/bionic/libc/arch-arm',
835 '$ANDROID_BUILD_TOP/bionic/libc/arch-arm/include',
836 '$ANDROID_BUILD_TOP/bionic/libc/kernel/arch-arm',
837 '$ANDROID_BUILD_TOP/bionic/libc/kernel/common',
838 '$ANDROID_BUILD_TOP/bionic/libm/include',
839 '$ANDROID_BUILD_TOP/dalvik/libnativehelper/include',
840 '$ANDROID_BUILD_TOP/extlibs',
841 '$ANDROID_BUILD_TOP/extlibs/icu4c-3.8/common',
842 '$ANDROID_BUILD_TOP/extlibs/icu4c-3.8/i18n',
843 '$ANDROID_BUILD_TOP/extlibs/jpeg-6b',
844 '$ANDROID_BUILD_TOP/extlibs/sqlite',
845 '$ANDROID_BUILD_TOP/extlibs/zlib-1.2.3',
846 '$ANDROID_BUILD_TOP/external',
847 '$ANDROID_BUILD_TOP/external/icu4c/common',
848 '$ANDROID_BUILD_TOP/external/icu4c/i18n',
849 '$ANDROID_BUILD_TOP/external/jpeg',
850 '$ANDROID_BUILD_TOP/external/sqlite/dist',
851 '$ANDROID_BUILD_TOP/external/zlib',
852 '$ANDROID_BUILD_TOP/frameworks/base/include',
853 '$ANDROID_BUILD_TOP/system/core/include',
854 ],
855 CPPFLAGS = [
856 '-g',
857 '-c',
858 '-fPIC',
859 '-fmessage-length=0',
860 '-Wall',
861 '-fvisibility=hidden',
862 # NS_LITERAL_STRING does not work properly without this compiler option
863 '-fshort-wchar',
864 '-funsigned-char',
865 '-march=armv5te',
866 '-mtune=xscale',
867 '-mthumb-interwork',
868 '-ffunction-sections',
869 '-fdata-sections',
870 '-fno-exceptions',
871 ],
872 CXXFLAGS = [
873 '-fno-rtti',
874 '-fvisibility-inlines-hidden',
875 '-Wno-non-virtual-dtor',
876 '-Wno-ctor-dtor-privacy',
877 ],
878 CPPDEFINES = [
879 'OS_ANDROID',
880 'ANDROID',
881 'TARGET_OS=android',
882 'BUILD_OSNAME=android',
883 'OSNAME=android',
884 'COMPILER_NAME=gcc',
885 '__SGI_STL_INTERNAL_PAIR_H',
886 '_CPP_UTILITY',
887 '_LITTLE_ENDIAN=1234',
888 '_BIG_ENDIAN=4321',
889 '_PDP_ENDIAN=3412',
890 '_BYTE_ORDER=_LITTLE_ENDIAN',
891 ],
892 COMMON_LINKFLAGS = [
893 '-g',
894 '-fPIC',
895 '-Bsymbolic',
896 '-nostdlib',
897 ],
898 SHLINKFLAGS = [
899 '-shared',
900 '-Wl,--gc-sections',
901 '-L$ANDROID_PRODUCT_OUT/system/lib',
902 # Workaround for the Android C library not implementing
903 # __aeabi_atexit, which is used to destruct static C++ objects. This
904 # causes all calls to be rewritten by the linker to
905 # __wrap___aeabi_atexit, which we then implement.
906 '-Wl,--wrap,__aeabi_atexit',
907 ],
908 )
909 if env['MODE'] == 'dbg':
910 env.Append(
911 CPPFLAGS = [
912 '-g',
913 '-O',
914 '-funwind-tables',
915 '-mapcs-frame',
916 ],
917 )
918 else: # MODE=opt
919 env.Append(
920 CPPFLAGS = [
921 '-O2',
922 '-mthumb',
923 '-fomit-frame-pointer',
924 ],
925 )
926
927 # Custom builder to work around a scons and/or hammer bug. ComponentLibrary
928 # tries to install the library to COMPONENT_LIBRARY_DIR, but since we overrode
929 # that value, scons gets confused. I'm not sure who is at fault here.
930 # See http://code.google.com/p/chromium/issues/detail?id=4177.
931 def GearsStaticLibrary(env, *args, **kw):
932 lib = env.ChromeLibrary(*args, **kw)
933 env.Install('$COMPONENT_LIBRARY_DIR', lib[0])
934 return lib
935 env.AddMethod(GearsStaticLibrary)
936
937 # Load all the components
938
939 sconscripts = [
940 'SConscript.googleurl',
941 'SConscript.libjpeg',
942 'SConscript.libpng',
943 'SConscript.libmozjs',
944 'SConscript.sqlite',
945 'SConscript.zlib',
946 'SConscript.libbreakpad_osx',
947 'SConscript.libgd',
948 ]
949
950 for each in sconscripts:
951 env.SConscript(each,
952 exports=['env'],
953 variant_dir='$COMMON_OUTDIR',
954 duplicate=0)
955
956 # Order of execution is important here. Each sub-script adds to the
957 # environment, for use by later scripts.
958 env = env.SConscript('SConscript.inputs', exports=['env'])
959
960 outputs = env.SConscript('SConscript.common',
961 exports=['env'],
962 variant_dir='$COMMON_OUTDIR',
963 duplicate=0)
964 env.Append(**outputs)
965
966 browsers = [env['BROWSER']]
967 if browsers[0] == 'all':
968 browsers = env['VALID_BROWSERS']
969 print 'Building:', browsers
970
971 # We run the browser script once for each browser target we want to build.
972 # Each script adds variables to the environment in the form of
973 # '${BROWSER}_foo = bar' for use by the installers script.
974 for each in browsers:
975 env.Replace(BROWSER = each)
976 outputs = env.SConscript('SConscript.browser',
977 exports=['env'],
978 variant_dir='$BROWSER_OUTDIR',
979 duplicate=0)
980 browser_outputs = {}
981 for key, value in outputs.iteritems():
982 browser_outputs[each + '_' + key] = value
983 env.Append(**browser_outputs)
984
985 # Note: even though the installers write to $INSTALLER_OUTDIR, they need to
986 # read files from other dirs, so we give them a variant_dir at the toplevel.
987 env.SConscript('SConscript.installers',
988 exports=['env'],
989 variant_dir='$BASE_OUTDIR',
990 duplicate=0)
991
992 env.Alias('gears-installers', 'gears')
OLDNEW
« no previous file with comments | « gears/README.chromium ('k') | gears/SConscript.browser » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698