1*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2020 Arm Ltd. All rights reserved. 2*89c4ff92SAndroid Build Coastguard Worker# Copyright 2020 NXP 3*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Workerimport os 5*89c4ff92SAndroid Build Coastguard Workerimport sys 6*89c4ff92SAndroid Build Coastguard Workerimport shutil 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Workerimport pytest 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Workersys.path.append(os.path.abspath('..')) 11*89c4ff92SAndroid Build Coastguard Workerfrom setup import find_armnn, find_includes, linux_gcc_lib_search, check_armnn_version 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker@pytest.fixture(autouse=True) 15*89c4ff92SAndroid Build Coastguard Workerdef _setup_armnn(tmpdir): 16*89c4ff92SAndroid Build Coastguard Worker includes = str(os.path.join(tmpdir, 'include')) 17*89c4ff92SAndroid Build Coastguard Worker libs = str(os.path.join(tmpdir, 'lib')) 18*89c4ff92SAndroid Build Coastguard Worker os.environ["TEST_ARMNN_INCLUDE"] = includes 19*89c4ff92SAndroid Build Coastguard Worker os.environ["TEST_ARMNN_LIB"] = libs 20*89c4ff92SAndroid Build Coastguard Worker os.environ["EMPTY_ARMNN_INCLUDE"] = '' 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker os.mkdir(includes) 23*89c4ff92SAndroid Build Coastguard Worker os.mkdir(libs) 24*89c4ff92SAndroid Build Coastguard Worker 25*89c4ff92SAndroid Build Coastguard Worker with open(os.path.join(libs, "libarmnn.so"), "w"): 26*89c4ff92SAndroid Build Coastguard Worker pass 27*89c4ff92SAndroid Build Coastguard Worker 28*89c4ff92SAndroid Build Coastguard Worker with open(os.path.join(libs, "libarmnnSomeThing1.so"), "w"): 29*89c4ff92SAndroid Build Coastguard Worker pass 30*89c4ff92SAndroid Build Coastguard Worker with open(os.path.join(libs, "libarmnnSomeThing1.so.1"), "w"): 31*89c4ff92SAndroid Build Coastguard Worker pass 32*89c4ff92SAndroid Build Coastguard Worker with open(os.path.join(libs, "libarmnnSomeThing1.so.1.2"), "w"): 33*89c4ff92SAndroid Build Coastguard Worker pass 34*89c4ff92SAndroid Build Coastguard Worker 35*89c4ff92SAndroid Build Coastguard Worker with open(os.path.join(libs, "libarmnnSomeThing2.so"), "w"): 36*89c4ff92SAndroid Build Coastguard Worker pass 37*89c4ff92SAndroid Build Coastguard Worker 38*89c4ff92SAndroid Build Coastguard Worker with open(os.path.join(libs, "libSomeThing3.so"), "w"): 39*89c4ff92SAndroid Build Coastguard Worker pass 40*89c4ff92SAndroid Build Coastguard Worker 41*89c4ff92SAndroid Build Coastguard Worker yield 42*89c4ff92SAndroid Build Coastguard Worker 43*89c4ff92SAndroid Build Coastguard Worker del os.environ["TEST_ARMNN_INCLUDE"] 44*89c4ff92SAndroid Build Coastguard Worker del os.environ["TEST_ARMNN_LIB"] 45*89c4ff92SAndroid Build Coastguard Worker del os.environ["EMPTY_ARMNN_INCLUDE"] 46*89c4ff92SAndroid Build Coastguard Worker shutil.rmtree(includes) 47*89c4ff92SAndroid Build Coastguard Worker shutil.rmtree(libs) 48*89c4ff92SAndroid Build Coastguard Worker 49*89c4ff92SAndroid Build Coastguard Worker 50*89c4ff92SAndroid Build Coastguard Workerdef test_find_armnn(tmpdir): 51*89c4ff92SAndroid Build Coastguard Worker lib_names, lib_paths = find_armnn(lib_name='libarmnn*.so', 52*89c4ff92SAndroid Build Coastguard Worker armnn_libs_env="TEST_ARMNN_LIB", 53*89c4ff92SAndroid Build Coastguard Worker default_lib_search=("/lib",)) 54*89c4ff92SAndroid Build Coastguard Worker armnn_includes = find_includes(armnn_include_env="TEST_ARMNN_INCLUDE") 55*89c4ff92SAndroid Build Coastguard Worker 56*89c4ff92SAndroid Build Coastguard Worker assert [':libarmnn.so', ':libarmnnSomeThing1.so', ':libarmnnSomeThing2.so'] == sorted(lib_names) 57*89c4ff92SAndroid Build Coastguard Worker assert [os.path.join(tmpdir, 'lib')] == lib_paths 58*89c4ff92SAndroid Build Coastguard Worker assert [os.path.join(tmpdir, 'include')] == armnn_includes 59*89c4ff92SAndroid Build Coastguard Worker 60*89c4ff92SAndroid Build Coastguard Worker 61*89c4ff92SAndroid Build Coastguard Workerdef test_find_armnn_default_path(tmpdir): 62*89c4ff92SAndroid Build Coastguard Worker lib_names, lib_paths = find_armnn(lib_name='libarmnn*.so', 63*89c4ff92SAndroid Build Coastguard Worker armnn_libs_env="RUBBISH_LIB", 64*89c4ff92SAndroid Build Coastguard Worker default_lib_search=(os.environ["TEST_ARMNN_LIB"],)) 65*89c4ff92SAndroid Build Coastguard Worker armnn_includes = find_includes('TEST_ARMNN_INCLUDE') 66*89c4ff92SAndroid Build Coastguard Worker assert [':libarmnn.so', ':libarmnnSomeThing1.so', ':libarmnnSomeThing2.so'] == sorted(lib_names) 67*89c4ff92SAndroid Build Coastguard Worker assert [os.path.join(tmpdir, 'lib')] == lib_paths 68*89c4ff92SAndroid Build Coastguard Worker assert [os.path.join(tmpdir, 'include')] == armnn_includes 69*89c4ff92SAndroid Build Coastguard Worker 70*89c4ff92SAndroid Build Coastguard Worker 71*89c4ff92SAndroid Build Coastguard Workerdef test_not_find_armnn(tmpdir): 72*89c4ff92SAndroid Build Coastguard Worker with pytest.raises(RuntimeError) as err: 73*89c4ff92SAndroid Build Coastguard Worker find_armnn(lib_name='libarmnn*.so', armnn_libs_env="RUBBISH_LIB", 74*89c4ff92SAndroid Build Coastguard Worker default_lib_search=("/lib",)) 75*89c4ff92SAndroid Build Coastguard Worker 76*89c4ff92SAndroid Build Coastguard Worker assert 'ArmNN library libarmnn*.so was not found in (\'/lib\',)' in str(err.value) 77*89c4ff92SAndroid Build Coastguard Worker 78*89c4ff92SAndroid Build Coastguard Worker 79*89c4ff92SAndroid Build Coastguard Worker@pytest.mark.parametrize("env", ["RUBBISH_INCLUDE", "EMPTY_ARMNN_INCLUDE"]) 80*89c4ff92SAndroid Build Coastguard Workerdef test_rubbish_armnn_include(tmpdir, env): 81*89c4ff92SAndroid Build Coastguard Worker includes = find_includes(armnn_include_env=env) 82*89c4ff92SAndroid Build Coastguard Worker assert includes == ['/usr/local/include', '/usr/include'] 83*89c4ff92SAndroid Build Coastguard Worker 84*89c4ff92SAndroid Build Coastguard Worker 85*89c4ff92SAndroid Build Coastguard Workerdef test_gcc_serch_path(): 86*89c4ff92SAndroid Build Coastguard Worker assert linux_gcc_lib_search() 87*89c4ff92SAndroid Build Coastguard Worker 88*89c4ff92SAndroid Build Coastguard Worker 89*89c4ff92SAndroid Build Coastguard Workerdef test_armnn_version(): 90*89c4ff92SAndroid Build Coastguard Worker check_armnn_version('32.0.0', '32.0.0') 91*89c4ff92SAndroid Build Coastguard Worker 92*89c4ff92SAndroid Build Coastguard Worker 93*89c4ff92SAndroid Build Coastguard Workerdef test_incorrect_armnn_version(): 94*89c4ff92SAndroid Build Coastguard Worker with pytest.raises(AssertionError) as err: 95*89c4ff92SAndroid Build Coastguard Worker check_armnn_version('32.0.0', '32.1.0') 96*89c4ff92SAndroid Build Coastguard Worker 97*89c4ff92SAndroid Build Coastguard Worker assert 'Expected ArmNN version is 32.1.0 but installed ArmNN version is 32.0.0' in str(err.value) 98*89c4ff92SAndroid Build Coastguard Worker 99*89c4ff92SAndroid Build Coastguard Worker 100*89c4ff92SAndroid Build Coastguard Workerdef test_armnn_version_patch_does_not_matter(): 101*89c4ff92SAndroid Build Coastguard Worker check_armnn_version('32.0.0', '32.0.1') 102