Beispiel #1
0
def main():
    results = []

    banner('Code validation')

    result = check_copyright.main()
    results.append(('Check copyright', result))

    result = check_spacing.main()
    results.append(('Check spacing', result))

    result = check_tabs.main()
    results.append(('Check tabs', result))

    result = check_doc.main()
    results.append(('Check doc', result))

    result = subprocess.call('python -m pycodestyle tools/', shell=True)
    results.append(('PyCodeStyle', result))

    banner('Build and run framework tests')

    result = subprocess.call('CC=gcc make clean test', shell=True)
    results.append(('Framework tests', result))

    banner('Test building the framework library')

    cmd = \
        'CC=gcc ' \
        'BS_FIRMWARE_CPU=host ' \
        'make clean lib-framework'
    result = subprocess.call(cmd, shell=True)
    results.append(('Framework build (Host, GCC)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'BS_FIRMWARE_CPU=cortex-m3 ' \
        'make clean lib-framework'
    result = subprocess.call(cmd, shell=True)
    results.append(('Framework build (Cortex-M3, GCC)', result))

    cmd = \
        'CC=armclang ' \
        'BS_FIRMWARE_CPU=cortex-m3 ' \
        'make clean lib-framework'
    result = subprocess.call(cmd, shell=True)
    results.append(('Framework build (Cortex-M3, ARM)', result))

    banner('Test building arch library')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'BS_FIRMWARE_CPU=cortex-m3 ' \
        'make clean lib-arch'
    result = subprocess.call(cmd, shell=True)
    results.append(('Arch build (Cortex-M3, GCC)', result))

    cmd = \
        'CC=armclang ' \
        'BS_FIRMWARE_CPU=cortex-m3 ' \
        'make clean lib-arch'
    result = subprocess.call(cmd, shell=True)
    results.append(('Arch build (Cortex-M3, ARM)', result))

    banner('Test building host product')

    cmd = \
        'CC=gcc ' \
        'PRODUCT=host ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product host build (GCC)', result))

    banner('Test building sgm775 product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgm775 ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgm775 ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgm775 ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgm775 ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 debug build (ARM)', result))

    banner('Test building sgi575 product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgi575 ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgi575 release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgi575 ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgi575 release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgi575 ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgi575 debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgi575 ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgi575 debug build (ARM)', result))

    banner('Test building n1sdp product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=n1sdp ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product n1sdp debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=n1sdp ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product n1sdp debug build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=n1sdp ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product n1sdp release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=n1sdp ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product n1sdp release build (ARM)', result))

    banner('Test building rdn1e1 product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=rdn1e1 ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rdn1e1 release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=rdn1e1 ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rdn1e1 release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=rdn1e1 ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rdn1e1 debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=rdn1e1 ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rdn1e1 debug build (ARM)', result))

    banner('Test building juno product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=juno ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product Juno debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=juno ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product Juno debug build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=juno ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product Juno release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=juno ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product Juno release build (ARM)', result))

    banner('Test building synquacer product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=synquacer ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product synquacer release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=synquacer ' \
        'MODE=release ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product synquacer release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=synquacer ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product synquacer debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=synquacer ' \
        'MODE=debug ' \
        'make clean all'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product synquacer debug build (ARM)', result))

    banner('Tests summary')

    total_success = 0
    for result in results:
        if result[1] == 0:
            total_success += 1
            verbose_result = 'Success'
        else:
            verbose_result = 'Failed'
        print('{}: {}'.format(result[0], verbose_result))

    assert total_success <= len(results)

    print('{} / {} passed ({}% pass rate)'.format(
        total_success, len(results), int(total_success * 100 / len(results))))

    if total_success < len(results):
        return 1
    else:
        return 0
Beispiel #2
0
def main():
    results = []

    banner('Code validation')

    result = check_copyright.main()
    results.append(('Check copyright', result))

    result = check_spacing.main()
    results.append(('Check spacing', result))

    result = check_tabs.main()
    results.append(('Check tabs', result))

    result = check_doc.main()
    results.append(('Check doc', result))

    result = subprocess.call('pep8 tools/', shell=True)
    results.append(('PEP8', result))

    banner('Build and run framework tests')

    result = subprocess.call('make clean test', shell=True)
    results.append(('Framework tests', result))

    banner('Test building the framework library')

    cmd = 'CROSS_COMPILE= BS_FIRMWARE_CPU=host make lib-framework'
    result = subprocess.call(cmd, shell=True)
    results.append(('Framework build (host)', result))

    cmd = 'CROSS_COMPILE=arm-none-eabi- BS_FIRMWARE_CPU=cortex-m3 make '\
          'lib-framework'
    result = subprocess.call(cmd, shell=True)
    results.append(('Framework build (Cortex-M3)', result))

    banner('Test building arch library')

    cmd = 'CROSS_COMPILE=arm-none-eabi- BS_FIRMWARE_CPU=cortex-m3 make '\
          'lib-arch'
    result = subprocess.call(cmd, shell=True)
    results.append(('Arch build (Cortex-M3)', result))

    banner('Test building host product')

    cmd = 'CROSS_COMPILE= PRODUCT=host make '
    result = subprocess.call(cmd, shell=True)
    results.append(('Product host build', result))

    banner('Test building sgm775 product')

    cmd = 'CROSS_COMPILE=arm-none-eabi- PRODUCT=sgm775 make'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 build', result))

    banner('Test building msys3 product')

    cmd = 'CROSS_COMPILE=arm-none-eabi- PRODUCT=msys3 make'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product msys3 build', result))

    banner('Test building infrasys4 product')

    cmd = 'CROSS_COMPILE=arm-none-eabi- PRODUCT=infrasys4 make'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product infrasys4 build', result))

    banner('Tests summary')

    total_success = 0
    for result in results:
        if result[1] == 0:
            total_success += 1
            verbose_result = 'Success'
        else:
            verbose_result = 'Failed'
        print('{}: {}'.format(result[0], verbose_result))

    assert total_success <= len(results)

    print('{} / {} passed ({}% pass rate)'.format(
        total_success, len(results), int(total_success * 100 / len(results))))

    if total_success < len(results):
        return 1
    else:
        return 0
Beispiel #3
0
def main():
    results = []

    banner('Code validation')

    result = check_copyright.main()
    results.append(('Check copyright', result))

    result = check_spacing.main()
    results.append(('Check spacing', result))

    result = check_tabs.main()
    results.append(('Check tabs', result))

    result = check_doc.main()
    results.append(('Check doc', result))

    result = subprocess.call('python -m pycodestyle tools/', shell=True)
    results.append(('PyCodeStyle', result))

    banner('Build and run framework tests')

    result = subprocess.call('CC=gcc make clean test', shell=True)
    results.append(('Framework tests', result))

    banner('Test building host product')

    cmd = \
        'CC=gcc ' \
        'PRODUCT=host ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product host build (GCC)', result))

    banner('Test building sgm775 product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgm775 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgm775 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgm775 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgm775 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm775 debug build (ARM)', result))

    banner('Test building sgi575 product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgi575 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgi575 release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgi575 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgi575 release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgi575 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgi575 debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgi575 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgi575 debug build (ARM)', result))

    banner('Test building n1sdp product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=n1sdp ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product n1sdp debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=n1sdp ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product n1sdp debug build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=n1sdp ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product n1sdp release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=n1sdp ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product n1sdp release build (ARM)', result))

    banner('Test building rdn1e1 product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=rdn1e1 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rdn1e1 release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=rdn1e1 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rdn1e1 release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=rdn1e1 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rdn1e1 debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=rdn1e1 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rdn1e1 debug build (ARM)', result))

    banner('Test building juno product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=juno ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product Juno debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=juno ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product Juno debug build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=juno ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product Juno release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=juno ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product Juno release build (ARM)', result))

    banner('Test building synquacer product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=synquacer ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product synquacer release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=synquacer ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product synquacer release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=synquacer ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product synquacer debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=synquacer ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product synquacer debug build (ARM)', result))

    banner('Test building sgm776 product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgm776 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm776 release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgm776 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm776 release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=sgm776 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm776 debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=sgm776 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product sgm776 debug build (ARM)', result))

    banner('Test building rddaniel product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=rddaniel ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rddaniel release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=rddaniel ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rddaniel release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=rddaniel ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rddaniel debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=rddaniel ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rddaniel debug build (ARM)', result))

    banner('Test building rddanielxlr product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=rddanielxlr ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rddanielxlr release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=rddanielxlr ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rddanielxlr release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=rddanielxlr ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rddanielxlr debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=rddanielxlr ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rddanielxlr debug build (ARM)', result))

    banner('Test building tc0 product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=tc0 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product tc0 release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=tc0 ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product tc0 release build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=tc0 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product tc0 debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=tc0 ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product tc0 debug build (ARM)', result))

    banner('Test building morello product')

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=morello ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product morello debug build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=morello ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product morello debug build (ARM)', result))

    cmd = \
        'CC=arm-none-eabi-gcc ' \
        'PRODUCT=morello ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product morello release build (GCC)', result))

    cmd = \
        'CC=armclang ' \
        'PRODUCT=morello ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product morello release build (ARM)', result))

    banner('Test building rcar product')

    cmd = \
        'CC=aarch64-none-elf-gcc ' \
        'PRODUCT=rcar ' \
        'MODE=debug ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rcar debug build (ARM)', result))

    cmd = \
        'CC=aarch64-none-elf-gcc ' \
        'PRODUCT=rcar ' \
        'MODE=release ' \
        'make clean all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rcar release build (ARM)', result))

    banner('Tests summary')

    total_success = 0
    for result in results:
        if result[1] == 0:
            total_success += 1
            verbose_result = 'Success'
        else:
            verbose_result = 'Failed'
        print('{}: {}'.format(result[0], verbose_result))

    assert total_success <= len(results)

    print('{} / {} passed ({}% pass rate)'.format(
        total_success,
        len(results),
        int(total_success * 100 / len(results))))

    if total_success < len(results):
        return 1
    else:
        return 0
