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

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: Update per initial code review. Nexes removed. Created 8 years, 8 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') | pnacl/build.sh » ('J')
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 893 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 #. 904 #.
905 # We have "build" and "target" platforms for the non nacl environments 905 # We have "build" and "target" platforms for the non nacl environments
906 # which govern service runtime, validator, etc. 906 # which govern service runtime, validator, etc.
907 # 907 #
908 # "build" means the platform the code is running on 908 # "build" means the platform the code is running on
909 # "target" means the platform the validator is checking for. 909 # "target" means the platform the validator is checking for.
910 # Typically they are the same but testing it useful to have flexibility. 910 # Typically they are the same but testing it useful to have flexibility.
911 # 911 #
912 # Various variables in the scons environment are related to this, e.g. 912 # Various variables in the scons environment are related to this, e.g.
913 # 913 #
914 # BUILD_ARCH: (arm, x86) 914 # BUILD_ARCH: (arm, mips, x86)
915 # BUILD_SUBARCH: (32, 64) 915 # BUILD_SUBARCH: (32, 64)
916 # 916 #
917 # The settings can be controlled using scons command line variables: 917 # The settings can be controlled using scons command line variables:
918 # 918 #
919 # 919 #
920 # buildplatform=: controls the build platform 920 # buildplatform=: controls the build platform
921 # targetplatform=: controls the target platform 921 # targetplatform=: controls the target platform
922 # platform=: controls both 922 # platform=: controls both
923 # 923 #
924 # This dictionary is used to translate from a platform name to a 924 # This dictionary is used to translate from a platform name to a
925 # (arch, subarch) pair 925 # (arch, subarch) pair
926 AVAILABLE_PLATFORMS = { 926 AVAILABLE_PLATFORMS = {
927 'x86-32' : { 'arch' : 'x86' , 'subarch' : '32' }, 927 'x86-32' : { 'arch' : 'x86' , 'subarch' : '32' },
928 'x86-64' : { 'arch' : 'x86' , 'subarch' : '64' }, 928 'x86-64' : { 'arch' : 'x86' , 'subarch' : '64' },
929 'mips32' : { 'arch' : 'mips', 'subarch' : '32' },
929 'arm' : { 'arch' : 'arm' , 'subarch' : '32' }, 930 'arm' : { 'arch' : 'arm' , 'subarch' : '32' },
930 'arm-thumb2' : { 'arch' : 'arm' , 'subarch' : '32' } 931 'arm-thumb2' : { 'arch' : 'arm' , 'subarch' : '32' }
931 } 932 }
932 933
933 # Look up the platform name from the command line arguments, 934 # Look up the platform name from the command line arguments,
934 # defaulting to 'platform' if needed. 935 # defaulting to 'platform' if needed.
935 def GetPlatform(name): 936 def GetPlatform(name):
936 platform = ARGUMENTS.get(name) 937 platform = ARGUMENTS.get(name)
937 if platform is None: 938 if platform is None:
938 return ARGUMENTS.get('platform', 'x86-32') 939 return ARGUMENTS.get('platform', 'x86-32')
939 elif ARGUMENTS.get('platform') is None: 940 elif ARGUMENTS.get('platform') is None:
940 return platform 941 return platform
941 else: 942 else:
942 raise Exception('Can\'t specify both %s and %s on the command line' 943 raise Exception('Can\'t specify both %s and %s on the command line'
943 % ('platform', name)) 944 % ('platform', name))
944 945
945 946
946 # Decode platform into list [ ARCHITECTURE , EXEC_MODE ]. 947 # Decode platform into list [ ARCHITECTURE , EXEC_MODE ].
947 def DecodePlatform(platform): 948 def DecodePlatform(platform):
948 if platform in AVAILABLE_PLATFORMS: 949 if platform in AVAILABLE_PLATFORMS:
949 return AVAILABLE_PLATFORMS[platform] 950 return AVAILABLE_PLATFORMS[platform]
950 raise Exception('Unrecognized platform: %s' % platform) 951 raise Exception('Unrecognized platform: %s' % platform)
951 952
952 953
953 DeclareBit('build_x86_32', 'Building binaries for the x86-32 architecture', 954 DeclareBit('build_x86_32', 'Building binaries for the x86-32 architecture',
954 exclusive_groups='build_arch') 955 exclusive_groups='build_arch')
955 DeclareBit('build_x86_64', 'Building binaries for the x86-64 architecture', 956 DeclareBit('build_x86_64', 'Building binaries for the x86-64 architecture',
956 exclusive_groups='build_arch') 957 exclusive_groups='build_arch')
958 DeclareBit('build_mips32', 'Building binaries for the MIPS architecture',
959 exclusive_groups='build_arch')
957 DeclareBit('build_arm_arm', 'Building binaries for the ARM architecture', 960 DeclareBit('build_arm_arm', 'Building binaries for the ARM architecture',
958 exclusive_groups='build_arch') 961 exclusive_groups='build_arch')
959 DeclareBit('build_arm_thumb2', 962 DeclareBit('build_arm_thumb2',
960 'Building binaries for the ARM architecture (thumb2 ISA)', 963 'Building binaries for the ARM architecture (thumb2 ISA)',
961 exclusive_groups='build_arch') 964 exclusive_groups='build_arch')
962 DeclareBit('target_x86_32', 'Tools being built will process x86-32 binaries', 965 DeclareBit('target_x86_32', 'Tools being built will process x86-32 binaries',
963 exclusive_groups='target_arch') 966 exclusive_groups='target_arch')
964 DeclareBit('target_x86_64', 'Tools being built will process x86-36 binaries', 967 DeclareBit('target_x86_64', 'Tools being built will process x86-36 binaries',
965 exclusive_groups='target_arch') 968 exclusive_groups='target_arch')
969 DeclareBit('target_mips32', 'Tools being built will process MIPS binaries',
970 exclusive_groups='target_arch')
966 DeclareBit('target_arm_arm', 'Tools being built will process ARM binaries', 971 DeclareBit('target_arm_arm', 'Tools being built will process ARM binaries',
967 exclusive_groups='target_arch') 972 exclusive_groups='target_arch')
968 DeclareBit('target_arm_thumb2', 973 DeclareBit('target_arm_thumb2',
969 'Tools being built will process ARM binaries (thumb2 ISA)', 974 'Tools being built will process ARM binaries (thumb2 ISA)',
970 exclusive_groups='target_arch') 975 exclusive_groups='target_arch')
971 976
972 # Shorthand for either the 32 or 64 bit version of x86. 977 # Shorthand for either the 32 or 64 bit version of x86.
973 DeclareBit('build_x86', 'Building binaries for the x86 architecture') 978 DeclareBit('build_x86', 'Building binaries for the x86 architecture')
974 DeclareBit('target_x86', 'Tools being built will process x86 binaries') 979 DeclareBit('target_x86', 'Tools being built will process x86 binaries')
975 980
(...skipping 30 matching lines...) Expand all
1006 env.SetBits('target_x86') 1011 env.SetBits('target_x86')
1007 if env.Bit('target_arm_arm') or env.Bit('target_arm_thumb2'): 1012 if env.Bit('target_arm_arm') or env.Bit('target_arm_thumb2'):
1008 env.SetBits('target_arm') 1013 env.SetBits('target_arm')
1009 1014
1010 env.Replace(BUILD_ISA_NAME=GetPlatform('buildplatform')) 1015 env.Replace(BUILD_ISA_NAME=GetPlatform('buildplatform'))
1011 1016
1012 if env.Bit('target_arm') and not env.Bit('bitcode'): 1017 if env.Bit('target_arm') and not env.Bit('bitcode'):
1013 # This has always been a silent default on ARM. 1018 # This has always been a silent default on ARM.
1014 env.SetBits('bitcode') 1019 env.SetBits('bitcode')
1015 1020
1021 if env.Bit('target_mips32') and not env.Bit('bitcode'):
Nick Bray (chromium) 2012/04/13 20:25:26 Optional: if env.Bit('target_arm') or env.Bit('ta
1022 # This is a silent default on MIPS.
1023 env.SetBits('bitcode')
1024
1016 # Determine where the object files go 1025 # Determine where the object files go
1017 if BUILD_NAME == TARGET_NAME: 1026 if BUILD_NAME == TARGET_NAME:
1018 BUILD_TARGET_NAME = TARGET_NAME 1027 BUILD_TARGET_NAME = TARGET_NAME
1019 else: 1028 else:
1020 BUILD_TARGET_NAME = '%s-to-%s' % (BUILD_NAME, TARGET_NAME) 1029 BUILD_TARGET_NAME = '%s-to-%s' % (BUILD_NAME, TARGET_NAME)
1021 env.Replace(BUILD_TARGET_NAME=BUILD_TARGET_NAME) 1030 env.Replace(BUILD_TARGET_NAME=BUILD_TARGET_NAME)
1022 # This may be changed later; see target_variant_map, below. 1031 # This may be changed later; see target_variant_map, below.
1023 env.Replace(TARGET_VARIANT='') 1032 env.Replace(TARGET_VARIANT='')
1024 env.Replace(TARGET_ROOT= 1033 env.Replace(TARGET_ROOT=
1025 '${DESTINATION_ROOT}/${BUILD_TYPE}-${BUILD_TARGET_NAME}${TARGET_VARIANT}') 1034 '${DESTINATION_ROOT}/${BUILD_TYPE}-${BUILD_TARGET_NAME}${TARGET_VARIANT}')
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 1160
1152 1161
1153 def GetValidator(env, validator): 1162 def GetValidator(env, validator):
1154 # NOTE: that the variable TRUSTED_ENV is set by ExportSpecialFamilyVars() 1163 # NOTE: that the variable TRUSTED_ENV is set by ExportSpecialFamilyVars()
1155 if 'TRUSTED_ENV' not in env: 1164 if 'TRUSTED_ENV' not in env:
1156 return None 1165 return None
1157 1166
1158 if validator is None: 1167 if validator is None:
1159 if env.Bit('build_arm'): 1168 if env.Bit('build_arm'):
1160 validator = 'arm-ncval-core' 1169 validator = 'arm-ncval-core'
1170 elif env.Bit('build_mips32'):
1171 validator = 'mips-ncval-core'
1161 else: 1172 else:
1162 validator = 'ncval' 1173 validator = 'ncval'
1163 1174
1164 trusted_env = env['TRUSTED_ENV'] 1175 trusted_env = env['TRUSTED_ENV']
1165 return trusted_env.File('${STAGING_DIR}/${PROGPREFIX}%s${PROGSUFFIX}' % 1176 return trusted_env.File('${STAGING_DIR}/${PROGPREFIX}%s${PROGSUFFIX}' %
1166 validator) 1177 validator)
1167 1178
1168 1179
1169 # Perform os.path.abspath rooted at the directory SConstruct resides in. 1180 # Perform os.path.abspath rooted at the directory SConstruct resides in.
1170 def SConstructAbsPath(env, path): 1181 def SConstructAbsPath(env, path):
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1728 if not env.Bit('do_not_run_tests'): 1739 if not env.Bit('do_not_run_tests'):
1729 for action in post_actions: 1740 for action in post_actions:
1730 env.AddPostAction(node, action) 1741 env.AddPostAction(node, action)
1731 return node 1742 return node
1732 1743
1733 pre_base_env.AddMethod(PPAPIBrowserTester) 1744 pre_base_env.AddMethod(PPAPIBrowserTester)
1734 1745
1735 1746
1736 # Disabled for ARM because Chrome binaries for ARM are not available. 1747 # Disabled for ARM because Chrome binaries for ARM are not available.
1737 def PPAPIBrowserTesterIsBroken(env): 1748 def PPAPIBrowserTesterIsBroken(env):
1738 return env.Bit('target_arm') or env.Bit('target_arm_thumb2') 1749 return (env.Bit('target_arm') or env.Bit('target_arm_thumb2')
1750 or env.Bit('target_mips32'))
1739 1751
1740 pre_base_env.AddMethod(PPAPIBrowserTesterIsBroken) 1752 pre_base_env.AddMethod(PPAPIBrowserTesterIsBroken)
1741 1753
1742 # 3D is disabled everywhere 1754 # 3D is disabled everywhere
1743 def PPAPIGraphics3DIsBroken(env): 1755 def PPAPIGraphics3DIsBroken(env):
1744 return True 1756 return True
1745 1757
1746 pre_base_env.AddMethod(PPAPIGraphics3DIsBroken) 1758 pre_base_env.AddMethod(PPAPIGraphics3DIsBroken)
1747 1759
1748 1760
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1940 # TODO(mseaborn): Fix by retrying the connection or by adding an 1952 # TODO(mseaborn): Fix by retrying the connection or by adding an
1941 # option to ld.so to disable its argv-over-IPC feature. 1953 # option to ld.so to disable its argv-over-IPC feature.
1942 if env.Bit('nacl_glibc') and not env.Bit('nacl_static_link'): 1954 if env.Bit('nacl_glibc') and not env.Bit('nacl_static_link'):
1943 return [] 1955 return []
1944 1956
1945 if sel_universal_flags is None: 1957 if sel_universal_flags is None:
1946 sel_universal_flags = [] 1958 sel_universal_flags = []
1947 1959
1948 # When run under qemu, sel_universal must sneak in qemu to the execv 1960 # When run under qemu, sel_universal must sneak in qemu to the execv
1949 # call that spawns sel_ldr. 1961 # call that spawns sel_ldr.
1950 if env.Bit('target_arm') and env.UsingEmulator(): 1962 if env.UsingEmulator():
Brad Chen 2012/04/12 00:51:34 Have you determined that the env.Bit('target_arm')
petarj 2012/04/12 13:21:01 This has been changed per Mark's comment in the pr
1951 sel_universal_flags.append('--command_prefix') 1963 sel_universal_flags.append('--command_prefix')
1952 sel_universal_flags.append(GetEmulator(env)) 1964 sel_universal_flags.append(GetEmulator(env))
1953 1965
1954 if 'TRUSTED_ENV' not in env: 1966 if 'TRUSTED_ENV' not in env:
1955 return [] 1967 return []
1956 sel_universal = env['TRUSTED_ENV'].File( 1968 sel_universal = env['TRUSTED_ENV'].File(
1957 '${STAGING_DIR}/${PROGPREFIX}sel_universal${PROGSUFFIX}') 1969 '${STAGING_DIR}/${PROGPREFIX}sel_universal${PROGSUFFIX}')
1958 1970
1959 # Point to sel_ldr using an environment variable. 1971 # Point to sel_ldr using an environment variable.
1960 sel_ldr = GetSelLdr(env) 1972 sel_ldr = GetSelLdr(env)
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
2540 'tests/unittests/shared/platform/build.scons', 2552 'tests/unittests/shared/platform/build.scons',
2541 'tests/unittests/trusted/asan/build.scons', 2553 'tests/unittests/trusted/asan/build.scons',
2542 'tests/unittests/trusted/platform_qualify/build.scons', 2554 'tests/unittests/trusted/platform_qualify/build.scons',
2543 'tests/unittests/trusted/service_runtime/build.scons', 2555 'tests/unittests/trusted/service_runtime/build.scons',
2544 'installer/build.scons' 2556 'installer/build.scons'
2545 ], 2557 ],
2546 ) 2558 )
2547 2559
2548 base_env.AddMethod(SDKInstallBin) 2560 base_env.AddMethod(SDKInstallBin)
2549 2561
2550 # The ARM validator can be built for any target that doesn't use ELFCLASS64. 2562 # The ARM and MIPS validators can be built for any target that doesn't use
2563 # ELFCLASS64.
2551 if not base_env.Bit('target_x86_64'): 2564 if not base_env.Bit('target_x86_64'):
2552 base_env.Append( 2565 base_env.Append(
2553 BUILD_SCONSCRIPTS = [ 2566 BUILD_SCONSCRIPTS = [
2554 'src/trusted/validator_arm/build.scons', 2567 'src/trusted/validator_arm/build.scons',
2568 'src/trusted/validator_mips/build.scons',
2555 ]) 2569 ])
2556 2570
2557 base_env.Replace( 2571 base_env.Replace(
2558 NACL_BUILD_FAMILY = 'TRUSTED', 2572 NACL_BUILD_FAMILY = 'TRUSTED',
2559 2573
2560 SDL_HERMETIC_LINUX_DIR='${MAIN_DIR}/../third_party/sdl/linux/v1_2_13', 2574 SDL_HERMETIC_LINUX_DIR='${MAIN_DIR}/../third_party/sdl/linux/v1_2_13',
2561 SDL_HERMETIC_MAC_DIR='${MAIN_DIR}/../third_party/sdl/osx/v1_2_13', 2575 SDL_HERMETIC_MAC_DIR='${MAIN_DIR}/../third_party/sdl/osx/v1_2_13',
2562 SDL_HERMETIC_WINDOWS_DIR='${MAIN_DIR}/../third_party/sdl/win/v1_2_13', 2576 SDL_HERMETIC_WINDOWS_DIR='${MAIN_DIR}/../third_party/sdl/win/v1_2_13',
2563 ) 2577 )
2564 2578
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
2981 '-isystem', 2995 '-isystem',
2982 jail + '/usr/include', 2996 jail + '/usr/include',
2983 ]) 2997 ])
2984 # /usr/lib makes sense for most configuration except this one 2998 # /usr/lib makes sense for most configuration except this one
2985 # No ARM compatible libs can be found there. 2999 # No ARM compatible libs can be found there.
2986 # So this just makes the command lines longer and sometimes results 3000 # So this just makes the command lines longer and sometimes results
2987 # in linker warnings referring to this directory. 3001 # in linker warnings referring to this directory.
2988 linux_env.FilterOut(LIBPATH=['/usr/lib']) 3002 linux_env.FilterOut(LIBPATH=['/usr/lib'])
2989 # This appears to be needed for sel_universal 3003 # This appears to be needed for sel_universal
2990 linux_env.Append(LIBS=['dl']) 3004 linux_env.Append(LIBS=['dl'])
3005 elif linux_env.Bit('build_mips32'):
3006 pass
2991 else: 3007 else:
2992 Banner('Strange platform: %s' % BUILD_NAME) 3008 Banner('Strange platform: %s' % BUILD_NAME)
2993 3009
2994 # These are desireable options for every Linux platform: 3010 # These are desireable options for every Linux platform:
2995 # _FORTIFY_SOURCE: general paranoia "hardening" option for library functions 3011 # _FORTIFY_SOURCE: general paranoia "hardening" option for library functions
2996 # -fPIE/-pie: create a position-independent executable 3012 # -fPIE/-pie: create a position-independent executable
2997 # relro/now: "hardening" options for linking 3013 # relro/now: "hardening" options for linking
2998 # noexecstack: ensure that the executable does not get a PT_GNU_STACK 3014 # noexecstack: ensure that the executable does not get a PT_GNU_STACK
2999 # header that causes the kernel to set the READ_IMPLIES_EXEC 3015 # header that causes the kernel to set the READ_IMPLIES_EXEC
3000 # personality flag, which disables NX page protection. 3016 # personality flag, which disables NX page protection.
(...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after
3943 nacl_env.ValidateSdk() 3959 nacl_env.ValidateSdk()
3944 3960
3945 if BROKEN_TEST_COUNT > 0: 3961 if BROKEN_TEST_COUNT > 0:
3946 msg = "There are %d broken tests." % BROKEN_TEST_COUNT 3962 msg = "There are %d broken tests." % BROKEN_TEST_COUNT
3947 if GetOption('brief_comstr'): 3963 if GetOption('brief_comstr'):
3948 msg += " Add --verbose to the command line for more information." 3964 msg += " Add --verbose to the command line for more information."
3949 print msg 3965 print msg
3950 3966
3951 # separate warnings from actual build output 3967 # separate warnings from actual build output
3952 Banner('B U I L D - O U T P U T:') 3968 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') | pnacl/build.sh » ('J')

Powered by Google App Engine
This is Rietveld 408576698