diff options
Diffstat (limited to 'tests/SConscript')
-rw-r--r-- | tests/SConscript | 120 |
1 files changed, 67 insertions, 53 deletions
diff --git a/tests/SConscript b/tests/SConscript index 26d422c10b..0907c5713b 100644 --- a/tests/SConscript +++ b/tests/SConscript @@ -1,4 +1,7 @@ -# Copyright (c) 2017-2019 ARM Limited. +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2017-2023,2024 Arm Limited. # # SPDX-License-Identifier: MIT # @@ -19,7 +22,6 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import SCons import os.path Import('env') @@ -28,12 +30,11 @@ Import('install_bin') # vars is imported from arm_compute: variables = [ - BoolVariable("benchmark_examples", "Build benchmark examples programs", True), - BoolVariable("validate_examples", "Build validate examples programs", True), + BoolVariable("benchmark_examples", "Build benchmark examples programs", False), + BoolVariable("validate_examples", "Build validate examples programs", False), BoolVariable("reference_openmp", "Build reference validation with openmp", True), - #FIXME Switch the following two options to False before releasing - BoolVariable("validation_tests", "Build validation test programs", True), - BoolVariable("benchmark_tests", "Build benchmark test programs", True), + BoolVariable("validation_tests", "Build validation test programs", False), + BoolVariable("benchmark_tests", "Build benchmark test programs", False), ("test_filter", "Pattern to specify the tests' filenames to be compiled", "*.cpp") ] @@ -67,41 +68,45 @@ Import("arm_compute_test_framework") test_env.Append(LIBS = arm_compute_test_framework) # Disable floating-point expression contraction (e.g. fused multiply-add operations) -test_env.Append(CXXFLAGS = ['-ffp-contract=off']) +if not 'windows' in env['os']: + test_env.Append(CXXFLAGS = ['-ffp-contract=off']) # Remove -Wnoexcept from tests if 'g++' in test_env['CXX'] and '-Wnoexcept' in test_env['CXXFLAGS']: test_env['CXXFLAGS'].remove("-Wnoexcept") -if env['os'] in ['android', 'bare_metal'] or env['standalone']: +load_whole_archive = '-Wl,--whole-archive' +noload_whole_archive = '-Wl,--no-whole-archive' +if 'macos' in test_env['os']: + load_whole_archive = '-Wl,-force_load' + noload_whole_archive = '' + +if (env['multi_isa']): + test_env.Append(CPPDEFINES=['ARM_COMPUTE_ENABLE_BF16']) + +if env['os'] in ['android', 'macos', 'bare_metal'] or env['standalone']: Import("arm_compute_a") - Import("arm_compute_core_a") Import("arm_compute_graph_a") - test_env.Append(LIBS = [arm_compute_graph_a, arm_compute_a, arm_compute_core_a]) + test_env.Append(LIBS = [arm_compute_graph_a, arm_compute_a]) arm_compute_lib = arm_compute_graph_a else: Import("arm_compute_graph_so") - Import("arm_compute_core_a") - test_env.Append(LIBS = ["arm_compute_graph", "arm_compute", "arm_compute_core"]) + test_env.Append(LIBS = ["arm_compute_graph", "arm_compute"]) arm_compute_lib = arm_compute_graph_so if env['os'] in ['bare_metal']: Import("bootcode_o") -#FIXME Delete before release -if env['internal_only']: - test_env.Append(CPPDEFINES=['INTERNAL_ONLY']) - -test_env.Append(CPPPATH = ["#3rdparty/include"]) -test_env.Append(LIBPATH = ["#3rdparty/%s/%s" % (env['os'], env['arch'])]) +if env['external_tests_dir']: + test_env.Append(CPPPATH = [env['external_tests_dir'] + "/include"]) + test_env.Append(LIBPATH = [env['external_tests_dir'] + "/%s/%s" % (env['os'], env['arch'])]) common_files = Glob('*.cpp') common_objects = [test_env.StaticObject(f) for f in common_files] files_benchmark = Glob('benchmark/*.cpp') -#FIXME Delete before release -if env['internal_only']: - files_benchmark += Glob('../3rdparty/tests/benchmark/*.cpp') +if env['external_tests_dir']: + files_benchmark += Glob(env['external_tests_dir'] + '/tests/benchmark/*.cpp') # Add unit tests files_validation = Glob('validation/UNIT/*/*.cpp') @@ -112,29 +117,33 @@ filter_pattern = test_env['test_filter'] files_validation += Glob('validation/CPP/' + filter_pattern) if env['opencl']: + if env['experimental_dynamic_fusion']: + files_validation += Glob('validation/dynamic_fusion/gpu/' + filter_pattern) + files_validation += Glob('validation/dynamic_fusion/gpu/cl/' + filter_pattern) + filter_pattern = test_env['test_filter'] test_env.Append(CPPDEFINES=['ARM_COMPUTE_CL']) files_benchmark += Glob('benchmark/CL/*/' + filter_pattern) files_benchmark += Glob('benchmark/CL/' + filter_pattern) - #FIXME Delete before release - if env['internal_only']: - files_benchmark += Glob('../3rdparty/tests/benchmark/CL/' + filter_pattern) + if env['external_tests_dir']: + files_benchmark += Glob(env['external_tests_dir'] + '/tests/benchmark/CL/' + filter_pattern) files_validation += Glob('validation/CL/*/' + filter_pattern) files_validation += Glob('validation/CL/' + filter_pattern) - #FIXME Delete before release - if env['internal_only']: - files_validation += Glob('../3rdparty/tests/validation/CL/' + filter_pattern) + + if env['external_tests_dir']: + files_validation += Glob(env['external_tests_dir'] + '/tests/validation/CL/' + filter_pattern) + files_validation += Glob('validation/gpu/unit/*.cpp') if env['neon']: filter_pattern = test_env['test_filter'] files_benchmark += Glob('benchmark/NEON/*/' + filter_pattern) files_benchmark += Glob('benchmark/NEON/' + filter_pattern) - #FIXME Delete before release - if env['internal_only']: - files_benchmark += Glob('../3rdparty/tests/benchmark/NEON/' + filter_pattern) + test_env.Append(CPPPATH = ["#/src/cpu/kernels/assembly/"]) + if env['external_tests_dir']: + files_benchmark += Glob(env['external_tests_dir'] + '/tests/benchmark/NEON/' + filter_pattern) files_validation += Glob('validation/NEON/' + filter_pattern) if env['os'] == 'bare_metal': @@ -143,21 +152,16 @@ if env['neon']: files_validation += Glob('validation/NEON/UNIT/TensorAllocator.cpp' + filter_pattern) else: files_validation += Glob('validation/NEON/*/' + filter_pattern) + if env['external_tests_dir']: + files_validation += Glob(env['external_tests_dir'] + '/tests/validation/NEON/' + filter_pattern) + files_validation += Glob('validation/cpu/unit/*.cpp') - -if env['gles_compute']: - test_env.Append(CPPDEFINES=['ARM_COMPUTE_GC']) - - files_benchmark += Glob('benchmark/GLES_COMPUTE/*/*.cpp') - files_benchmark += Glob('benchmark/GLES_COMPUTE/*.cpp') - - files_validation += Glob('validation/GLES_COMPUTE/*/*.cpp') - files_validation += Glob('validation/GLES_COMPUTE/*.cpp') - +extra_link_flags = [] if env['os'] == 'android': test_env.Append(LIBS = ["log"]) -elif env['os'] != 'bare_metal': +elif env['os'] not in ['windows','bare_metal', 'macos']: test_env.Append(LIBS = ["rt"]) + extra_link_flags += ['-fstack-protector-strong'] if test_env['benchmark_tests']: arm_compute_benchmark = test_env.Program('arm_compute_benchmark', files_benchmark + common_objects) @@ -167,18 +171,24 @@ if test_env['benchmark_tests']: Default(arm_compute_benchmark) Export('arm_compute_benchmark') -bm_link_flags = ['-fstack-protector-strong'] +bm_link_flags = [] if test_env['linker_script']: bm_link_flags += ['-Wl,--build-id=none', '-T', env['linker_script']] -if test_env['reference_openmp'] and env['os'] != 'bare_metal': - test_env['CXXFLAGS'].append('-fopenmp') - test_env['LINKFLAGS'].append('-fopenmp') +if test_env['reference_openmp'] and env['os'] not in ['bare_metal', 'macos','windows']: + test_env['CXXFLAGS'].append('-fopenmp') + test_env['LINKFLAGS'].append('-fopenmp') + + if 'ndk_above_r21' in env: + test_env['LINKFLAGS'].append('-static-openmp') + +# Testing for fixed format GEMM kernels. +if env['fixed_format_kernels'] and test_env['validation_tests']: + test_env.Append(CPPDEFINES = ['ARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS']) if test_env['validation_tests']: - arm_compute_validation_framework = env.StaticLibrary('arm_compute_validation_framework', Glob('validation/reference/*.cpp') + Glob('validation/*.cpp'), LINKFLAGS=test_env['LINKFLAGS'], CXXFLAGS=test_env['CXXFLAGS'], LIBS= [ arm_compute_test_framework, arm_compute_core_a]) + arm_compute_validation_framework = env.StaticLibrary('arm_compute_validation_framework', Glob('validation/reference/*.cpp') + Glob('validation/*.cpp'), LINKFLAGS=test_env['LINKFLAGS'], CXXFLAGS=test_env['CXXFLAGS'], LIBS= [ arm_compute_test_framework ]) Depends(arm_compute_validation_framework , arm_compute_test_framework) - Depends(arm_compute_validation_framework , arm_compute_core_a) program_objects = files_validation + common_objects if test_env['os'] == 'bare_metal': @@ -218,8 +228,8 @@ if test_env['validation_tests']: graph_utils = test_env.Object(source="../utils/GraphUtils.cpp", target="GraphUtils") for file in Glob("validate_examples/graph_*.cpp"): example = "validate_" + os.path.basename(os.path.splitext(str(file))[0]) - if env['os'] in ['android', 'bare_metal'] or env['standalone']: - prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils]+ files_validate_examples, LIBS = test_env["LIBS"] + [ arm_compute_validation_framework ], LINKFLAGS=test_env["LINKFLAGS"]+['-Wl,--whole-archive',arm_compute_lib,'-Wl,--no-whole-archive'] + bm_link_flags) + if env['os'] in ['android', 'macos', 'bare_metal'] or env['standalone']: + prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils]+ files_validate_examples, LIBS = test_env["LIBS"] + [ arm_compute_validation_framework ], LINKFLAGS=test_env["LINKFLAGS"]+[load_whole_archive, arm_compute_lib, noload_whole_archive] + bm_link_flags + extra_link_flags) arm_compute_validate_examples += [ prog ] else: #-Wl,--allow-shlib-undefined: Ignore dependencies of dependencies @@ -239,7 +249,10 @@ if test_env['benchmark_examples']: graph_utils = test_env.Object(source="../utils/GraphUtils.cpp", target="GraphUtils") graph_params = test_env.Object(source="../utils/CommonGraphOptions.cpp", target="CommonGraphOptions") arm_compute_benchmark_examples = [] - for examples_folder in [ "../examples", "../3rdparty/examples"]: + all_examples_folders = ["../examples"] + if env['external_tests_dir']: + all_examples_folders.append(env['external_tests_dir'] + "/examples") + for examples_folder in all_examples_folders: if test_env['neon']: for file in Glob("%s/neon_*.cpp" % examples_folder): example = "benchmark_" + os.path.basename(os.path.splitext(str(file))[0]) @@ -267,13 +280,14 @@ if test_env['benchmark_examples']: # Graph examples for file in Glob("%s/graph_*.cpp" % examples_folder ): example = "benchmark_" + os.path.basename(os.path.splitext(str(file))[0]) - if env['os'] in ['android', 'bare_metal'] or env['standalone']: - prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils, graph_params]+ files_benchmark_examples, LIBS = test_env["LIBS"], LINKFLAGS=test_env["LINKFLAGS"]+['-Wl,--whole-archive',arm_compute_lib,'-Wl,--no-whole-archive'] + bm_link_flags) + if env['os'] in ['android', 'macos', 'bare_metal'] or env['standalone']: + prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils, graph_params]+ files_benchmark_examples, LIBS = test_env["LIBS"], LINKFLAGS=test_env["LINKFLAGS"]+[load_whole_archive, arm_compute_lib, noload_whole_archive] + bm_link_flags + extra_link_flags) arm_compute_benchmark_examples += [ prog ] else: #-Wl,--allow-shlib-undefined: Ignore dependencies of dependencies prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils, graph_params]+ files_benchmark_examples, LIBS = test_env["LIBS"] + ["arm_compute_graph"], LINKFLAGS=test_env["LINKFLAGS"]+['-Wl,--allow-shlib-undefined']) arm_compute_benchmark_examples += [ prog ] + arm_compute_benchmark_examples = install_bin(arm_compute_benchmark_examples) Depends(arm_compute_benchmark_examples, arm_compute_test_framework) Depends(arm_compute_benchmark_examples, arm_compute_lib) |