Beispiel #4
0
def main():
    machine = platform.machine()
    results = []
    threads = len(os.sched_getaffinity(0))

    parser = argparse.ArgumentParser()
    target = parser.add_argument_group(
        'Unit tests',
        'Note: At least one unit test target or --skip-tests must be selected')

    target.add_argument('--test-ssh',
                        help='Run unit tests on a target system via SSH. This \
                              argument requires the following parameters:\n\
                              <ip|hostname>[:port].\n\
                              The password and username for the target system \
                              are hardcoded in the script.',
                        required=False,
                        metavar="<ip|hostname>[:port]")

    target.add_argument('--test-fvp',
                        help='Run unit tests on a fast-model. This argument \
                              requires the following parameters:\n\
                              <path/to/system/binaries>',
                        required=False,
                        metavar="<path>",
                        nargs=1)

    target.add_argument('--skip-tests',
                        help='Only do the style validation and building of \
                              the tests. Tests are not excecuted.',
                        action='store_true')

    target.add_argument('--prebuild-path',
                        '-p',
                        help='Location of an existing build folder to use for \
                              the remote unit tests instead of building \
                              inside the remote machine. This argument \
                              requires the following parameters:\n\
                              <path/to/build/folder>',
                        required=False,
                        metavar="<path>",
                        default=None,
                        nargs=1)

    args = parser.parse_args(sys.argv[1:])
    if args.prebuild_path:
        args.prebuild_path =\
            os.path.abspath(os.path.expanduser(args.prebuild_path[0]))

    if not args.test_ssh and not args.test_fvp and not args.skip_tests:
        print("No unit test target or --skip-tests supplied\n",
              file=sys.stderr)
        parser.print_help()
        return 1

    banner('Style validation')

    result = check_copyright.main()
    results.append(('Check copyright', result))

    result = check_tabs.main()
    results.append(('Check tabs', result))

    result = check_EOF.main()
    results.append(('Check EOF', result))

    result = subprocess.call(
        'pycodestyle --show-source tools/ '
        '--exclude=arm_platform_build',
        shell=True)
    results.append(('Pycodestyle', result))

    with build_directory():
        subprocess.call('cmake -DBUILD_DOC=ON ..', shell=True)
        result = subprocess.call('make doc', shell=True)
        results.append(('Check doc', result))

    banner('Builds')

    cmake_params = '-DBUILD_DOC=ON -DBUILD_TEST=ON '
    build_info = ''
    if machine == 'x86_64':
        print('Using cross-compilation')
        cmake_params += '-DCMAKE_TOOLCHAIN_FILE=../tools/toolchain.cmake'
        build_info += ' (cross-compiled)'

    with build_directory():
        subprocess.call('cmake {} ..'.format(cmake_params), shell=True)
        result = subprocess.call('make -j{}'.format(threads), shell=True)
        results.append(('Build libddssec{}'.format(build_info), result))
        library_build_result = result

    with build_directory():
        subprocess.call('cmake ..', shell=True)
        result = subprocess.call('make ta', shell=True)
        results.append(('Build trusted application', result))
        ta_build_result = result

    # Skip the unit tests if either build fails or if args.skip_tests is set
    if library_build_result != 0 or ta_build_result != 0 or args.skip_tests:
        print('Skipping unit tests')
        results.append(('Unit tests on remote machine', None))
        results.append(('Unit tests on FVP', None))
    else:
        result = run_unit_tests(args)
        for r in result:
            results.append(r)

    return process_results(results)
