| OLD | NEW |
| 1 # Copyright 2008 the V8 project authors. All rights reserved. | 1 # Copyright 2008 the V8 project authors. All rights reserved. |
| 2 # Redistribution and use in source and binary forms, with or without | 2 # Redistribution and use in source and binary forms, with or without |
| 3 # modification, are permitted provided that the following conditions are | 3 # modification, are permitted provided that the following conditions are |
| 4 # met: | 4 # met: |
| 5 # | 5 # |
| 6 # * Redistributions of source code must retain the above copyright | 6 # * Redistributions of source code must retain the above copyright |
| 7 # notice, this list of conditions and the following disclaimer. | 7 # notice, this list of conditions and the following disclaimer. |
| 8 # * Redistributions in binary form must reproduce the above | 8 # * Redistributions in binary form must reproduce the above |
| 9 # copyright notice, this list of conditions and the following | 9 # copyright notice, this list of conditions and the following |
| 10 # disclaimer in the documentation and/or other materials provided | 10 # disclaimer in the documentation and/or other materials provided |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 'arch:arm': { | 190 'arch:arm': { |
| 191 'CPPDEFINES': ['ARM'] | 191 'CPPDEFINES': ['ARM'] |
| 192 }, | 192 }, |
| 193 'arch:android': { | 193 'arch:android': { |
| 194 'CPPDEFINES': ['ARM'] | 194 'CPPDEFINES': ['ARM'] |
| 195 }, | 195 }, |
| 196 'os:win32': { | 196 'os:win32': { |
| 197 'WARNINGFLAGS': ['-pedantic', '-Wno-long-long'] | 197 'WARNINGFLAGS': ['-pedantic', '-Wno-long-long'] |
| 198 }, | 198 }, |
| 199 'os:linux': { | 199 'os:linux': { |
| 200 'WARNINGFLAGS': ['-pedantic'] | 200 'WARNINGFLAGS': ['-pedantic'], |
| 201 'library:shared': { |
| 202 'soname:on': { |
| 203 'LINKFLAGS': ['-Wl,-soname,${SONAME}'] |
| 204 } |
| 205 } |
| 201 }, | 206 }, |
| 202 'os:macos': { | 207 'os:macos': { |
| 203 'WARNINGFLAGS': ['-pedantic'] | 208 'WARNINGFLAGS': ['-pedantic'] |
| 204 }, | 209 }, |
| 205 'disassembler:on': { | 210 'disassembler:on': { |
| 206 'CPPDEFINES': ['ENABLE_DISASSEMBLER'] | 211 'CPPDEFINES': ['ENABLE_DISASSEMBLER'] |
| 207 } | 212 } |
| 208 }, | 213 }, |
| 209 'msvc': { | 214 'msvc': { |
| 210 'all': { | 215 'all': { |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 'prof': { | 491 'prof': { |
| 487 'values': ['on', 'off', 'oprofile'], | 492 'values': ['on', 'off', 'oprofile'], |
| 488 'default': 'off', | 493 'default': 'off', |
| 489 'help': 'enable profiling of build target' | 494 'help': 'enable profiling of build target' |
| 490 }, | 495 }, |
| 491 'library': { | 496 'library': { |
| 492 'values': ['static', 'shared'], | 497 'values': ['static', 'shared'], |
| 493 'default': 'static', | 498 'default': 'static', |
| 494 'help': 'the type of library to produce' | 499 'help': 'the type of library to produce' |
| 495 }, | 500 }, |
| 501 'soname': { |
| 502 'values': ['on', 'off'], |
| 503 'default': 'off', |
| 504 'help': 'turn on setting soname for Linux shared library' |
| 505 }, |
| 496 'msvcrt': { | 506 'msvcrt': { |
| 497 'values': ['static', 'shared'], | 507 'values': ['static', 'shared'], |
| 498 'default': 'static', | 508 'default': 'static', |
| 499 'help': 'the type of Microsoft Visual C++ runtime library to use' | 509 'help': 'the type of Microsoft Visual C++ runtime library to use' |
| 500 }, | 510 }, |
| 501 'msvcltcg': { | 511 'msvcltcg': { |
| 502 'values': ['on', 'off'], | 512 'values': ['on', 'off'], |
| 503 'default': 'on', | 513 'default': 'on', |
| 504 'help': 'use Microsoft Visual C++ link-time code generation' | 514 'help': 'use Microsoft Visual C++ link-time code generation' |
| 505 }, | 515 }, |
| (...skipping 30 matching lines...) Expand all Loading... |
| 536 result.Add('mode', 'compilation mode (debug, release)', 'release') | 546 result.Add('mode', 'compilation mode (debug, release)', 'release') |
| 537 result.Add('sample', 'build sample (shell, process)', '') | 547 result.Add('sample', 'build sample (shell, process)', '') |
| 538 result.Add('env', 'override environment settings (NAME0:value0,NAME1:value1,..
.)', '') | 548 result.Add('env', 'override environment settings (NAME0:value0,NAME1:value1,..
.)', '') |
| 539 result.Add('importenv', 'import environment settings (NAME0,NAME1,...)', '') | 549 result.Add('importenv', 'import environment settings (NAME0,NAME1,...)', '') |
| 540 for (name, option) in SIMPLE_OPTIONS.iteritems(): | 550 for (name, option) in SIMPLE_OPTIONS.iteritems(): |
| 541 help = '%s (%s)' % (name, ", ".join(option['values'])) | 551 help = '%s (%s)' % (name, ", ".join(option['values'])) |
| 542 result.Add(name, help, option.get('default')) | 552 result.Add(name, help, option.get('default')) |
| 543 return result | 553 return result |
| 544 | 554 |
| 545 | 555 |
| 556 def GetVersionComponents(): |
| 557 MAJOR_VERSION_PATTERN = re.compile(r"#define\s+MAJOR_VERSION\s+(.*)") |
| 558 MINOR_VERSION_PATTERN = re.compile(r"#define\s+MINOR_VERSION\s+(.*)") |
| 559 BUILD_NUMBER_PATTERN = re.compile(r"#define\s+BUILD_NUMBER\s+(.*)") |
| 560 PATCH_LEVEL_PATTERN = re.compile(r"#define\s+PATCH_LEVEL\s+(.*)") |
| 561 |
| 562 patterns = [MAJOR_VERSION_PATTERN, |
| 563 MINOR_VERSION_PATTERN, |
| 564 BUILD_NUMBER_PATTERN, |
| 565 PATCH_LEVEL_PATTERN] |
| 566 |
| 567 source = open(join('src', 'version.cc')).read() |
| 568 version_components = [] |
| 569 for pattern in patterns: |
| 570 match = pattern.search(source) |
| 571 if match: |
| 572 version_components.append(match.group(1).strip()) |
| 573 else: |
| 574 version_components.append('0') |
| 575 |
| 576 return version_components |
| 577 |
| 578 |
| 579 def GetVersion(): |
| 580 version_components = GetVersionComponents() |
| 581 |
| 582 if version_components[len(version_components) - 1] == '0': |
| 583 version_components.pop() |
| 584 return '.'.join(version_components) |
| 585 |
| 586 |
| 587 def GetSpecificSONAME(): |
| 588 SONAME_PATTERN = re.compile(r"#define\s+SONAME\s+\"(.*)\"") |
| 589 |
| 590 source = open(join('src', 'version.cc')).read() |
| 591 match = SONAME_PATTERN.search(source) |
| 592 |
| 593 if match: |
| 594 return match.group(1).strip() |
| 595 else: |
| 596 return '' |
| 597 |
| 598 |
| 546 def SplitList(str): | 599 def SplitList(str): |
| 547 return [ s for s in str.split(",") if len(s) > 0 ] | 600 return [ s for s in str.split(",") if len(s) > 0 ] |
| 548 | 601 |
| 549 | 602 |
| 550 def IsLegal(env, option, values): | 603 def IsLegal(env, option, values): |
| 551 str = env[option] | 604 str = env[option] |
| 552 for s in SplitList(str): | 605 for s in SplitList(str): |
| 553 if not s in values: | 606 if not s in values: |
| 554 Abort("Illegal value for option %s '%s'." % (option, s)) | 607 Abort("Illegal value for option %s '%s'." % (option, s)) |
| 555 return False | 608 return False |
| 556 return True | 609 return True |
| 557 | 610 |
| 558 | 611 |
| 559 def VerifyOptions(env): | 612 def VerifyOptions(env): |
| 560 if not IsLegal(env, 'mode', ['debug', 'release']): | 613 if not IsLegal(env, 'mode', ['debug', 'release']): |
| 561 return False | 614 return False |
| 562 if not IsLegal(env, 'sample', ["shell", "process"]): | 615 if not IsLegal(env, 'sample', ["shell", "process"]): |
| 563 return False | 616 return False |
| 564 if env['os'] == 'win32' and env['library'] == 'shared' and env['prof'] == 'on'
: | 617 if env['os'] == 'win32' and env['library'] == 'shared' and env['prof'] == 'on'
: |
| 565 Abort("Profiling on windows only supported for static library.") | 618 Abort("Profiling on windows only supported for static library.") |
| 566 if env['prof'] == 'oprofile' and env['os'] != 'linux': | 619 if env['prof'] == 'oprofile' and env['os'] != 'linux': |
| 567 Abort("OProfile is only supported on Linux.") | 620 Abort("OProfile is only supported on Linux.") |
| 621 if env['os'] == 'win32' and env['soname'] == 'on': |
| 622 Abort("Shared Object soname not applicable for Windows.") |
| 623 if env['soname'] == 'on' and env['library'] == 'static': |
| 624 Abort("Shared Object soname not applicable for static library.") |
| 568 for (name, option) in SIMPLE_OPTIONS.iteritems(): | 625 for (name, option) in SIMPLE_OPTIONS.iteritems(): |
| 569 if (not option.get('default')) and (name not in ARGUMENTS): | 626 if (not option.get('default')) and (name not in ARGUMENTS): |
| 570 message = ("A value for option %s must be specified (%s)." % | 627 message = ("A value for option %s must be specified (%s)." % |
| 571 (name, ", ".join(option['values']))) | 628 (name, ", ".join(option['values']))) |
| 572 Abort(message) | 629 Abort(message) |
| 573 if not env[name] in option['values']: | 630 if not env[name] in option['values']: |
| 574 message = ("Unknown %s value '%s'. Possible values are (%s)." % | 631 message = ("Unknown %s value '%s'. Possible values are (%s)." % |
| 575 (name, env[name], ", ".join(option['values']))) | 632 (name, env[name], ", ".join(option['values']))) |
| 576 Abort(message) | 633 Abort(message) |
| 577 | 634 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 688 | 745 |
| 689 context.flags = { | 746 context.flags = { |
| 690 'v8': v8_flags, | 747 'v8': v8_flags, |
| 691 'mksnapshot': mksnapshot_flags, | 748 'mksnapshot': mksnapshot_flags, |
| 692 'dtoa': dtoa_flags, | 749 'dtoa': dtoa_flags, |
| 693 'cctest': cctest_flags, | 750 'cctest': cctest_flags, |
| 694 'sample': sample_flags, | 751 'sample': sample_flags, |
| 695 'd8': d8_flags | 752 'd8': d8_flags |
| 696 } | 753 } |
| 697 | 754 |
| 755 # Generate library base name. |
| 698 target_id = mode | 756 target_id = mode |
| 699 suffix = SUFFIXES[target_id] | 757 suffix = SUFFIXES[target_id] |
| 700 library_name = 'v8' + suffix | 758 library_name = 'v8' + suffix |
| 759 version = GetVersion() |
| 760 if context.options['soname'] == 'on': |
| 761 # When building shared object with SONAME version the library name. |
| 762 library_name += '-' + version |
| 701 env['LIBRARY'] = library_name | 763 env['LIBRARY'] = library_name |
| 702 | 764 |
| 765 # Generate library SONAME if required by the build. |
| 766 if context.options['soname'] == 'on': |
| 767 soname = GetSpecificSONAME() |
| 768 if soname == '': |
| 769 soname = 'lib' + library_name + '.so' |
| 770 env['SONAME'] = soname |
| 771 |
| 703 # Build the object files by invoking SCons recursively. | 772 # Build the object files by invoking SCons recursively. |
| 704 (object_files, shell_files, mksnapshot) = env.SConscript( | 773 (object_files, shell_files, mksnapshot) = env.SConscript( |
| 705 join('src', 'SConscript'), | 774 join('src', 'SConscript'), |
| 706 build_dir=join('obj', target_id), | 775 build_dir=join('obj', target_id), |
| 707 exports='context', | 776 exports='context', |
| 708 duplicate=False | 777 duplicate=False |
| 709 ) | 778 ) |
| 710 | 779 |
| 711 context.mksnapshot_targets.append(mksnapshot) | 780 context.mksnapshot_targets.append(mksnapshot) |
| 712 | 781 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 794 # version of scons. Also, there's a bug in some revisions that | 863 # version of scons. Also, there's a bug in some revisions that |
| 795 # doesn't allow this flag to be set, so we swallow any exceptions. | 864 # doesn't allow this flag to be set, so we swallow any exceptions. |
| 796 # Lovely. | 865 # Lovely. |
| 797 try: | 866 try: |
| 798 SetOption('warn', 'no-deprecated') | 867 SetOption('warn', 'no-deprecated') |
| 799 except: | 868 except: |
| 800 pass | 869 pass |
| 801 | 870 |
| 802 | 871 |
| 803 Build() | 872 Build() |
| OLD | NEW |