| OLD | NEW |
| 1 #! -*- python -*- | 1 #! -*- python -*- |
| 2 # Copyright (c) 2012 The Native Client Authors. All rights reserved. | 2 # Copyright (c) 2012 The Native Client Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import atexit | 6 import atexit |
| 7 import glob | 7 import glob |
| 8 import os | 8 import os |
| 9 import platform | 9 import platform |
| 10 import shutil | 10 import shutil |
| (...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 871 #. | 871 #. |
| 872 # We have "build" and "target" platforms for the non nacl environments | 872 # We have "build" and "target" platforms for the non nacl environments |
| 873 # which govern service runtime, validator, etc. | 873 # which govern service runtime, validator, etc. |
| 874 # | 874 # |
| 875 # "build" means the platform the code is running on | 875 # "build" means the platform the code is running on |
| 876 # "target" means the platform the validator is checking for. | 876 # "target" means the platform the validator is checking for. |
| 877 # Typically they are the same but testing it useful to have flexibility. | 877 # Typically they are the same but testing it useful to have flexibility. |
| 878 # | 878 # |
| 879 # Various variables in the scons environment are related to this, e.g. | 879 # Various variables in the scons environment are related to this, e.g. |
| 880 # | 880 # |
| 881 # BUILD_ARCH: (arm, x86) | 881 # BUILD_ARCH: (arm, mips, x86) |
| 882 # BUILD_SUBARCH: (32, 64) | 882 # BUILD_SUBARCH: (32, 64) |
| 883 # | 883 # |
| 884 # The settings can be controlled using scons command line variables: | 884 # The settings can be controlled using scons command line variables: |
| 885 # | 885 # |
| 886 # | 886 # |
| 887 # buildplatform=: controls the build platform | 887 # buildplatform=: controls the build platform |
| 888 # targetplatform=: controls the target platform | 888 # targetplatform=: controls the target platform |
| 889 # platform=: controls both | 889 # platform=: controls both |
| 890 # | 890 # |
| 891 # This dictionary is used to translate from a platform name to a | 891 # This dictionary is used to translate from a platform name to a |
| 892 # (arch, subarch) pair | 892 # (arch, subarch) pair |
| 893 AVAILABLE_PLATFORMS = { | 893 AVAILABLE_PLATFORMS = { |
| 894 'x86-32' : { 'arch' : 'x86' , 'subarch' : '32' }, | 894 'x86-32' : { 'arch' : 'x86' , 'subarch' : '32' }, |
| 895 'x86-64' : { 'arch' : 'x86' , 'subarch' : '64' }, | 895 'x86-64' : { 'arch' : 'x86' , 'subarch' : '64' }, |
| 896 'mips32' : { 'arch' : 'mips', 'subarch' : '32' }, |
| 896 'arm' : { 'arch' : 'arm' , 'subarch' : '32' }, | 897 'arm' : { 'arch' : 'arm' , 'subarch' : '32' }, |
| 897 'arm-thumb2' : { 'arch' : 'arm' , 'subarch' : '32' } | 898 'arm-thumb2' : { 'arch' : 'arm' , 'subarch' : '32' } |
| 898 } | 899 } |
| 899 | 900 |
| 900 # Look up the platform name from the command line arguments, | 901 # Look up the platform name from the command line arguments, |
| 901 # defaulting to 'platform' if needed. | 902 # defaulting to 'platform' if needed. |
| 902 def GetPlatform(name): | 903 def GetPlatform(name): |
| 903 platform = ARGUMENTS.get(name) | 904 platform = ARGUMENTS.get(name) |
| 904 if platform is None: | 905 if platform is None: |
| 905 return ARGUMENTS.get('platform', 'x86-32') | 906 return ARGUMENTS.get('platform', 'x86-32') |
| 906 elif ARGUMENTS.get('platform') is None: | 907 elif ARGUMENTS.get('platform') is None: |
| 907 return platform | 908 return platform |
| 908 else: | 909 else: |
| 909 raise Exception('Can\'t specify both %s and %s on the command line' | 910 raise Exception('Can\'t specify both %s and %s on the command line' |
| 910 % ('platform', name)) | 911 % ('platform', name)) |
| 911 | 912 |
| 912 | 913 |
| 913 # Decode platform into list [ ARCHITECTURE , EXEC_MODE ]. | 914 # Decode platform into list [ ARCHITECTURE , EXEC_MODE ]. |
| 914 def DecodePlatform(platform): | 915 def DecodePlatform(platform): |
| 915 if platform in AVAILABLE_PLATFORMS: | 916 if platform in AVAILABLE_PLATFORMS: |
| 916 return AVAILABLE_PLATFORMS[platform] | 917 return AVAILABLE_PLATFORMS[platform] |
| 917 raise Exception('Unrecognized platform: %s' % platform) | 918 raise Exception('Unrecognized platform: %s' % platform) |
| 918 | 919 |
| 919 | 920 |
| 920 DeclareBit('build_x86_32', 'Building binaries for the x86-32 architecture', | 921 DeclareBit('build_x86_32', 'Building binaries for the x86-32 architecture', |
| 921 exclusive_groups='build_arch') | 922 exclusive_groups='build_arch') |
| 922 DeclareBit('build_x86_64', 'Building binaries for the x86-64 architecture', | 923 DeclareBit('build_x86_64', 'Building binaries for the x86-64 architecture', |
| 923 exclusive_groups='build_arch') | 924 exclusive_groups='build_arch') |
| 925 DeclareBit('build_mips32', 'Building binaries for the MIPS architecture', |
| 926 exclusive_groups='build_arch') |
| 924 DeclareBit('build_arm_arm', 'Building binaries for the ARM architecture', | 927 DeclareBit('build_arm_arm', 'Building binaries for the ARM architecture', |
| 925 exclusive_groups='build_arch') | 928 exclusive_groups='build_arch') |
| 926 DeclareBit('build_arm_thumb2', | 929 DeclareBit('build_arm_thumb2', |
| 927 'Building binaries for the ARM architecture (thumb2 ISA)', | 930 'Building binaries for the ARM architecture (thumb2 ISA)', |
| 928 exclusive_groups='build_arch') | 931 exclusive_groups='build_arch') |
| 929 DeclareBit('target_x86_32', 'Tools being built will process x86-32 binaries', | 932 DeclareBit('target_x86_32', 'Tools being built will process x86-32 binaries', |
| 930 exclusive_groups='target_arch') | 933 exclusive_groups='target_arch') |
| 931 DeclareBit('target_x86_64', 'Tools being built will process x86-36 binaries', | 934 DeclareBit('target_x86_64', 'Tools being built will process x86-36 binaries', |
| 932 exclusive_groups='target_arch') | 935 exclusive_groups='target_arch') |
| 936 DeclareBit('target_mips32', 'Tools being built will process MIPS binaries', |
| 937 exclusive_groups='target_arch') |
| 933 DeclareBit('target_arm_arm', 'Tools being built will process ARM binaries', | 938 DeclareBit('target_arm_arm', 'Tools being built will process ARM binaries', |
| 934 exclusive_groups='target_arch') | 939 exclusive_groups='target_arch') |
| 935 DeclareBit('target_arm_thumb2', | 940 DeclareBit('target_arm_thumb2', |
| 936 'Tools being built will process ARM binaries (thumb2 ISA)', | 941 'Tools being built will process ARM binaries (thumb2 ISA)', |
| 937 exclusive_groups='target_arch') | 942 exclusive_groups='target_arch') |
| 938 | 943 |
| 939 # Shorthand for either the 32 or 64 bit version of x86. | 944 # Shorthand for either the 32 or 64 bit version of x86. |
| 940 DeclareBit('build_x86', 'Building binaries for the x86 architecture') | 945 DeclareBit('build_x86', 'Building binaries for the x86 architecture') |
| 941 DeclareBit('target_x86', 'Tools being built will process x86 binaries') | 946 DeclareBit('target_x86', 'Tools being built will process x86 binaries') |
| 942 | 947 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 969 if env.Bit('build_arm_arm') or env.Bit('build_arm_thumb2'): | 974 if env.Bit('build_arm_arm') or env.Bit('build_arm_thumb2'): |
| 970 env.SetBits('build_arm') | 975 env.SetBits('build_arm') |
| 971 | 976 |
| 972 if env.Bit('target_x86_32') or env.Bit('target_x86_64'): | 977 if env.Bit('target_x86_32') or env.Bit('target_x86_64'): |
| 973 env.SetBits('target_x86') | 978 env.SetBits('target_x86') |
| 974 if env.Bit('target_arm_arm') or env.Bit('target_arm_thumb2'): | 979 if env.Bit('target_arm_arm') or env.Bit('target_arm_thumb2'): |
| 975 env.SetBits('target_arm') | 980 env.SetBits('target_arm') |
| 976 | 981 |
| 977 env.Replace(BUILD_ISA_NAME=GetPlatform('buildplatform')) | 982 env.Replace(BUILD_ISA_NAME=GetPlatform('buildplatform')) |
| 978 | 983 |
| 979 if env.Bit('target_arm') and not env.Bit('native_code'): | 984 if env.Bit('target_arm') or env.Bit('target_mips32'): |
| 980 # This has always been a silent default on ARM. | 985 if not env.Bit('native_code'): |
| 981 env.SetBits('bitcode') | 986 # This is a silent default on ARM and MIPS. |
| 987 env.SetBits('bitcode') |
| 982 | 988 |
| 983 # If it's not bitcode, it's native code. | 989 # If it's not bitcode, it's native code. |
| 984 if not env.Bit('bitcode'): | 990 if not env.Bit('bitcode'): |
| 985 env.SetBits('native_code') | 991 env.SetBits('native_code') |
| 986 | 992 |
| 987 # Determine where the object files go | 993 # Determine where the object files go |
| 988 if BUILD_NAME == TARGET_NAME: | 994 if BUILD_NAME == TARGET_NAME: |
| 989 BUILD_TARGET_NAME = TARGET_NAME | 995 BUILD_TARGET_NAME = TARGET_NAME |
| 990 else: | 996 else: |
| 991 BUILD_TARGET_NAME = '%s-to-%s' % (BUILD_NAME, TARGET_NAME) | 997 BUILD_TARGET_NAME = '%s-to-%s' % (BUILD_NAME, TARGET_NAME) |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1117 | 1123 |
| 1118 | 1124 |
| 1119 def GetValidator(env, validator): | 1125 def GetValidator(env, validator): |
| 1120 # NOTE: that the variable TRUSTED_ENV is set by ExportSpecialFamilyVars() | 1126 # NOTE: that the variable TRUSTED_ENV is set by ExportSpecialFamilyVars() |
| 1121 if 'TRUSTED_ENV' not in env: | 1127 if 'TRUSTED_ENV' not in env: |
| 1122 return None | 1128 return None |
| 1123 | 1129 |
| 1124 if validator is None: | 1130 if validator is None: |
| 1125 if env.Bit('build_arm'): | 1131 if env.Bit('build_arm'): |
| 1126 validator = 'arm-ncval-core' | 1132 validator = 'arm-ncval-core' |
| 1133 elif env.Bit('build_mips32'): |
| 1134 validator = 'mips-ncval-core' |
| 1127 else: | 1135 else: |
| 1128 validator = 'ncval' | 1136 validator = 'ncval' |
| 1129 | 1137 |
| 1130 trusted_env = env['TRUSTED_ENV'] | 1138 trusted_env = env['TRUSTED_ENV'] |
| 1131 return trusted_env.File('${STAGING_DIR}/${PROGPREFIX}%s${PROGSUFFIX}' % | 1139 return trusted_env.File('${STAGING_DIR}/${PROGPREFIX}%s${PROGSUFFIX}' % |
| 1132 validator) | 1140 validator) |
| 1133 | 1141 |
| 1134 | 1142 |
| 1135 # Perform os.path.abspath rooted at the directory SConstruct resides in. | 1143 # Perform os.path.abspath rooted at the directory SConstruct resides in. |
| 1136 def SConstructAbsPath(env, path): | 1144 def SConstructAbsPath(env, path): |
| (...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1749 env.SideEffect(side_effect, node) | 1757 env.SideEffect(side_effect, node) |
| 1750 # We can't check output if the test is not run. | 1758 # We can't check output if the test is not run. |
| 1751 if not env.Bit('do_not_run_tests'): | 1759 if not env.Bit('do_not_run_tests'): |
| 1752 for action in post_actions: | 1760 for action in post_actions: |
| 1753 env.AddPostAction(node, action) | 1761 env.AddPostAction(node, action) |
| 1754 return node | 1762 return node |
| 1755 | 1763 |
| 1756 pre_base_env.AddMethod(PPAPIBrowserTester) | 1764 pre_base_env.AddMethod(PPAPIBrowserTester) |
| 1757 | 1765 |
| 1758 | 1766 |
| 1759 # Disabled for ARM because Chrome binaries for ARM are not available. | 1767 # Disabled for ARM and MIPS because Chrome binaries for ARM and MIPS are not |
| 1768 # available. |
| 1760 def PPAPIBrowserTesterIsBroken(env): | 1769 def PPAPIBrowserTesterIsBroken(env): |
| 1761 return env.Bit('target_arm') or env.Bit('target_arm_thumb2') | 1770 return (env.Bit('target_arm') or env.Bit('target_arm_thumb2') |
| 1771 or env.Bit('target_mips32')) |
| 1762 | 1772 |
| 1763 pre_base_env.AddMethod(PPAPIBrowserTesterIsBroken) | 1773 pre_base_env.AddMethod(PPAPIBrowserTesterIsBroken) |
| 1764 | 1774 |
| 1765 # 3D is disabled everywhere | 1775 # 3D is disabled everywhere |
| 1766 def PPAPIGraphics3DIsBroken(env): | 1776 def PPAPIGraphics3DIsBroken(env): |
| 1767 return True | 1777 return True |
| 1768 | 1778 |
| 1769 pre_base_env.AddMethod(PPAPIGraphics3DIsBroken) | 1779 pre_base_env.AddMethod(PPAPIGraphics3DIsBroken) |
| 1770 | 1780 |
| 1771 | 1781 |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1963 # TODO(mseaborn): Fix by retrying the connection or by adding an | 1973 # TODO(mseaborn): Fix by retrying the connection or by adding an |
| 1964 # option to ld.so to disable its argv-over-IPC feature. | 1974 # option to ld.so to disable its argv-over-IPC feature. |
| 1965 if env.Bit('nacl_glibc') and not env.Bit('nacl_static_link'): | 1975 if env.Bit('nacl_glibc') and not env.Bit('nacl_static_link'): |
| 1966 return [] | 1976 return [] |
| 1967 | 1977 |
| 1968 if sel_universal_flags is None: | 1978 if sel_universal_flags is None: |
| 1969 sel_universal_flags = [] | 1979 sel_universal_flags = [] |
| 1970 | 1980 |
| 1971 # When run under qemu, sel_universal must sneak in qemu to the execv | 1981 # When run under qemu, sel_universal must sneak in qemu to the execv |
| 1972 # call that spawns sel_ldr. | 1982 # call that spawns sel_ldr. |
| 1973 if env.Bit('target_arm') and env.UsingEmulator(): | 1983 if env.UsingEmulator(): |
| 1974 sel_universal_flags.append('--command_prefix') | 1984 sel_universal_flags.append('--command_prefix') |
| 1975 sel_universal_flags.append(GetEmulator(env)) | 1985 sel_universal_flags.append(GetEmulator(env)) |
| 1976 | 1986 |
| 1977 if 'TRUSTED_ENV' not in env: | 1987 if 'TRUSTED_ENV' not in env: |
| 1978 return [] | 1988 return [] |
| 1979 sel_universal = env['TRUSTED_ENV'].File( | 1989 sel_universal = env['TRUSTED_ENV'].File( |
| 1980 '${STAGING_DIR}/${PROGPREFIX}sel_universal${PROGSUFFIX}') | 1990 '${STAGING_DIR}/${PROGPREFIX}sel_universal${PROGSUFFIX}') |
| 1981 | 1991 |
| 1982 # Point to sel_ldr using an environment variable. | 1992 # Point to sel_ldr using an environment variable. |
| 1983 sel_ldr = GetSelLdr(env) | 1993 sel_ldr = GetSelLdr(env) |
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2607 'tests/unittests/shared/platform/build.scons', | 2617 'tests/unittests/shared/platform/build.scons', |
| 2608 'tests/unittests/trusted/asan/build.scons', | 2618 'tests/unittests/trusted/asan/build.scons', |
| 2609 'tests/unittests/trusted/platform_qualify/build.scons', | 2619 'tests/unittests/trusted/platform_qualify/build.scons', |
| 2610 'tests/unittests/trusted/service_runtime/build.scons', | 2620 'tests/unittests/trusted/service_runtime/build.scons', |
| 2611 'installer/build.scons' | 2621 'installer/build.scons' |
| 2612 ], ppapi_scons_files['trusted_scons_files']) | 2622 ], ppapi_scons_files['trusted_scons_files']) |
| 2613 ) | 2623 ) |
| 2614 | 2624 |
| 2615 base_env.AddMethod(SDKInstallBin) | 2625 base_env.AddMethod(SDKInstallBin) |
| 2616 | 2626 |
| 2617 # The ARM validator can be built for any target that doesn't use ELFCLASS64. | 2627 # The ARM and MIPS validators can be built for any target that doesn't use |
| 2628 # ELFCLASS64. |
| 2618 if not base_env.Bit('target_x86_64'): | 2629 if not base_env.Bit('target_x86_64'): |
| 2619 base_env.Append( | 2630 base_env.Append( |
| 2620 BUILD_SCONSCRIPTS = [ | 2631 BUILD_SCONSCRIPTS = [ |
| 2621 'src/trusted/validator_arm/build.scons', | 2632 'src/trusted/validator_arm/build.scons', |
| 2633 'src/trusted/validator_mips/build.scons', |
| 2622 ]) | 2634 ]) |
| 2623 | 2635 |
| 2624 base_env.Replace( | 2636 base_env.Replace( |
| 2625 NACL_BUILD_FAMILY = 'TRUSTED', | 2637 NACL_BUILD_FAMILY = 'TRUSTED', |
| 2626 ) | 2638 ) |
| 2627 | 2639 |
| 2628 # Add optional scons files if present in the directory tree. | 2640 # Add optional scons files if present in the directory tree. |
| 2629 if os.path.exists(pre_base_env.subst('${MAIN_DIR}/supplement/build.scons')): | 2641 if os.path.exists(pre_base_env.subst('${MAIN_DIR}/supplement/build.scons')): |
| 2630 base_env.Append(BUILD_SCONSCRIPTS=['${MAIN_DIR}/supplement/build.scons']) | 2642 base_env.Append(BUILD_SCONSCRIPTS=['${MAIN_DIR}/supplement/build.scons']) |
| 2631 | 2643 |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2993 '-isystem', | 3005 '-isystem', |
| 2994 jail + '/usr/include', | 3006 jail + '/usr/include', |
| 2995 ]) | 3007 ]) |
| 2996 # /usr/lib makes sense for most configuration except this one | 3008 # /usr/lib makes sense for most configuration except this one |
| 2997 # No ARM compatible libs can be found there. | 3009 # No ARM compatible libs can be found there. |
| 2998 # So this just makes the command lines longer and sometimes results | 3010 # So this just makes the command lines longer and sometimes results |
| 2999 # in linker warnings referring to this directory. | 3011 # in linker warnings referring to this directory. |
| 3000 linux_env.FilterOut(LIBPATH=['/usr/lib']) | 3012 linux_env.FilterOut(LIBPATH=['/usr/lib']) |
| 3001 # This appears to be needed for sel_universal | 3013 # This appears to be needed for sel_universal |
| 3002 linux_env.Append(LIBS=['dl']) | 3014 linux_env.Append(LIBS=['dl']) |
| 3015 elif linux_env.Bit('build_mips32'): |
| 3016 # TODO(petarj): Add support for MIPS. |
| 3017 pass |
| 3003 else: | 3018 else: |
| 3004 Banner('Strange platform: %s' % BUILD_NAME) | 3019 Banner('Strange platform: %s' % BUILD_NAME) |
| 3005 | 3020 |
| 3006 # These are desireable options for every Linux platform: | 3021 # These are desireable options for every Linux platform: |
| 3007 # _FORTIFY_SOURCE: general paranoia "hardening" option for library functions | 3022 # _FORTIFY_SOURCE: general paranoia "hardening" option for library functions |
| 3008 # -fPIE/-pie: create a position-independent executable | 3023 # -fPIE/-pie: create a position-independent executable |
| 3009 # relro/now: "hardening" options for linking | 3024 # relro/now: "hardening" options for linking |
| 3010 # noexecstack: ensure that the executable does not get a PT_GNU_STACK | 3025 # noexecstack: ensure that the executable does not get a PT_GNU_STACK |
| 3011 # header that causes the kernel to set the READ_IMPLIES_EXEC | 3026 # header that causes the kernel to set the READ_IMPLIES_EXEC |
| 3012 # personality flag, which disables NX page protection. | 3027 # personality flag, which disables NX page protection. |
| (...skipping 905 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3918 nacl_env.ValidateSdk() | 3933 nacl_env.ValidateSdk() |
| 3919 | 3934 |
| 3920 if BROKEN_TEST_COUNT > 0: | 3935 if BROKEN_TEST_COUNT > 0: |
| 3921 msg = "There are %d broken tests." % BROKEN_TEST_COUNT | 3936 msg = "There are %d broken tests." % BROKEN_TEST_COUNT |
| 3922 if GetOption('brief_comstr'): | 3937 if GetOption('brief_comstr'): |
| 3923 msg += " Add --verbose to the command line for more information." | 3938 msg += " Add --verbose to the command line for more information." |
| 3924 print msg | 3939 print msg |
| 3925 | 3940 |
| 3926 # separate warnings from actual build output | 3941 # separate warnings from actual build output |
| 3927 Banner('B U I L D - O U T P U T:') | 3942 Banner('B U I L D - O U T P U T:') |
| OLD | NEW |