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

Side by Side Diff: SConstruct

Issue 9979025: [MIPS] Adding validator for MIPS architecture. (Closed) Base URL: http://src.chromium.org/native_client/trunk/src/native_client/
Patch Set: Rebased patch, conflict resolved. Created 8 years, 6 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
« no previous file with comments | « no previous file | pnacl/build.sh » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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:')
OLDNEW
« no previous file with comments | « no previous file | pnacl/build.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698