Beispiel #5
0
def main():
    machine = platform.machine()
    results = []
    threads = len(os.sched_getaffinity(0))
    prebuild_path = None

    parser = argparse.ArgumentParser()
    target = parser.add_argument_group(
        'Unit tests',
        'Note: At least one unit test target or --skip-tests must be selected')

    target.add_argument('--test-ssh',
                        help='Run unit tests on a target system via SSH. This \
                              argument requires the following parameters:\n\
                              <ip|hostname>[:port].\n\
                              The password and username for the target system \
                              are hardcoded in the script.',
                        required=False,
                        metavar="<ip|hostname>[:port]")

    target.add_argument('--test-fvp',
                        help='Run unit tests on a fast-model. This argument \
                              requires the following parameters:\n\
                              <path/to/system/binaries>',
                        required=False,
                        metavar="<path>",
                        nargs=1)

    target.add_argument('--skip-tests',
                        help='Only do the style validation and building of \
                              the tests. Tests are not excecuted.',
                        action='store_true')

    target.add_argument('--build-on-target',
                        '-p',
                        help='Build tests natively on the target (e.g. \
                              FastModels). This option is much slower than \
                              using cross-compilation but has the benefit of \
                              testing a native build.',
                        required=False,
                        default=False,
                        action='store_true')

    args = parser.parse_args(sys.argv[1:])

    if not args.test_ssh and not args.test_fvp and not args.skip_tests:
        print("No unit test target or --skip-tests supplied\n",
              file=sys.stderr)
        parser.print_help()
        return 1

    banner('Style validation')

    result = check_copyright.main()
    results.append(('Check copyright', result))

    result = check_tabs.main()
    results.append(('Check tabs', result))

    result = check_EOF.main()
    results.append(('Check EOF', result))

    result = subprocess.call(
        'pycodestyle --show-source tools/ '
        '--exclude=arm_platform_build',
        shell=True)
    results.append(('Pycodestyle', result))

    basedir = os.getcwd()
    with build_directory():
        subprocess.call('cmake -DBUILD_DOC=ON {}'.format(basedir), shell=True)
        result = subprocess.call('make doc', shell=True)
        results.append(('Check doc', result))

    banner('Builds')

    cmake_params = '-DBUILD_DOC=ON -DBUILD_TEST=ON '
    build_info = ''

    if machine == 'x86_64':
        print('Using cross-compilation')
        cmake_params += '-DCMAKE_TOOLCHAIN_FILE=../tools/toolchain.cmake'
        build_info += ' (cross-compiled)'

    persist_test_build = not args.build_on_target
    with build_directory(persist=persist_test_build) as build_dir_name:
        subprocess.call('cmake {} {}'.format(cmake_params, basedir),
                        shell=True)

        result = subprocess.call('make -j{}'.format(threads), shell=True)
        results.append(('Build libddssec{}'.format(build_info), result))
        library_build_result = result

        result = subprocess.call('make test-ta'.format(threads), shell=True)
        results.append(('Build test-ta{}'.format(build_info), result))
        ta_build_result = result

        if persist_test_build:
            prebuild_path = build_dir_name

    with build_directory():
        subprocess.call('cmake {}'.format(basedir), shell=True)
        result = subprocess.call('make ta', shell=True)
        results.append(('Build trusted application', result))

    # Skip the unit tests if either build fails or if args.skip_tests is set
    if library_build_result != 0 or ta_build_result != 0 or args.skip_tests:
        print('Skipping unit tests')
        results.append(('Unit tests on remote machine', None))
        results.append(('Unit tests on FVP', None))
    else:
        result = run_unit_tests(args, prebuild_path)
        for r in result:
            results.append(r)

    if persist_test_build:
        shutil.rmtree(prebuild_path)

    return process_results(results)
