xref: /aosp_15_r20/external/armnn/scripts/generate_spdx.sh (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker#!/bin/bash
2*89c4ff92SAndroid Build Coastguard Worker#
3*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
4*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT
5*89c4ff92SAndroid Build Coastguard Worker#
6*89c4ff92SAndroid Build Coastguard Worker
7*89c4ff92SAndroid Build Coastguard Worker#
8*89c4ff92SAndroid Build Coastguard Worker# Script which uses the reuse license compliance tool: https://reuse.software/
9*89c4ff92SAndroid Build Coastguard Worker# to do the following:
10*89c4ff92SAndroid Build Coastguard Worker#  (a) check armnn for compliance
11*89c4ff92SAndroid Build Coastguard Worker#  (b) generate an SPDX file
12*89c4ff92SAndroid Build Coastguard Worker#  (c) insert into the SPDX file before the individual files section, SPDX files for
13*89c4ff92SAndroid Build Coastguard Worker#      all the third-party header only source libraries used by Arm NN
14*89c4ff92SAndroid Build Coastguard Worker#      to create a comprehensive LICENSE.spdx file for the armnn source code distribution
15*89c4ff92SAndroid Build Coastguard Worker#
16*89c4ff92SAndroid Build Coastguard Worker# Note to run correctly the script has to be run from the armnn root directory like so:
17*89c4ff92SAndroid Build Coastguard Worker#
18*89c4ff92SAndroid Build Coastguard Worker# ./scripts/generate_spdx.sh
19*89c4ff92SAndroid Build Coastguard Worker#
20*89c4ff92SAndroid Build Coastguard Worker
21*89c4ff92SAndroid Build Coastguard Worker# Check if the parent directory name is armnn
22*89c4ff92SAndroid Build Coastguard Worker# Get the name of the current directory
23*89c4ff92SAndroid Build Coastguard Workerresult=${PWD##*/}          # to assign to a variable
24*89c4ff92SAndroid Build Coastguard Workerresult=${result:-/}        # to correct for the case where PWD=/
25*89c4ff92SAndroid Build Coastguard Worker
26*89c4ff92SAndroid Build Coastguard Workerif [[ $result != "armnn" ]]
27*89c4ff92SAndroid Build Coastguard Workerthen
28*89c4ff92SAndroid Build Coastguard Worker    echo "not running from armnn directory"
29*89c4ff92SAndroid Build Coastguard Worker    exit -2
30*89c4ff92SAndroid Build Coastguard Workerfi
31*89c4ff92SAndroid Build Coastguard Worker
32*89c4ff92SAndroid Build Coastguard Worker# Check that the third-party subdirectory exists
33*89c4ff92SAndroid Build Coastguard Workerif [ ! -d "third-party" ]; then
34*89c4ff92SAndroid Build Coastguard Worker    echo "third-party directory does not exist."
35*89c4ff92SAndroid Build Coastguard Worker    exit -3
36*89c4ff92SAndroid Build Coastguard Workerfi
37*89c4ff92SAndroid Build Coastguard Worker
38*89c4ff92SAndroid Build Coastguard Worker# Check that armnn is compliant with version 3.0 of the REUSE Specification
39*89c4ff92SAndroid Build Coastguard Workerreuse lint
40*89c4ff92SAndroid Build Coastguard Workerif [[ $? -ne 0 ]]
41*89c4ff92SAndroid Build Coastguard Workerthen
42*89c4ff92SAndroid Build Coastguard Worker    echo "    "
43*89c4ff92SAndroid Build Coastguard Worker    echo "please make armnn compliant with version 3.0 of the REUSE Specification before re-running"
44*89c4ff92SAndroid Build Coastguard Worker    exit -4
45*89c4ff92SAndroid Build Coastguard Workerfi
46*89c4ff92SAndroid Build Coastguard Worker
47*89c4ff92SAndroid Build Coastguard Worker# generate the SPDX file for the overall armnn package
48*89c4ff92SAndroid Build Coastguard Workerreuse spdx > LICENSE.spdx
49*89c4ff92SAndroid Build Coastguard Workerif [[ $? -ne 0 ]]
50*89c4ff92SAndroid Build Coastguard Workerthen
51*89c4ff92SAndroid Build Coastguard Worker    echo "generation of LICENSE.spdx file failed"
52*89c4ff92SAndroid Build Coastguard Worker    exit -5
53*89c4ff92SAndroid Build Coastguard Workerelse
54*89c4ff92SAndroid Build Coastguard Worker    echo "  "
55*89c4ff92SAndroid Build Coastguard Worker    echo "LICENSE.spdx file generated"
56*89c4ff92SAndroid Build Coastguard Worker    echo "  "
57*89c4ff92SAndroid Build Coastguard Workerfi
58*89c4ff92SAndroid Build Coastguard Worker
59*89c4ff92SAndroid Build Coastguard Worker# Add the license info for the third-party packages
60*89c4ff92SAndroid Build Coastguard Worker# NOTE: they will be added before the first individual file entry
61*89c4ff92SAndroid Build Coastguard Worker#       which currently is './Android.bp'
62*89c4ff92SAndroid Build Coastguard Worker
63*89c4ff92SAndroid Build Coastguard Worker# insert header comment before the line: FileName: ./Android.bp
64*89c4ff92SAndroid Build Coastguard Workersed -i '/FileName: \.\/Android.bp/i \
65*89c4ff92SAndroid Build Coastguard Worker##### Source dependencies \
66*89c4ff92SAndroid Build Coastguard Worker# Header only libraries from the armnn source repository third-party folder \
67*89c4ff92SAndroid Build Coastguard Worker# NOTE: fmt has a small .cc file that needs to be compiled in order to work hence the libfmt.a below in the static dependencies \
68*89c4ff92SAndroid Build Coastguard Worker  ' LICENSE.spdx
69*89c4ff92SAndroid Build Coastguard Worker
70*89c4ff92SAndroid Build Coastguard Worker# iterate over the LICENSE.spdx files in the third-party directory and
71*89c4ff92SAndroid Build Coastguard Worker# put their contents into the top level LICENSE.spdx file
72*89c4ff92SAndroid Build Coastguard Worker# before the line: FileName: ./Android.bp
73*89c4ff92SAndroid Build Coastguard Worker
74*89c4ff92SAndroid Build Coastguard Workerfor i in ./third-party/**/LICENSE.spdx;
75*89c4ff92SAndroid Build Coastguard Workerdo
76*89c4ff92SAndroid Build Coastguard Worker    echo "inserting license $i"
77*89c4ff92SAndroid Build Coastguard Worker    sed -i "/FileName: \.\/Android.bp/e cat $i" LICENSE.spdx
78*89c4ff92SAndroid Build Coastguard Worker    sed -i '/FileName: \.\/Android.bp/i \
79*89c4ff92SAndroid Build Coastguard Worker  ' LICENSE.spdx
80*89c4ff92SAndroid Build Coastguard Workerdone
81*89c4ff92SAndroid Build Coastguard Worker
82*89c4ff92SAndroid Build Coastguard Worker# Mark the start of the individual files section of the file with a comment
83*89c4ff92SAndroid Build Coastguard Workersed -i '/FileName: \.\/Android.bp/i \
84*89c4ff92SAndroid Build Coastguard Worker##### Individual Files \
85*89c4ff92SAndroid Build Coastguard Worker   ' LICENSE.spdx
86