OLD | NEW |
1 #!/bin/bash | 1 #!/bin/bash |
2 # Copyright (c) 2011 The Native Client Authors. All rights reserved. | 2 # Copyright (c) 2011 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 #@ Untrusted Toolchain Manager | 6 #@ Untrusted Toolchain Manager |
7 #@------------------------------------------------------------------- | 7 #@------------------------------------------------------------------- |
8 #@ This script builds the ARM and PNaCl untrusted toolchains. | 8 #@ This script builds the ARM and PNaCl untrusted toolchains. |
9 #@ It MUST be run from the native_client/ directory. | 9 #@ It MUST be run from the native_client/ directory. |
10 # | 10 # |
(...skipping 2757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2768 | 2768 |
2769 if ! cmp --silent "${archllc}" "${newllc}" ; then | 2769 if ! cmp --silent "${archllc}" "${newllc}" ; then |
2770 Banner "TRIPLE BUILD VERIFY FAILED" | 2770 Banner "TRIPLE BUILD VERIFY FAILED" |
2771 echo "Expected these files to be identical, but they are not:" | 2771 echo "Expected these files to be identical, but they are not:" |
2772 echo " ${archllc}" | 2772 echo " ${archllc}" |
2773 echo " ${newllc}" | 2773 echo " ${newllc}" |
2774 exit -1 | 2774 exit -1 |
2775 fi | 2775 fi |
2776 StepBanner "VERIFY" "Verified ${arch} OK" | 2776 StepBanner "VERIFY" "Verified ${arch} OK" |
2777 } | 2777 } |
2778 ###################################################################### | |
2779 ###################################################################### | |
2780 # | |
2781 # < TESTING > | |
2782 # | |
2783 ###################################################################### | |
2784 ###################################################################### | |
2785 | |
2786 # TODO(robertm): figure out what to do about concurrency in debug mode. | |
2787 # Perhaps it is fine just tweaking that via UTMAN_CONCURRENCY. | |
2788 if ${UTMAN_DEBUG} || ${UTMAN_BUILDBOT}; then | |
2789 readonly SCONS_ARGS=(MODE=nacl,opt-host | |
2790 bitcode=1 | |
2791 sdl=none | |
2792 --verbose | |
2793 -j${UTMAN_CONCURRENCY}) | |
2794 | |
2795 readonly SCONS_ARGS_SEL_LDR=(MODE=opt-host | |
2796 bitcode=1 | |
2797 sdl=none | |
2798 --verbose | |
2799 -j${UTMAN_CONCURRENCY}) | |
2800 else | |
2801 readonly SCONS_ARGS=(MODE=nacl,opt-host | |
2802 bitcode=1 | |
2803 naclsdk_validate=0 | |
2804 sdl=none | |
2805 sysinfo=0 | |
2806 -j${UTMAN_CONCURRENCY}) | |
2807 | |
2808 readonly SCONS_ARGS_SEL_LDR=(MODE=opt-host | |
2809 bitcode=1 | |
2810 naclsdk_validate=0 | |
2811 sdl=none | |
2812 sysinfo=0 | |
2813 -j${UTMAN_CONCURRENCY}) | |
2814 fi | |
2815 | |
2816 #@ show-tests - see what tests can be run | |
2817 show-tests() { | |
2818 StepBanner "SHOWING TESTS" | |
2819 cat $(find tests -name nacl.scons) | grep -o 'run_[A-Za-z_-]*' | sort | uniq | |
2820 } | |
2821 | |
2822 #+ scons-determine-tests - returns: | |
2823 #+ (a) "true smoke_tests [-k]" if all smoke tests should be built and run. | |
2824 #+ or (b) "false $@" if not all tests should be built because specific tests | |
2825 #+ are already identified in $@. The test must be the first element | |
2826 #+ of $@, but we don't check that here. | |
2827 scons-determine-tests() { | |
2828 if [ $# -eq 0 ] || ([ $# -eq 1 ] && [ "$1" == "-k" ]); then | |
2829 echo "true smoke_tests $@" # $@ should only tack on the -k flag or nothing | |
2830 else | |
2831 echo "false $@" | |
2832 fi | |
2833 } | |
2834 | |
2835 scons-build-sel_ldr() { | |
2836 local platform=$1 | |
2837 ./scons platform=${platform} ${SCONS_ARGS_SEL_LDR[@]} sel_ldr | |
2838 } | |
2839 | |
2840 scons-build-sel_universal() { | |
2841 local platform=$1 | |
2842 ./scons platform=${platform} ${SCONS_ARGS_SEL_LDR[@]} sel_universal | |
2843 } | |
2844 | |
2845 scons-clean-pnacl-build-dir () { | |
2846 rm -rf scons-out/nacl-$1-pnacl | |
2847 } | |
2848 | |
2849 scons-clean-pnacl-pic-build-dir () { | |
2850 rm -rf scons-out/nacl-$1-pnacl-pic | |
2851 } | |
2852 | |
2853 scons-pnacl-build () { | |
2854 local platform=$1 | |
2855 shift | |
2856 ./scons ${SCONS_ARGS[@]} \ | |
2857 platform=${platform} \ | |
2858 "$@" | |
2859 } | |
2860 | |
2861 run-scons-tests() { | |
2862 local platform=$1 | |
2863 local should_build_all=$2 | |
2864 local testname=$3 | |
2865 shift 3 | |
2866 # The rest of the arguments should be flags! | |
2867 | |
2868 # See if we should build all the tests. | |
2869 if ${should_build_all}; then | |
2870 scons-pnacl-build ${platform} $@ | |
2871 fi | |
2872 | |
2873 # Then run the listed tests. | |
2874 scons-pnacl-build ${platform} ${testname} $@ | |
2875 } | |
2876 | |
2877 test-scons-common () { | |
2878 local platform=$1 | |
2879 shift | |
2880 scons-clean-pnacl-build-dir ${platform} | |
2881 | |
2882 test_setup=$(scons-determine-tests "$@") | |
2883 run-scons-tests ${platform} ${test_setup} | |
2884 } | |
2885 | |
2886 test-scons-pic-common () { | |
2887 local platform=$1 | |
2888 shift | |
2889 scons-clean-pnacl-pic-build-dir ${platform} | |
2890 | |
2891 test_setup=$(scons-determine-tests "$@") | |
2892 run-scons-tests ${platform} ${test_setup} nacl_pic=1 | |
2893 } | |
2894 | |
2895 #@ test-arm - run arm tests via pnacl toolchain | |
2896 #@ test-arm <test> - run a single arm test via pnacl toolchain | |
2897 test-arm() { | |
2898 test-scons-common arm "$@" | |
2899 } | |
2900 | |
2901 #@ test-x86-32 - run x86-32 tests via pnacl toolchain | |
2902 #@ test-x86-32 <test> - run a single x86-32 test via pnacl toolchain | |
2903 test-x86-32() { | |
2904 test-scons-common x86-32 "$@" | |
2905 } | |
2906 | |
2907 #@ test-x86-64 - run all x86-64 tests via pnacl toolchain | |
2908 #@ test-x86-64 <test> - run a single x86-64 test via pnacl toolchain | |
2909 test-x86-64() { | |
2910 test-scons-common x86-64 "$@" | |
2911 } | |
2912 | |
2913 #@ test-arm-pic - run all arm pic tests via pnacl toolchain | |
2914 #@ test-arm-pic <test> - run a single arm pic test via pnacl toolchain | |
2915 test-arm-pic() { | |
2916 test-scons-pic-common arm "$@" | |
2917 } | |
2918 | |
2919 #@ test-x86-32-pic - run all x86-32 pic tests via pnacl toolchain | |
2920 #@ test-x86-32-pic <test> - run a single x86-32 pic test via pnacl toolchain | |
2921 test-x86-32-pic() { | |
2922 test-scons-pic-common x86-32 "$@" | |
2923 } | |
2924 | |
2925 #@ test-x86-64-pic - run all x86-64 pic tests via pnacl toolchain | |
2926 #@ test-x86-64-pic <test> - run a single x86-64 pic test via pnacl toolchain | |
2927 test-x86-64-pic() { | |
2928 test-scons-pic-common x86-64 "$@" | |
2929 } | |
2930 | |
2931 #@ test-all - run arm, x86-32, and x86-64 tests. (all should pass) | |
2932 #@ test-all <test> - run a single test on all architectures. | |
2933 test-all() { | |
2934 if [ $# -eq 1 ] && [ "$1" == "-k" ]; then | |
2935 echo "Using -k on test-all is not a good idea." | |
2936 exit -1 | |
2937 fi | |
2938 | |
2939 test-arm "$@" | |
2940 test-arm-pic "$@" | |
2941 test-x86-64 "$@" | |
2942 test-x86-64-pic "$@" | |
2943 test-x86-32 "$@" | |
2944 test-x86-32-pic "$@" | |
2945 } | |
2946 | |
2947 | |
2948 #@ test-spec <official-spec-dir> <setup> [ref|train] [<benchmarks>]* | |
2949 #@ - run spec tests | |
2950 #@ | |
2951 test-spec() { | |
2952 if [[ $# -lt 2 ]]; then | |
2953 echo "not enough arguments for test-spec" | |
2954 exit 1 | |
2955 fi; | |
2956 official=$(GetAbsolutePath $1) | |
2957 setup=$2 | |
2958 shift 2 | |
2959 spushd tests/spec2k | |
2960 ./run_all.sh CleanBenchmarks "$@" | |
2961 ./run_all.sh PopulateFromSpecHarness ${official} "$@" | |
2962 ./run_all.sh BuildAndRunBenchmarks ${setup} "$@" | |
2963 spopd | |
2964 } | |
2965 | |
2966 #@ CollectTimingInfo <directory> <timing_result_file> <tagtype...> | |
2967 #@ CD's into the directory in a subshell and collects all the | |
2968 #@ relevant timed run info | |
2969 #@ tagtype just gets printed out. | |
2970 CollectTimingInfo() { | |
2971 wd=$1 | |
2972 result_file=$2 | |
2973 setup=$3 | |
2974 (cd ${wd}; | |
2975 mkdir -p $(dirname ${result_file}) | |
2976 echo "##################################################" >>${result_file} | |
2977 date +"# Completed at %F %H:%M:%S %A ${result_file}" >> ${result_file} | |
2978 echo "# " ${wd} | |
2979 echo "#" $(uname -a) >> ${result_file} | |
2980 echo "# SETUP: ${setup}" >>${result_file} | |
2981 echo "##################################################" >>${result_file} | |
2982 echo "# COMPILE " >> ${result_file} | |
2983 for ff in $(find . -name "*.compile_time"); do | |
2984 cat ${ff} >> ${result_file} | |
2985 done | |
2986 echo "# RUN " >> ${result_file} | |
2987 for ff in $(find . -name "*.run_time"); do | |
2988 cat ${ff} >> ${result_file} | |
2989 done | |
2990 cat ${result_file} | |
2991 ) | |
2992 } | |
2993 | |
2994 | |
2995 #@ timed-test-spec <result-file> <official-spec-dir> <setup> ... - run spec and | |
2996 #@ measure time / size data. Data is emitted to stdout, but also collected | |
2997 #@ in <result-file>. <result-file> is not cleared across runs (but temp files | |
2998 #@ are cleared on each run). | |
2999 #@ Note that the VERIFY variable effects the timing! | |
3000 timed-test-spec() { | |
3001 if ${BUILD_PLATFORM_MAC} ; then | |
3002 echo "Timed-test-spec is not currently supported on MacOS" | |
3003 exit -1 | |
3004 fi | |
3005 if [ "$#" -lt "3" ]; then | |
3006 echo "timed-test-spec {result-file} {spec2krefdir} {setupfunc}" \ | |
3007 "[ref|train] [benchmark]*" | |
3008 exit 1 | |
3009 fi | |
3010 result_file=$1 | |
3011 official=$(GetAbsolutePath $2) | |
3012 setup=$3 | |
3013 shift 3 | |
3014 spushd tests/spec2k | |
3015 ./run_all.sh CleanBenchmarks "$@" | |
3016 ./run_all.sh PopulateFromSpecHarness ${official} "$@" | |
3017 ./run_all.sh TimedBuildAndRunBenchmarks ${setup} "$@" | |
3018 CollectTimingInfo $(pwd) ${result_file} ${setup} | |
3019 spopd | |
3020 } | |
3021 | |
3022 | |
3023 #@ test-bot-base - tests that must pass on the bots to validate a TC | |
3024 test-bot-base() { | |
3025 test-all | |
3026 } | |
3027 | |
3028 | 2778 |
3029 ###################################################################### | 2779 ###################################################################### |
3030 ###################################################################### | 2780 ###################################################################### |
3031 # | 2781 # |
3032 # UTILITIES | 2782 # UTILITIES |
3033 # | 2783 # |
3034 ###################################################################### | 2784 ###################################################################### |
3035 ###################################################################### | 2785 ###################################################################### |
3036 | 2786 |
3037 #@------------------------------------------------------------------------- | 2787 #@------------------------------------------------------------------------- |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3217 [ $# = 0 ] && set -- help # Avoid reference to undefined $1. | 2967 [ $# = 0 ] && set -- help # Avoid reference to undefined $1. |
3218 if [ "$(type -t $1)" != "function" ]; then | 2968 if [ "$(type -t $1)" != "function" ]; then |
3219 #Usage | 2969 #Usage |
3220 echo "ERROR: unknown function '$1'." >&2 | 2970 echo "ERROR: unknown function '$1'." >&2 |
3221 echo "For help, try:" | 2971 echo "For help, try:" |
3222 echo " $0 help" | 2972 echo " $0 help" |
3223 exit 1 | 2973 exit 1 |
3224 fi | 2974 fi |
3225 | 2975 |
3226 "$@" | 2976 "$@" |
OLD | NEW |