Beispiel #6
0
def main():
    results = []

    banner('Code validation')

    result = check_copyright.main()
    results.append(('Check copyright', result))

    result = check_spacing.main()
    results.append(('Check spacing', result))

    result = check_tabs.main()
    results.append(('Check tabs', result))

    result = check_doc.main()
    results.append(('Check doc', result))

    result = subprocess.call('python -m pycodestyle tools/', shell=True)
    results.append(('PyCodeStyle', result))

    banner('Build and run framework tests')

    result = subprocess.call('CC=gcc make clean test', shell=True)
    results.append(('Framework tests', result))

    banner('Test building host product')

    subprocess.run('make clean', shell=True)

    cmd = \
        'CC=gcc ' \
        'PRODUCT=host ' \
        'make all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product host build (GCC)', result))

    product_build_debug_and_release('sgm775', results)
    product_build_debug_and_release('sgi575', results)
    product_build_debug_and_release('n1sdp', results)
    product_build_debug_and_release('rdn1e1', results)
    product_build_debug_and_release('juno', results)
    product_build_debug_and_release('synquacer', results)
    product_build_debug_and_release('sgm776', results)
    product_build_debug_and_release('rdv1', results)
    product_build_debug_and_release('rdv1mc', results)
    product_build_debug_and_release('rdn2', results)
    product_build_debug_and_release('tc0', results)
    product_build_debug_and_release('tc1', results)
    product_build_debug_and_release('morello', results)

    banner('Test building rcar product')

    # We need to set SYSROOT to </path/to/gcc-toolchain>/aarch64-none-elf
    # to make LLVM work properly
    SYS_ROOT_PATH = \
        os.path.abspath(
            subprocess.check_output(["which", "aarch64-none-elf-gcc"]).decode()
            + '/../../aarch64-none-elf'
        )

    subprocess.run('make clean', shell=True)

    cmd = \
        'CC=aarch64-none-elf-gcc ' \
        'PRODUCT=rcar ' \
        'MODE=debug ' \
        'make all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rcar debug build (GCC-AArch64)', result))

    subprocess.run('make clean', shell=True)

    cmd = \
        'SYSROOT='+SYS_ROOT_PATH+' ' \
        'CC=clang-11 ' \
        'PRODUCT=rcar ' \
        'MODE=debug ' \
        'make all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rcar debug build (LLVM)', result))

    subprocess.run('make clean', shell=True)

    cmd = \
        'CC=aarch64-none-elf-gcc ' \
        'PRODUCT=rcar ' \
        'MODE=release ' \
        'make all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rcar release build (GCC-AArch64)', result))

    subprocess.run('make clean', shell=True)

    cmd = \
        'SYSROOT='+SYS_ROOT_PATH+' ' \
        'CC=clang-11 ' \
        'PRODUCT=rcar ' \
        'MODE=release ' \
        'make all -j'
    result = subprocess.call(cmd, shell=True)
    results.append(('Product rcar release build (LLVM)', result))

    banner('Tests summary')

    total_success = 0
    for result in results:
        if result[1] == 0:
            total_success += 1
            verbose_result = 'Success'
        else:
            verbose_result = 'Failed'
        print('{}: {}'.format(result[0], verbose_result))

    assert total_success <= len(results)

    print('{} / {} passed ({}% pass rate)'.format(
        total_success, len(results), int(total_success * 100 / len(results))))

    if total_success < len(results):
        return 1
    else:
        return 0
Beispiel #7
0
def main():
    results = []

    try:
        client = docker.from_env()

        banner("Spawning container")

        try:
            return dockerize(client)
        except Exception as ex:
            print(ex)

            return 1
    except DockerException:
        pass

    banner("Code validation")

    result = check_copyright.main()
    results.append(("Check copyright", result))

    result = check_spacing.main()
    results.append(("Check spacing", result))

    result = check_tabs.main()
    results.append(("Check tabs", result))

    result = check_doc.main()
    results.append(("Check doc", result))

    banner("Build and run framework tests")

    result = subprocess.call("CC=gcc make clean test", shell=True)
    results.append(("Framework tests", result))

    banner("Test building host product")

    products = ['host', 'juno', 'rdv1', 'sgm775']

    build_types = ['debug', 'release']
    toolchains = ['GNU', 'ArmClang']

    for product in products:
        banner("Test building {} product".format(product))
        for toolchain in toolchains:
            if product == 'rcar' and toolchain == 'ArmClang':
                continue
            for build_type in build_types:

                cmd = 'make -f Makefile.cmake '
                cmd += 'PRODUCT={} TOOLCHAIN={} MODE={}'.format(
                    product, toolchain, build_type)
                result = subprocess.call(cmd, shell=True)
                results.append(
                    ("Product {} build ({})".format(product,
                                                    toolchain), result))

    banner('Tests summary')

    total_success = 0
    for result in results:
        if result[1] == 0:
            total_success += 1
            verbose_result = "Success"
        else:
            verbose_result = "Failed"
        print("{}: {}".format(result[0], verbose_result))

    assert total_success <= len(results)

    print("{} / {} passed ({}% pass rate)".format(
        total_success, len(results), int(total_success * 100 / len(results))))

    if total_success < len(results):
        return 1
    else:
        return 0