From 6405b44ff64f79dc15271aaa2896538adfe25ee9 Mon Sep 17 00:00:00 2001 From: Devaraj Ranganna Date: Wed, 27 Nov 2019 16:36:02 +0000 Subject: [PATCH] Python script automate tf-m build build process The python script (tools/psa/build_tfm.py) automates tf-m build process for a particular target or all supported tf-m targets and copies generated binary to a predefined location. Updated documentation describing steps to add single v7-m and dual v7-M targets and building tf-m using python script. Added following attributes to dual v7-M and v8-M SPE generic target, * inherits: PSA generic target PSA_DUAL_V7_M_SPE * tfm_target_name: Target name in TF-M * tfm_bootloader_supported: If TF-M bootloader is supported by the target. Values supported are "true" and "false" * tfm_default_toolchain: Default TF-M toolchain supported. Values supported are "ARMCLANG" and "GNUARM" * tfm_supported_toolchains: Supported TF-M toolchains. Values supported are "ARMCLANG" and "GNUARM" * delivery_dir: The directory to which TF-M binary will be copied to Signed-off-by: Devaraj Ranganna --- features/FEATURE_PSA/TARGET_TFM/VERSION.txt | 1 + .../FEATURE_PSA/supporting_psa_in_mbed-os.md | 185 +++++++--- .../prebuilt/tfm_s.bin | Bin 0 -> 147328 bytes targets/targets.json | 24 ++ tools/psa/build_tfm.py | 344 ++++++++++++++++-- tools/targets/__init__.py | 4 +- 6 files changed, 474 insertions(+), 84 deletions(-) create mode 100644 features/FEATURE_PSA/TARGET_TFM/VERSION.txt create mode 100644 targets/TARGET_Cypress/TARGET_PSOC6/TARGET_CY8CPROTO_064_SB/prebuilt/tfm_s.bin diff --git a/features/FEATURE_PSA/TARGET_TFM/VERSION.txt b/features/FEATURE_PSA/TARGET_TFM/VERSION.txt new file mode 100644 index 0000000000..e6fb6692bd --- /dev/null +++ b/features/FEATURE_PSA/TARGET_TFM/VERSION.txt @@ -0,0 +1 @@ +dualcpu_l2_v01-18-g11d373ee8eb6 diff --git a/features/FEATURE_PSA/supporting_psa_in_mbed-os.md b/features/FEATURE_PSA/supporting_psa_in_mbed-os.md index fcf18d7712..c4d6327d1a 100644 --- a/features/FEATURE_PSA/supporting_psa_in_mbed-os.md +++ b/features/FEATURE_PSA/supporting_psa_in_mbed-os.md @@ -1,15 +1,19 @@ # Supporting PSA in Mbed OS -This document is still a work in progress. It describes the process of adding new PSA targets to Mbed OS. It also outlines the new directory structure created to support PSA on single v7-M, dual v7-M and single v8-M. +This document is still a work in progress. It describes the process of adding new PSA targets to Mbed OS and building [TF-M](https://git.trustedfirmware.org/trusted-firmware-m.git/tree/?h=feature-twincpu) for dual v7-M and single v8-M SPE. It also outlines the new directory structure created to support PSA on single v7-M, dual v7-M and single v8-M. -## TODO -* Adding dual v7-M targets +*Note* +PSA - Platform Security Architecture +TF-M - Trusted Firmware M +SPE - Secure Processing Environment +NSPE - Non-Secure Processing Environment + +# TODO * Adding v8-M targets -* Building TF-M * Running PSA compliance tests -## Adding new PSA targets -To help with the creation of new PSA targets, couple of generic PSA targets have been added to `targets/targets.json`. +# Adding new PSA targets +To help with the creation of new PSA targets, couple of generic targets have been added to `targets/targets.json`. * `PSA_Target` (Root level PSA target) * `PSA_V7_M_NSPE` (Single v7-M NSPE generic target) * `PSA_V7_M_SPE` (Single v7-M SPE generic target) @@ -18,16 +22,32 @@ To help with the creation of new PSA targets, couple of generic PSA targets have * `PSA_V8_M_NSPE` (v8-M NSPE generic target) * `PSA_V8_M_SPE` (v8-M SPE generic target) -The new PSA targets **MUST** `inherit` from one of these targets depending on the architecture: +A Single v7-M target doesn't support hardware separation to isolate NSPE from SPE. Therefore for single v7-M targets only NSPE target is defined. The PSA API compliance is achieved with the help of emulation of PSA secure services. -Example: +A Dual v7-M target will have at least two Armv7-M cores to isolate NSPE from SPE. On dual v7-M targets, TF-M will be running on SPE providing PSA services. Therefore, it is **MANDATORY** to define both SPE and NSPE target for dual v7-M targets. + +A Armv8-M target supports hardware separation to isolate NSPE from SPE. On v8-M targets, TF-M will be running on SPE providing PSA services. Therefore, it is **MANDATORY** to define both SPE and NSPE target for v8-M targets. + +The new PSA targets **MUST** `inherit` from one of the generic PSA targets depending on the architecture. Also, in case of dual v7-M and v8-M targets, SPE and NSPE targets **MUST** inherit from the respective SPE and NSPE PSA generic targets. + +Example single v7-M: ```json "K64F": { "inherits": ["PSA_V7_M_NSPE", "Target"], } ``` -In addition, the new PSA target **MUST** `inherit` from `Target` which defines default target config options. The only exception is, if the new PSA target is inheriting from another generic target which inherits from `Target`. +Example dual v7-M: +```json + "CY8CPROTO_064_SB_S": { + "inherits": ["PSA_DUAL_V7_M_SPE"], + }, + "CY8CPROTO_064_SB": { + "inherits": ["PSA_DUAL_V7_M_NSPE", "MCU_PSOC6_M4"], + } +``` + +In addition, the new PSA NSPE target **MUST** `inherit` from `Target` which defines default target config options. The only exception is, if the new PSA target is inheriting from another generic target which inherits from `Target`. Example: ```json @@ -40,8 +60,8 @@ Example: } ``` -### Adding single v7-M targets -The PSA on single v7-M is supported with the help of Mbed OS PSA services. The following is taken from `targets/targets.json` and shows a PSA enabled target, `K64F`. +## Adding single v7-M targets +A target can ge categorized as a single v7-M target if it only has a single Armv7-M core. The PSA on single v7-M is supported with the help of emulated PSA services implemented in Mbed OS. The following is taken from `targets/targets.json` and shows a PSA enabled single v7-M target, `K64F`. ```json "K64F": { @@ -104,11 +124,72 @@ The PSA on single v7-M is supported with the help of Mbed OS PSA services. The f Please pay attention to config options `extra_labels_add` and `device_has_add`. If needed then a PSA target definition **MUST** use [extra_labels/device_has]`_add` or [extra_labels/device_has]`_remove` (not `extra_labels` or `device_has`) to add/remove either extra_labels or target capabilities. Also, use `[feature_]`add/remove to add/remove a feature. Check [extra_labels](https://os.mbed.com/docs/mbed-os/v5.14/reference/adding-and-configuring-targets.html), [device_has](https://os.mbed.com/docs/mbed-os/v5.14/reference/adding-and-configuring-targets.html) and [features](https://os.mbed.com/docs/mbed-os/v5.14/reference/adding-and-configuring-targets.html) for more information. -### Adding dual v7-M targets +## Adding dual v7-M targets +A target can ge categorized as a dual v7-M target if it has at least two Armv7-M cores. On dual v7-M targets, TF-M will be running on SPE providing PSA services. Therefore, it is **MANDATORY** to define both SPE and NSPE target for dual v7-M targets. -### Adding v8-M targets +The SPE target **MUST** contain following attributes, -## Enabling PSA at application level +* inherits: PSA generic target PSA_DUAL_V7_M_SPE +* tfm_target_name: Target name in TF-M +* tfm_bootloader_supported: If TF-M bootloader is supported by the target. Values supported are "true" and "false" +* tfm_default_toolchain: Default TF-M toolchain supported. Values supported are "ARMCLANG" and "GNUARM" +* tfm_supported_toolchains: Supported TF-M toolchains. Values supported are "ARMCLANG" and "GNUARM" +* delivery_dir: The directory to which TF-M binary will be copied to + +The following is taken from `targets/targets.json` and shows a PSA enabled dual v7-M target, `PSoC64`, + +```json + "CY8CPROTO_064_SB_S": { + "inherits": [ + "PSA_DUAL_V7_M_SPE" + ], + "tfm_target_name": "psoc64", + "tfm_bootloader_supported": false, + "tfm_default_toolchain": "ARMCLANG", + "tfm_supported_toolchains": [ + "ARMCLANG", + "GNUARM" + ], + "delivery_dir": "TARGET_Cypress/TARGET_PSOC6/TARGET_CY8CPROTO_064_SB/prebuilt" + }, + "CY8CPROTO_064_SB": { + "inherits": [ + "PSA_DUAL_V7_M_NSPE", + "MCU_PSOC6_M4" + ], + "components_remove": [ + "QSPIF" + ], + "device_has_remove": [ + "QSPI" + ], + "extra_labels_add": [ + "PSOC6_01", + "MXCRYPTO_01" + ], + "macros_add": [ + "CYB06447BZI_D54", + "PSOC6_DYNSRM_DISABLE=1", + "CY_CFG_SYSCLK_WCO_ENABLED=1", + "SEMAPHORE" + ], + "detect_code": [ + "1907" + ], + "forced_reset_timeout": 5, + "reset_method": "default", + "post_binary_hook": { + "function": "PSOC6Code.sign_image" + } + }, +``` + +Please pay attention to config options `extra_labels_add` and `device_has_remove`. If needed then a PSA target definition **MUST** use [extra_labels/device_has]`_add` or [extra_labels/device_has]`_remove` (not `extra_labels` or `device_has`) to add/remove either extra_labels or target capabilities. Also, use `[feature_]`add/remove to add/remove a feature. +Check [extra_labels](https://os.mbed.com/docs/mbed-os/v5.14/reference/adding-and-configuring-targets.html), [device_has](https://os.mbed.com/docs/mbed-os/v5.14/reference/adding-and-configuring-targets.html) and [features](https://os.mbed.com/docs/mbed-os/v5.14/reference/adding-and-configuring-targets.html) for more information. + +## Adding v8-M targets + +# Enabling PSA at application level Having an entropy source is crucial for Mbed TLS and Mbed Crypto. The [document](https://os.mbed.com/docs/mbed-os/v5.14/porting/entropy-sources.html) talks about entropy and how to add an entropy source. Sometimes a target might not have a True Random Number Generator (TRNG), in that case the target will be configured as a non-PSA target in `targets/targets.json`. In that scenario, if an application wants to use that target as a PAS target then it is the responsibility of application to provide an entropy source and mark that target as PSA target at application level. The config option [target_overrides](https://os.mbed.com/docs/mbed-os/v5.14/reference/configuration.html) can be used to enable PSA for a target. example mbed_app.json: @@ -120,8 +201,36 @@ example mbed_app.json: } ``` +# Building TF-M +On dual v7-M and v8-M targets, TF-M will be running on SPE providing PSA services. A python script `tools/psa/build_tfm.py` automates building TF-M and copying the binary to predefined location defined by attribute `delivery_dir`. -## New directory structure +Usage: +```console +python3 tools/psa/build_tfm.py +``` +Supported options: +```console +usage: build_tfm.py [-h] [-m {CY8CPROTO_064_SB_S}] [-t {ARMCLANG,GNUARM}] [-d] + [-l] [--clone] [--commit] [--clean-build] [-v] + +optional arguments: + -h, --help show this help message and exit + -m {CY8CPROTO_064_SB_S}, --mcu {CY8CPROTO_064_SB_S} + Build for the given MCU + -t {ARMCLANG,GNUARM}, --toolchain {ARMCLANG,GNUARM} + Build for the given tool chain (default is + tfm_default_toolchain) + -d, --debug Set build profile to debug + -l, --list Print supported TF-M secure targets + --clone Clone TF-M git repo and its dependencies + --commit Create a git commit for each platform + --clean-build Remove cmake build directory + -v, --verbose Verbose output +``` + +If the python script is invoked without any options then TF-M will be built for all the supported targets and the binary will be copied to predefined location defined by attribute `delivery_dir`. + +# New directory structure ```console features/FEATURE_PSA/ @@ -160,50 +269,6 @@ features/FEATURE_PSA/ │   ├── test_s003 │   ├── test_s002 │   └── test_s001 - ├── compliance_crypto - │   ├── test_c043 - │   ├── test_c042 - │   ├── test_c041 - │   ├── test_c040 - │   ├── test_c039 - │   ├── test_c038 - │   ├── test_c037 - │   ├── test_c036 - │   ├── test_c035 - │   ├── test_c034 - │   ├── test_c033 - │   ├── test_c032 - │   ├── test_c031 - │   ├── test_c030 - │   ├── test_c029 - │   ├── test_c028 - │   ├── test_c027 - │   ├── test_c026 - │   ├── test_c025 - │   ├── test_c024 - │   ├── test_c023 - │   ├── test_c022 - │   ├── test_c021 - │   ├── test_c020 - │   ├── test_c019 - │   ├── test_c018 - │   ├── test_c017 - │   ├── test_c016 - │   ├── test_c015 - │   ├── test_c014 - │   ├── test_c013 - │   ├── test_c012 - │   ├── test_c011 - │   ├── test_c010 - │   ├── test_c009 - │   ├── test_c008 - │   ├── test_c007 - │   ├── test_c006 - │   ├── test_c005 - │   ├── test_c004 - │   ├── test_c003 - │   ├── test_c002 - │   └── test_c001 └── compliance_attestation └── test_a001 -``` \ No newline at end of file +``` diff --git a/targets/TARGET_Cypress/TARGET_PSOC6/TARGET_CY8CPROTO_064_SB/prebuilt/tfm_s.bin b/targets/TARGET_Cypress/TARGET_PSOC6/TARGET_CY8CPROTO_064_SB/prebuilt/tfm_s.bin new file mode 100644 index 0000000000000000000000000000000000000000..405a4a7c14556cd205cea1d67ff5ac004c38ff73 GIT binary patch literal 147328 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 z zAC$Bm7`^c7O;a#nBzszB=w&tDFP*|%h~|CAfObV;k%Mj^#pD5hp-0$BMZ1Sq{hU{3AD!A6EE*NjKZ}K#f^Q^%*=Rg;|Rpw}?MeqkN z7^s+t+2{z(v-Wj_va}V=8P;z8Z2bvUU$o4NXc=N2=)fG0_gOVbz$hgc^TdKN4!B0& zX3ZG)pbM#i*#h~yOLv2U1!JW*WYAJRrq#M`r!q6tk1vs*8e1X@ zbFqx{xemF$O!OPN>)?9x20f69KfA~x|1f_59)PDJp>?sJAc8#;p^j`Sz^S9XF>=I& z%teuR%tIrY1`>h2QdFZ=5+v>|;^rnEl@=yS`ZF~*q^x&@Cka!UKh-H3CaZ|QFc8$i zRl*7(s61rYUmf+Lc@gz-YnWO9-J_iDn6+2Q5F#6LXHU;QqK57xZgDu@2JA`fVOEY< z&isVi?*W7xxX3n@yBV4pD{z#sHQAJf9=V1im?r@KlZkQ_;4i?_Q;70?Ku`uzt^@o9$jbyCAP?z@rXw!E$w-vB z0RKFq+zz+_2z{O?7XvN=HqAg9`9zrvNF&&OFoZP01Yrbm@8O~H^z!!c?bf}gpNw%9 z$c3y(ERj075OST$t8n~$K7yPIz(T+dfRe+H5RNM?6$nKVXBRhj58qxvq2Yb|$3K-g zZ1|{g=~=ncXUv?v=#}Mfu3EEh^S1Z*?mzO`m&Z?ExOC;(%|GrU-KxHC=*p7@%>MrF z(fwN+_g|ZG?3uVf-2O=4vSet*k5hf>tLh{T%#>HU9bOt8`1won33DKKEuuJnil>aNPJ}S?(vY=U?b^ z;@IM)5k(c7t{!jW-dsZLg?@Qj9Gb?**N%xYkUzG}uuW0W$T=rZ3=qIftZNScuf75pOHut86wng9gr?1oY__T5PV%jDH_ov*Z?c!+`eMsBJG|F=q zZ6DR*nP+Jm=>)>fw4DymDomzrwPMfZk+i*j+1K$SZL?X+U%W-z?Ss`l<7wOV?{++h zw%^L$dEe7EJT>Bv^|T!?1&ta=+j9SpE8e8-nY(t!Jldvn1>xzmU0=EUUIA^}AMPd` zqV2nXoZBn3jq5Kw_d9K8Wz4=v+SWt;?^e$q(=$%3P;zrmPlWBik*t=>S?USFgcfCpbrFPG}!L)ChcitFA z`zOBtlJ2yRa)f`R(SBm0bf40`DqquTru`Llc)XbQnQH9KpJ=}+x93iveHW&lJ(2d` zN0v`wXdixUKJ^jp$8q%uV`yJi|MvC;+Ml&4ri-*svnQYUlJ@J#Hxe$Hgz-^34fLrxz4;mfqJmvir}4PBIez5S;_^|MYs>oIBAh!vhm`9h3ANdF)bfHMHo zp7KHxcL44Hi7x;<00>OLg&-gt&==4jfITgF3Xli@n-Cce7zG#yNC#vAaskr;GXOII zvjK|$uK<<<-UO@ytO2Y8YzAxtybst5*bg`Y_zdtR;5gtk-~!+h;0oXx;3nV?09{uY ztZNd03&0i71KH&KJhX7v!z6bmpa2{|8UoJ35rO!)-lR(9OO%3?}sqRZ>JPw ze3(x?qm&{(4g2N^@tj5Wu!T9uLtyD!r*_M`6OjMM9!rzfL54ceupLi`=Yl%Wu$(7^vGAv1_Ynpg|Lg1r zCF(%KxX1FNbx1}XXxOqRq)DsrPA^8e2#^Oz2P6XG0a}1Jz!^aCp7cBJ$0#X$0N4ch zC%pRzqi_ZAqXSR1o!75Q&cUQb+=%f@t6y8o@YTtOzXa|m_|xWWg1-~YE%2AYG{Qd- z=4iN+V0MQ)8D;}ax^CYCKAi(c5l+|eSK$u|LDCOySD39ZY5RQ&f4YW$0sIJ<%itdg zGY$SQ_+LWuxX76Pv5|?1PZMg7j*EF{j~Uoyr#QnN!RfLCr_;`-Gk)yDbUN)c9fzIb zjMD46aJuZk>9q6d=ylOC1G~@?A92#u9y)nsUE)K`PCG?&*eOnO;=@e4?7*RR{6yg6 zr0erO%p)oIEePy~VP|n4T#7OF9qba~&D$Gb7t${#{I9}J>07A%7VKiYw^92&*adh& zXhPa@$YFB^9TTUo?WEKZ*YY#Y z_5N%^>0N8bf`q8KcYdE36>)E_)8v;vl&t7bo%`2}?=IRhLVLct>d3->fAVOYX))i` z92%E2=$PivrHjEoAKZ0d@x8t&sSzh9zI^iF&Qou$$z%H-AMcwn{_Pu)?#c6xo$$@- z?xk;CbN`F8pZ9NldHl9#Qr0X{_?6k-%i6zrLEMVjZ@sdvO!nN6Pq+WRsd3`n?eoSJ z^zuz{SBI#3|EReWUr_W|c<+$!0?r?=Wq_niyAMD`r~Em=3&cb4E^lD z;z94d+mZaeu_edHx5v1_y%U5>bZ(2w=lSdPijdIqwo#(B7jq_Ee-P??VA|LpzhCwC zZy#iAIo770>wEZ(++6mWAZA&-^7BPAc6~VL`)xt&j{Jh2z4ksc{)W@+zCA7^G>?9H zR;Fvn%z>Mi_#Ip^?z$w}oeX<@wwG^N=(f{4G;RkLd7k~C+rEFm|7PXAc~9^7%zE(n zt?+FgZj1JRUGwINKl;cv4GOBAoOvVi)9k8Wze(sRRbMsrouhe*%;zoZ$^dhk=Hfc|e9r#{aO8$EO3vo9U2 ze9>qb{niiWUrKt#cf9Rn{`2=~@%ujOd1im%h8s&OpHExcC&qtr&Y3<9hc542Tp?{3 z5DAg8z zvo`xD#ie88qn`LtV(yua-pi?N}VrT)MeA zY}2?l0}~R+K&`faQet$hR))L0n>7tUf6@POD8Cm^2_pn=l|MAt5Po-~eq> zY*PPz2?KPxDEjT7Kl)jIDZlC04=h`K`~7*KRPfU7-aD^NJgWF(RO7n7Q_n1`Tf+5w z?QjoscEYRMLY`SWvu|J1TlasS^SnOK)#Ki+-Vd-h>--JCyT+sLPX7-M>OZ^w^G6Sc zM+FwuU)$ztEnR!XQ{09zPh1`p}P~Gyhc1rT5tywcCG^T#@OZuVRM{S;$Y(L%oW{Ixf$BS-kkiKmDV8aWu zx3_%rYS#5rSI=SLe&k18Gp{_kzO-QbIwoimD``xul}Q@`+ErP@Ekw7uc-29?Kx%ft@JY?-$gdw zGYKTluYb2{+QtbxJ~`L+@^gphfAoX$?mOmTYdyy=eJ^F7$NgHVo8sQxEt$DrZ0d;i=fv|Oo%Q^7+9e;0pe_qc!U7W?LY`dZZs z6At~h*IGHKuA%=|lUEaZ*PW#1^bUS zL8rabbTkWZ(DtMLH^Z)1~-CJYQ4zoaR_mR@Dr_U5#B--0>st8e=q z|KRNbqBjo*eDiwUvx;BK7WyVGShx6P-|s#!$c}#0vfn-W?6rm6YeEkB{@EIOuA<^d z)%wg?5xrNB_}L@2IP}YZJ@0w_`hsn{Q}(!cO}Y>{;LpWRXG6NeKmR)GMKK=lpT}d7 zp`&N~&@1`oAN?YpT6UqhzvRdV@rRC%?fGKm%h$)mc|LQ|>5sR|m+$-Nc8|T)Q;N>M z`#ZPv!;Stm6}@VF-p)EWWYrjC_S~T>$D&_;xy__|e(7g>Q?x(VcDx(>neT&;bnDG| zQ&Ts6{M6Gk47);F{r3+Q#VyWRtJ}9q^W4cH>%YCmvIoR(FZ~K>jDF6t;f0llmvP66 z-hHibaQ`gH`$L(7qrc>O|2eg~==U`d&kYIoIJC>dm}HtbJn65hGu|&n?0fc&4EAVz zP0912aVm76Q_jG0zXP*A**R?O@{dmJk2i01vZXNpS~O#I-y^TQ{@R%K$1DH18)-c5 z_5bXCbRwc&YHSzjj~i$=4S{yEw9syD%(t6IQ|xBbc)Lk1+D-L+yUCrgn}#p#W@)+I z-1wH=Ji6U(Hqna`{OFzS<9D_6yfOL+Wc$M80K!?|S1VwYw*lLJB+BzJzXf~=I0T?; z=ZnCnRiOB}z|RCs03-my0p0+2fHQy|$7+GEhRFeD!LJiP752yR>3Z}d@S|Xs0!{`tAM2fk)2}6lfn^b@kl^a0TRebR3?q z>BRhB(&3RFO-CRh#+g~!G$WGobV6bzY>{Ae;|nX0b_T}8^m`ag9S#JiE`~j1+2q|7NXOS>GVUs zoqhs`AI+-M4+3=g)H+j_keu9N+TixG2zhs8ZceT?GJ9G!q1}<3l&t0Z1SsDgQ$^Asp_` z^hE@185vCnACmriMh{0^7rKI?qoMyhe&oaPz%b5yl>V{*D@xZ0VNh)3f(H5@Q67#N zhH;@$&~*PJN@qX&+8Yr!lDXMA#aWT_P=7kmqtQ@F;}ZT}^Y5NwasB#tL|VhYqdMwL zkp+(ux2vSEy=H$)H9XBUyW+6>^JRIsSmjlzufjKI1-003+sr}I+ zu*{OncwDl#&AhzgxdoBWWfer`MUI;=Qk{^WpO;mTovYU8<>u$86N+-P z)FX4}%$rp-Lmi?|7#WIvi91arJ2!G#R&ic-;;e$=IrOq`PBGC@5A~xy6MS7A$e6?v zinFHYB7Ts=E4O40X1d)sxnxdm0W`I!;iK+EbaNmU&z<%>+A1M`&d98pxn!K(iL%a7 z^B#2ld#zQ6$?rPtv+92<3Ynaf|1moCG~h|Bpw2%n@x?(e$i>yaoK&> zz|6{@P>^SDK;WyXgN&NcIlG*&B+yZqkdsrCTU<;WV=~L(oWP14Nn%pvW#x~YJ9AoY z5y5nVLtS8ZO<*D2fUkDpEEK*gtoE;`}4 zJXDAO=J0;%*X^#265kHa^o;9&wudBt-uN9X1h8!?n=(f^iE zf+I>{aqirlSq1ZFlF?l@r;6UoD{n>QFrE}CXBIl60K=+qRsq%`lEk~!7;>E+i6}y( zBfYr=d9&x{4$q-W8eb7~EhNN^FO90iD* zgEyh#hxhv1VBZD!5)g@Sx}QvO;CsTI3H+On;g`d`*nv;?nmPx50`MQ-J<{|a#ix5% zx|dxJ+$*!8*9GAsz_)O(0xSkh2TTO~g>dXB`i!LeiayEo0}+{(Kga$N!T)FZy#k4( zzvPigYJ{stj~)I@!uVu$YH~X7Zx7Wa4;w!6zl77+*meB3$p08jd=1uV+Rb38x%kIDY!TQVFV81FqyO5Md7M+>*n6Q zM^6xt*;A%uWPZKW{sEf6px(hDp<&?>k$w6`MaO9Q@V^bs!u>tdM0s12x`Q%O_&f_9 z9#X-qf@bO7T%@dFvC%b^GkO~EQt5xi_EIYo3+cg-d&a1#GLL5WJ8N|ah6xa ziXWxh)#@v@VXctI;iGGWtn9Op=vQ^cmeOjqKENLdA7ByGvz781rAbsFUL&b=s$#?X zTG;SN&@B^xrXt25sJj9gp>oKJtkMNQHiZ~+R9MKvm<-MWZwo^tCUFf-)2Fq2lXSZh z`ML7>IU~R0jZzDh)$u|HLnw~CwVuzH4fN;TZ0lyw8rthKQU9}kq&`{S1ghL#sc-1Z z^`6W8M!d576@9rb+%k39Q^q?g?=)~tnVB7G!UlwrOE%4eoMjQ7Lp4=;=KX!To~PIV ze~^J*vUxm6(1$Opag%X*%O)pFEjqnBH&*Xnn5rLaVAP(aqNW^Gvz4fsCI;Lw!rg;E zEz?))-__UaTOjMT^b{lQsm41q%&7g{$t$}Bp%OD2sx&j9JuJc!qINg9H_gzm^OfQ0 zlje8fe)uw?))=Hs)JF}UpYA_QJ?aqNzW2K$9hNwSMmKnkSWd=HTBCQD+lduyjc)LrR|7yKhwm&<_b(ONhwQduiYihe| zt*GT_ha31!#Aa7h09gzFYy)W-&4(O(BxJQCB(dFJ<4+W|iptBjxCcVigP60e;PtF~ z2N=pq*OjEDS9>>&y*`S{OSVh*Qc)WcRHa{%O6z1sZ9Z*!Sev6woweC>ud_BgnmTK< zt*Ns%o9{iWO+3ehpM9i0v-$e`)u!$$o6u3V9(>uJ?<$+64THU9H+b!cSz>iFxz#j! zWb?5b`F?p_~vy^inyJoDOwyD8UMz-NOM;WJ`=`7(`M+t9PvX;ej zf^f8WT!?P~I1|Q#cZrz4Yj!i$>^Z7wWFQUg%<*QT(epXaZ)1Xq=AgbxPqj>>>e=m$ zdsgUc^ojsye_8#sq^zXT`VQOW`-wh&W+o&G8p_t{FD9kxCE?AMMCc5H+}$Q7fM~RQ zYGd0@Hv1E``m${}q;82UYK`kkWhHC%_5HP381xpx6t$OaOA%(Xpx+QS6=8{1QOkh` z0(5q^mf7t?n!#)5FM@qW`xL9(#6k~^3&!##NaJPe*Xp|sXk0Np zDZVsYKQzE4$h0Ci$(@^|4=*GwTU%vKiuysIouv8uA%9|-XoU_Cb7;v)=^thVW)G{? z7~=W-vke`#g?#>ptxWK{SocdI52u0%hBIn>>mU(_wt*7sZ8zgZU257invHpFv1i-x@8r16%R{Hd1VDVqxq7YYh$n~f&<1P|4#npA69|-rWIUun<8Hez zIN!p98vQ^dTBWZyl0LmH9$|qEJ^b^MR_Jv}r}i*$vchTl5CVRTasjjjU20pYxi-ls z^^IjFFDAV2d2lGjyipoHN3vVaf5%%6{hX-QoJzE()?n`8-z_CCi3wbxU#uq)-OO@t zCN4@WE9@o{B*w}%L4%Q!FatXFL?w!`Q}BrSSaoX87gp+%qW>cEidCoypJPTHG2=)r z|2?JOQugI^rg2Y={u3ipMFLHFj}UEx zuVzM)Cpq^2k@hBlO;y<+@O@d@bb+QVOS;e|d1)za!IqXC^pRH{ZBifp1^! z{@+))dH21$ox7cT?z!ilgBq0-MAl6vixSHO=#)U6)?cv-QLt%f7SuFHzqs_QX(qBSZC_wkG1Hby>+yTl0gL1E&6ycN7~lXITN0oeDU}wKHi;y+bJr~@X@Pa zrHGsQchq}m-G;;}U{B^sSgQ)Xg|mi<-yfePq?55r{(&~8?OWHjC#|3~*7~g6zau~1 zA~NHjbzyuM6>FAGjP3{{J0`wj9xA01%|u~-i-WMwZaPq}T*G+6S>>9#6H5H{d2uIh zO^;j`Ut5s+nT7re!eyp!v1_Ka*xvNI5kPIN5uX!iO0?AGlXRwRSrF&7>ztVp7iK6dtZRGNomh$M~&kM2y4 zL>?9_{TM7yPL` z2gG}I2OM31gO;`Z0obz18sgSic5K^&{T5?XIv%U%9oiGyMcxr5DjiqQ?n(#m_`yr# z``QHI@4`Hx9eC}0tClnhL#YI$@BS;BphuLrANTNrKJ7w9ZS!v`mfl%aNye2)hC^e> zkRwq$qo06E%PTmc8&?nQ*m1^MXtXFDR2k@V*Ps@Al<9{OcPH!#_^SuhhUwTJ{bG>P zD%5xHK;Ouz2oLy|4~%(%h7x1IzaLs<>9=IuXDo4#Y0hk7D=I5U7B6KHZGPDMVW$*^ z=)chXUm6(l)X;ruxva9m+C~-f4futDOj6s(V!fFD#0-?Xe*o6iZ8a!i;hBsJQ z!{Ml1!w;)>B^-H77;;$C5V1SvN$r!WU6D^jKM{3go1i#6^WB+m)(R0vmG3D}h8-ma zV&pK!3wr5|@*GmxnjG3iVNR$2=uNL!T5;J+^#oJMzv&OwH1=9e`}-B4I{W*>_D?@_ zc_emm#uD?{kpcg|`o|Mqpy@vEAJRPiP@|xbLx%1T_&xoQhQ+EC-!T199vSvzz&~kV zxEx0*#~Fb*f0g6JHYf~vXty}TNt0_#bL<%yd6+)$8&srII}Rh8hZGHO&>@Er4Ths5 z8+7Qs$PR$=5`T@&@MM9;>0DGktmX%Ke^|0>MJNN}|k)E;dO zJG#hW6vKAK9S$Qycf~wGGH;V$5#znslehrUkVk3-Z61Bo9Mv0Jo!GzQ)?%K!ehJB% zAZePp(R+o&qm4o`iFhiLoB%yM6{~KMaNhsoATLxWY)rb4ct_T^oxBj)z_F1pEOV@> zReGo|a`!Ta20I+>q4WN|gW9IpX1c0F$3lNyEv57V{)ez1&APTeCLWDO4z)t$3qu+d zPejW-3SIKe-#RH&xL=Q3yK8Dc#M}wbq1JDdR?e*B6xMx$qo8i~o0kSR()!o6y)Cc! zBMxU6RnQ2cKU92l)VhHGN}tN0M++wnDDfO;iNpx3>5n{Ok;_pSBAcwuG`y@IJ5Cmm z!hdH!89NbrbAaRJ_c{H{1eyyS{iy@0!!*uQpu%$9;rSKjikS)4B69+lV2wMpPpBv$ zzH+qWFi>c!y^E3>%nU5r5pwWZ$nQWFasm|ck~FrE_041kfBEmrwu2g z3`3jd$}q+DleCktr}!__{e7%OSL^C)qif;r*2rUuo#E(}IID8kP_k1SqfyH|<)+DCejC%yMc>DpBC znW)5ihr6-6VP~~L%|}YKykRJB*tPPgzLsgDXdd6laM65j4?zYC&1gZQ{|b6Xwzdv= zO0^rdg-myhP3}y=YN;d9`$6}j$40uH!aLiC?nS@lDt4)wpn3SoAw?Jciw7d}Nk*i! zOz7B7e1Aqv1-Km=^qJPwi`^?Rr8t6Nzem`&(q(T134<-a;dF=R*>5CMnkn5j8JbY&D#VHy zB+$$gt{)GIw_PB5*sQW9VV$AAAkRx-CHg3rinY4xW>bDsUE4v>!?Xrrn8$9|%+nWx zYuKQMK!R{spJUeAx*b#>z8nrqD4G5#5!2nuPvsg)Sv}+wRt?RfdYg9+9 zrHt%f6l>jY9x1sD%0s6~jOBvAJ&>_gdH90=B-WBBcT^GO-{tZdTQB&xA#dCXW?2X2 zADPhF?ZPAAHFjWpQi)62#*nb8)3${bLw6A91+`v#;)4GG(p_=up*JKLzx`dw#0fce6W$Z?C{Hj6(Iz6IN^Ii685vJjdoAz8Rj`bGfW`Ir--K!@o%_n*XrwZF(eG zv1aY+np}EkPlsCzqkw7t_dgjvXea-_*_bH>HsU6c5T9uX3 z1h{2h6pSJF6T)6c92%}|Npqbx>h63?zk5*y80>8 zwSX35V6RvQTVG1(q#-PwgSZ$6K5arVxVNxCsGHLwW{M+=5|@s&bk;0d%4Fy}W5`?S z+DT8(UnQz0K0P0Hz9weiO#w~sF%+Lpk|z3VUKA%S9Z77H?q90JY@Y)AxH-9x zm3Fdk*_33D;aPD{-U8TOHrrUoVo*erjViRrdH=kAaESFkdLKc)P-vy?xQ(_6q^~lx z62&2m@4jBTx7#!Rf_=WIC#8-OG2X%W*7gvLi@S`9A|-OkMlR3^axFczxIo5$decXu ztmQ^^ks7fQ5Njn;DBzEWzx9Uru&xIFt47qG*ofF+h@n7?O`-hz`)K}eh2qmaFtzwN zLW12bXLSBP*b|8Gl!^O5+v`a3WQDj}JPti#;IsQi_GUTvnW5`N@AvKrmHi=d>j>r5 z6WXT^pQk1dUTtI(W~K$4u%xqHo;P&sGBBk-4j ze*F=)9hiJ^VvG5F2hj)js67-Xpig$P?XoRWZCk+q=RrPMEs3ns!t*=DcAfSF(f5bO z5k{&nZ*a?Uofz=H{J+No2S_0{IH@H{s*}m)YX&1hyX*-aS~W19_URbptQ!{`Lp^QR_s`7&I8G_sgxx~a{zd_` z>(j)&%LA5@`%zesCGPt?WUN-=1)R)w?(nE?Bb{qJT?wkJA)QYe7ZjC{1<1Rv7vuCc zB0UM3oW@({(GwT2Xmrkb|G3^_YfRGxht~Css(FFQitW5Cwp6|>Ucj3IJM((yg~~k0JD|sbGcG&Xs+XM?YRGL# z(lW8CDod5WW8xzrfiKyc?)G@<25^p2%wi#~?#(2~} z9&Zoe?Fpk6Z(6*qp{?N?HLzuQl6awFr+2==0sIPn%qdW|;=nSertW2X4`O!JL z2ydVnLjAL5<$X1@AA8!uNpwn*G)vUx5MSnCSW2>c8g$3)6_1Ju{LvMM9SI!lFArS6 zSW|q&;uo5#Ni^bqFaT>vCw_}jRYE8x$wdB2=#y#}7KX}5#rVQF83P-+z(nu!&zPe- z6yU$X4z%wn%74PF)SjSkU-kLD3LIFu^d#&DuM+88;q5VW4W;|~S)p?cE&D|4KBKkB zT1b2Y16FIJP=*;h8#A_9CpBluN|CELm~EBIQssHg>hW;bX}-!kktn!&9p zOXynBj8TMr0@mesB;vaW9C5Y8w>#3Uqvth&!WU&|VmvJQ%<-J#q?nxNa4-`WI51`_ zl#b*{`bty2W?Ygq+ObYd17yGN*G%A(!+~k+JS~Y*;v@qaD1EO4E|dKUgngCVRq%tO z%~206(Sc8fT9vSo0N!B#@SC_9#J3OdG>eN8_IYtj9SVDo**2ZT*bza8KQda7#Qi<;7#~uP%xN z&n6Okp(gW}ZpsUwc~1Y9(bToUj*xWB6gekTj4#vHb`hP9@r?il5eB{G@nv!N(yX(? z2B;D?K$V5PNL!3_wBH%HpHBZHD7*hIeFWD01o0UA{vrjrKs2>U2|AtL!1(?=z^62Z z_BoUepk-1V7-4l8lb|P1SNjXLj7cVM>PpCaVp4RxxsU2-S1IQ!ORvTc?gd?KQLrES z^VVn*2VC?`_y54&^jZ7Un1iFBF9+1OuWPVHObl0iKzx6PPh)K0TR;`Yc{C!;~dHOJFqwL^+8Wt1}DjJ-|ZfPRpxCuuJb(cZ5gD! zyc8utYgc!Rm<9gF{_dkP)GFV1S14rP;`b%sodY9;!CpG*upKsdpaz^>2{VFA3#eiv8`q@|V5c?eFIxhC;R$a(8zCwl`_5v(I0U^YjcTShABC za}3m0(+RXOk@8V1O08#ir=V`>-IUuM@OQ#46LF6?ubn{a-%fQ7xueg6J7ye~JDGI* zFUsw5vJYcZruB2ZE#k{)m9a7$GrJ9F@nG41>rSgY02|Vo$n{~gP_i6jMt22b*ktHl z?5+a-BcQTQ8LY)n6e`Kj(@SfRV*`icX~oZx#S?_YH*$C1vzdA=vn6JI6S2`?lp6Q5n# zocJ{IK8({x^h*Quqp=*uYOdTa&7NmhR;{EKv2-}gm??DoYX@6a68%2mo`T;j{XO*X z{u4AIh2n&VLeVI^C(aWoW%QZccH3`&!vr`emyeu#s9TA3e3R#oS1Wn++3+>vJJXczjOr)nlOAu*7_wyoMv6S+PMcgsnu>UHrT2ElM z%#(BL@M9=o*!T&AHd21TT{Ix z{eqLuqIdhV@%!igK7_y3{}g`T>^EQPFg{qcn><+9?cY2&=sjZGP_!QY2jTx8<2tOg zYw@-gZ}(a5FIo-%D)^rzBHRvq;BwPqnqi@};i9tms7Beze7N!D&R> zIzBFODj*$DZYeLaA#EnoRxSg_+imtfVtm%_SQ(3*Q-b@z%J~jxaKiYR=_Y&mr`5 z-~LPaISTEb+#t>T7W^9cqp&FD;Q1BaU2w@X9M49$YWOK%&IJbs-Nw0yTZnHZcrHZv zgYb)Z9)nX`b=Z|E-D(e6j$OaRJDIF2?z-9eUo#p8VU)hgfnVFU5o*ebX^TVATu{L{ z%#KsowY3X9GT(ES(*=GJ85`ja$7~Ceeu2|FrF05-fO7L0$c|jy?eL=h_Pv50RCx|C zXBFfh@*GLl|EZ|27)@NPZc>@*azzG0DPCRJZx(XNWTNyP>Wc?WK~GTh&IIRHb5tj6 zIC(}mTg}SOSQ3d5(c?B&M^`I6Y&A=UIT&MQg~k#qk}+y2!l_3J=4`y2ftB1AJfP)Mo(7)a7Ov zyZw!Q;nrkOQ15}-4?`)-P|Eu#Q3-zy{4}qRLgi7O0O~8#b!usdF0t7kW+npFw4`Nl% zyyC`r6Zj6)?m9hL8uY&djfr{KKMne`Ac>PJk=sVeS}X(p;o#P=;Qm2orY8(mBng`d zeVnQWSo4LZPiSP)#|80O|bYVx*e5C_8 zvGK|~-Yvjb{{#$kv5TVT*?Vz9+T5DfyjidoM8J|<`ctF#(;f9*k4+f#9}Z}CVvxC; zK`Vet7hwGpkd#6O2%5TaWdY96Zs;Y{d9g;_r~Fr zLr3U)w|`0RBEf*!-tC{>8{TBv%VCY5)C+1PYq&J}$_-%zuC&kN3-vm%k zlif;R9-jGl=Hi)y=M+4%-9dUK)153+D~urtSYc5w_K`hG$aGSzmP(%%F-PJwHWgSs z5qf7ydW44$-6rSBNh{Yy&K_nZhTibQ_nd(U{4zHWT| z-W_h$IjHk_hhfg=z#Re(X@#R}QX%$P1#p!AbpYct#Xab+0qr>wP@L#d>xlvKnZ5^+ zQ2OZ8$vXcPYWB(;gE@m#3m=;AMDXPGN4J_Aga*{FJ9^K(!JHL-tXmS ze2>ptfcmQ}YHQrqCfHSAfZ-EmoPnbnS>|*)aPy7wno9A})<%KH+090xy9@PIy3??FFj*Q&$+C`{Wf|T$uDtDXXNo1ox?8Xa zWm`whX(||HjmH_p0++R*SvUe!47|{F9A`c+syq*DZ4_n|9GR6WOY_kgx~yl~R%KIC zRD;>)E)$A`4O`0+n{_XnPk&^`tl5c~yQs%1=X|OF_s3kHVildILL20X*>tw<%Z(*^w4ty0)Yjh)U;4ag(TgQt`ykoy-%QlkB88Ys&zYZJH8F-yx^pajhJ>ws9yU z8Jlh=@4GH7*A^5BGFL_Nz_ z=ua8V;U5_73vh}MPeWlfPNIE!aV-n0ai@m(;bXS0mO7vOy-X{6u$OBh3}EUkG23LYE4Empj)w)I@&zuSPpb=S&&V8C^^Ug2SkJ67H z?eO@gf;-hxStaU?pdldz@A1#U7j@ROj`<-zN{dLP;~7XZjs;Z#3mBQC<8hA?ma|F6 zFHqXj!DZNmF9Wnr@IW-7Ggc}K_}*YJer6|){dot;@Jc2&V>H?6S$v_E$=N5Y<5f8- zqocrya(@`qkD5x-JXc#JBEYbz{AkBtu*+u*q~U@n3gLj_)ljYit#)P2(^Iqhzu>m#`8zzISLRHU9!RhzV1=+5mpJx0K5~r2s?f9;drY^B z(npw^?_yWwG9-#+_FltTT{2GPOhYS^hZZNP7V=3$nY_h(v~?TNiRb-)!A%@Jq$5rT zBCK!f=uSo9I~w@Z8&>$Sw~nsQ3`wTtJAT+n^0DSLV#b8Q4ntkrDYd-g%NhaskztZ6 zUE%BNr*Pdz5*_o5cLTDIuR#`uomLKVemFop@rC~_Y#T$cJrL-|U8px)e91p14nXD39n355sQf_6d}8K-`BsRl*j>cEU82Sz}D2#P#gI z7LO*d$O1m)cJef56<*_iCQj#mMPBDvKF_h-nF`6)qt0O)P9=6lBr$wJKBt6H&PP4v z;_rl*)ByP-_j|~E{SSXTnJ2u?<@1XjR>%jgW4~NH8#|~?xP_1+D%oV@_dNfBn9RM- zrSru?y5kWilm4twEnMUe2*aE|6Y{woT#HaFjOM13a$z*T!SrZF_L84DpA{x?zv4C* zEEHaY1fmJBl?&7PpW*J(1EarLQXu?Ja23oJ?hv*4zZZV(q;cKO1nvOW!o~0jq)JHO zt-^Nrcwq{k;CK*lF;BIFo6LwX+{m)rp4#6Km1#O^JFGUH`=B9s|UdFJy(T0hrMH6?2Zn|g{_VBp5 z#Z?LrSmUQTUUsG$+Y{R(>YapX*JY7-^i6c9YRYNy7`L4(5clvb&pWP5A_l*!FGF@a8^GT_W;}YqKkV2Mx)1IK|l;k9V z%t%g>=u#v(PuXLzH=yes4b!$+wrymGk$pUy!n${?56@${5=A_3+3^1Q-Qn^4WaC9b zTQzb6W3X_$nRp)7#)~4kCUdmgT*=jHI9DQ%eTZ5vPaQg?SK*YtUBFcj&p=>CfR@j| z<+K%}EF)>+Z9u3d&8>;?#OPFy{Oqe{1Kgu%s{Ym>s_c^-;S70f^4uxNT15eK(ip)p_ZU$i4#fo&qdo$>rZJfB_CfAocj%Vk zd~iCHwU4$c8m3qU+|i76C1QWj@XMWoLflllM^Hg(Y=JA!%Iq2?1`OG#Q8ZESK3RJh z(*Cfq;atSK@|uO|+(CgC?iMTs!yMBiqq#ex7dn3J*k4v9)bq21eZttY9VsOvthSb98l|1H3A?Ov znUffgR3wRXx56C8S!jSjT6c&$z%q>raYS@H_l2_oQs|krP(Nu0o|hVD=aLL3WPb;j zIY00oL0%stuVv12UJ4(rKPbzTvEVh1mByKp=hQlqEn^&U;;<#pm`!Ki4>P)tnTD0= z<~o2C-_@uRh(Sm4u_GCBg&62=@!7#l+}O>*j_@VW#NqB7oNL1N-QZPDLR6swax07! ziS>?-&|~b`MRq>Ewq2*hx=!!-?1UL43ddH!!!Q`*aCE<9nnT($#ScVQ++t=sQ(0!T z5TWB9<*3vXUBirBql)z;NOLND+xlEW2IMoLW#?R#_$to+^TbqhghZjS4aOIP-taxp zcgY)9e9=1%>lyuCFi1?_d9TKvW{z+NL$s*ZM1=j#t11R3$w1%74JwNN?4>X&nXN_6-E5BO zEEQ8(bA*xujm0S;reU+|xZo*&P>z{m99mBjsw3TPcZtEX5BmN3y45~9#`Fd`RSGN3 zxQUS_odkWd7i*Q2_6OWhe1TYnx9k_y7l#CGd@aCQcgmi}g=ZynlI(CP3RVI(>V(o1 zmm=>qbFaG!w-hyA;=1Rr(rWS|}(*mRp?CGIO!nDkO6}VB+$-)Lla^B*H>aXFORf z#H6cA^SSWs#7@dF01XQ`)3++}h54@o&T1h%JEC(jiAXq;_>UW;lzb;n>&_(p)%^p` z1HYoFbm_1N8ccIhrj4)Pw+Yf^XE8H~Tk^!LQ{YVYPadndIE7jdb+OGVtW6t9wnB25 zsue8%OHngU(cv~l#YX{X<;mRSL_v{9%OE({v<`C zV11DK!cAq0eL@bK#_f2(#K1!79-ryGT9cBQmZV}~c{>Xf!a@OSBwPVpHQbi!C^`3l zDG6!c!;x2`u-!@HM?b{!F{X5`TF3|0#_Y@H|MCDCYXki|M|hQtqLv*bd7N^-o_%j|dCF@u%fk%pUlubnmYJ8$92J(q zzQ356US(c9(^_j%<#E$^3ZJrO`?BI?DcmNEv$t)dtt>aXSULZ_WuuFtxY0$tjbu*5 zeu(H7I2s)Bj#gYT6}T_+4%pcB;n2B` zC*wFmVyzmZ($Q{+nWn6U6!rLRWJ|T#rpo1Q(QvU-0#kUr4~*Yp(^!->TWsN$e|MC& zLUzh`AkeuLj+R05*T5Ch0I`geX+WLgW+-8;jwnY|<$INNvtxmMr?O`kZ!srzs>Z~2 zT2lhk;Lt z#}EsNuxufF1j!h#uPWG0n(SIm1&O0}(8$g9q#PyJoulI^yfl6*n`Y^P%ugMpi_Kk1 z@#OkuWpfnCoa}Bjq*zXq1vcfjOGL$o3{N( zA{1i~5@Y!JhA~`wS`@$Offv*f;q==}2AapF^)YiI6bnjoxuJ9OxCDOweC1>FOQQ>u zR18P-G}i_5vGX#PfLDIf8x9FN3L7B-<`IZ?kw7ZhfoGrxC&mGSRm?(M2D%y@PoFbq zt|cPusGYP$@kebxlB1mAc#_2EiSNTJM@yOMspcOg3e_?@ zXGx^9S{=_Xvytp^I0bdFXUJiDQW(waXlYk?%m>HQCd~bs&^#u}dAxk39(iYkI zm2AM6g4665kKfMyNM7NZurnrOlg`Dk)40j=IPrDC#VEMroMu|HrkPX~eCo_EoQ~bv zxr$uN_~Hh!#hfQym!0*U$S};_x=nap$ew4#?)Z1YOyRx7FKSY=GCIPsHcrD$syE1X z{x(925u3AA~J5gJEi{!VJk}z;l?!b1fQ7_ z<5rHx4vlQ$B1yooiAxd>5`A7$Lb6!N#c~x~f+Gjg3b_Buxo~c+14PXXy-&1_Y_)wG z8VA}or8Q}too9S^<4mJnC~OI`Sy`I;J_etM91@JZXob`>^lX> zQ{&8vX|xB7Wn!Wkt2NuDpcs#iEqd;v5F@GNgTpK?a%>ixAklixp>QTvn4OC%HanXt zPCCz31pHrs)7&mJf(}-aMJWw4Ek`SO{PJZbU#X{T zfNR^B3|1l;36cV*!5P?}XJED29X9jBL@_~(Q_TDz%@WBcIv72*ckE*ImM%5qQS?!K zJZy>k*kntR>gv14n}D=&iWH>PfftbI&>&TIAigLH)O|!(HOqKN)(8o*w9_ClaE@f* z_J$><2vWBCC@$U+@Q=Xx=Ly_Rj*?S<>WwUX748*pqzuFB=$8O7V{}oxuNoN$^t}Ka z(1-uWRQRrt!&D<$!E-NDFIor9!fDtuOH0;2;*5n#jOrc0J{caO-@k3pzY?{6^>`Uh>GaZmvq93$tu$B8%o9t@ zqiPwpi64paRaw9o=t)8}&eWsat?YR5jQxm??sfXRzC>#!4SfbQ$q-<({pL^HZ+eYm zdpg5z$R~h&!sUFGBU8r5tHWeY6dZ}p}_}RdBNs#@& zNReW;(Y?d+xV3fk2eyB*8`WKe(GM;T_}2z-a~)EDM?B!<`p))4u3f&}+H-=oNdF*h zp+(SoGs8_XI;Dq;|K)8prRpEDR;$n3*A=a|zH58HdTH?k)*p|*Yv0Tdo2=m9wP_{? z{4)kywn4&QT03tKJ5_vUTda82zC&;sstSt8R&$zES5#rwi7sJPA;Y!nw*iN_2*YWB zyBP5D8V&JciM?6pv^;C4SgCBCG3$?=jBle{lP2kPZ~44Ec~eEVJzjiImnb^qRq+f% zM`Wt;XGJB2BRJmPz~}M2EgWO*$AMNuk$O8IGDuU!J**bcJR-RCJGNC7aO4qlvScfq zGgo6z7IV1v^jAqfr{{H!Mt!^(2Pob&mN1V24uYIM9)#vSFY?F>)~Ko=#-!9IhzEEX zZZ;M@{1|$;g;!!GeCC~C{lm5dl&BHkLy1)dB(nggIltRhLUx+(kn$~mkXvC~p#rV2 z3-^6pM8Ro^MNpt7kzymeN65CkXa9q}s({waP?$7t8tOG39JW^DG}|7wL_HKa@7#7- zN6&y=hMn7J`$kHsMG1u^_5_jUOIwz<%n;0=;b^ILW3Z*v-k8w}eWLgWo|e|gzH5&H zKCdi@7hjX1e;Z?t&Z(S@pg}R#v^v-_1MQ33*)krt;ho}&V*315AYj6?5Dr4LBpFVH z`&0W2kya9xDAN9HoYJfVC8^SaZ=(Y)+m05ho2`W8n~vAwUOHVHv>xJVH@fun{>FBD zyBb^%jgsGPbFo`NTTx#S7ek)P_d*Zxg~R;?QXNb1yuXL)+_-w@#-(=|>P+cYPg|1M zPMXBi>R4NH*~-z+3MB==w8hHw140@XFqstD{4mFI<4&Pz@hVe;utYd0BrjHG-W2>TL&NuR)t;pYgk(1TJ^5GxMhnhd9zF~GNGq*kWw6e{uDD?Y)Q zg{~z{Ts$!gS^NlaD)aa#Ta^9ARXj+uKy)K8!x$;Agtuizb`pJ)7+z$vEjN@dX4oiB zU9M5; z36p&v_eEI3WnTwulhc09whTp`>rIJ(YVJ+pe!fSoPIeRDtV?Bi^X zxc%J}=l^Md{(jZ}cgsJD7A%kA{%P38fD*4>uslhXG<0efPRN$Kfipp`S5G%e^QOrs zIYg4W6U0Z1zyxVc_IHXa3$&u1(>m;>i6Whkl?AaR4p=u%L3NfyIugW1r8_VpV?_hb z_oo?~7bmCar4yDv&fNvAI=j_71*K;in@y&QXBXF`JZ09N`JL4Qe&j(?UC>g>=;P53 z@qEktfd7ZSmQuQlYMD>Qe&+U=V$y#*2YTQ12MO*BUCAn?^6)FWUospjK256Z&w;4D zPBB-3Vs5b$gPh)Wz|vw5`U3vjuS^GaJG+?fEcM;QguN=H3icL~J&wFd?K{~WxUXEe=IZ--p+cKa57=wv!ux7%;a*@7o+>wy3Hp1X?Z^OBs?M$ba| zZ7ehgDI{9n$w6BYE&uNbU+ylJ{VCT%UzSVy`(nkou^q0o+lvM3?4tAbv0-%AbKZ8| zj+>SoeVRcf&}Sxp-bQsnjkVkXS^~5Q#~9)rGpy(B!}-q;9*OW@smbcOZizi_<)zTW5HmF_j;eS*#2>e(xntX1pXBG zl+Js)ub~Sd#mRL4MdvVQjv=}U3N1H8NwV?Oj)uKBJXHuE1a79XVH8J4)A%SQrYDXK z`YgC^&@%HN`K2scWTP&~H^|{Mdf+bV z+QKn2dLS#I8z4A$hAzN>64I4a((TSbpH~l=3DEM8j{3y^5M*2^-kOfOwZlWO6of;s!`; zN`-~YPO_`8u(0S8|KkJ8Hju38?lGe>An&I@Po+!OXXH%eP$NZt%;9;DbO(Mb66{rk}aZZ|C@6{Wl{ z`=Wc_@j{wmLw+HXx0gGuLH`eow-VD{A=k>JHwwA)mTfQ#>`b~!SOhA?%jAFJ&l}Ld z&iQlROq8jW=x>xX2EVVk$5^&{sqaO1hGmO4!?Fo(Biuu955TR5yB}^XTs_>q-gW~E zx{T#GoLjr#+TpZQAV&%}8Lpi=J;D*s1xMg?_{QOz3y#1w(!Pa*;aTnP@XW?@9reRC z!X1R;P=*VRz;)2LD5nQc4Z{A3rw8s3+%s^ka1z`*aP4qGnYTw;nHM6l%4LvG{FnO} zR%twX@3KuJtzXS>~N-a#0Zbu;wa zB}VI1aX7Ej@>Ju}Fe+aH+`wcoprz_&t01dI<+tdQ;vdFJwFI;a!@v_@tc}0d4T>Z2ZH#B=2Iu@3W&ssn?_R4p_)G1`vVv+Ox9|*$H0BbC3f)|T{caV$EvP>TO?tobjzFHC4h3@f*c*n_>%1EL zuJx+%yBfUK=OOE-2Q=FkGUK-|d>UU`@g+lsbo;_1$b;tfuvd*7UiZ>|md9+UuYYRn zFUQ!|V9e8TPn|;6#fZZl=-^RJ#+(S|2 zrG}~GaY{yU|Gk0+ zyj+?GZkEly7b$-gAhQRdjg*F?Y?M4g=GoHsy0+TF0spZ+r=`~FNo#Vn;tsVa@55do z!JS`K>2|(qJ}{1|#a3mlvYfX)V^rnsX0YEdR#?y52K`S3+Kr5%MBZPuU>9;W5M!(= zjpy#N?32&estb0L1NLxZBuCs&dQ_Q((!xTLb*K9{`%;?HIH#x!4gXiWwY0c2DaI5N z&l!OimwSpzBVr;sCi5OinRSokVR>0rT(C5UHOF*tvmk#l%ld)cZI2krc2WRDq=x;mZ;HUQW8t$MHlXbUSJ$N7AHv@Uhu(m59PjsT)kZRmU z9Cig4JJn`3&$O9)!8zI^XgEg!$vO-Pd?xGl4y9qdHE+%(dsS&=XckdRjuF#42AAImPZ@WPE2$0s%%Hx!zbM(xQ z0moO~A5C1z5TfVuF())yLMG#x1IJN^ebXIq^lX4C+bFNwMO?!aT|z-y-RN2 z7-KxQzyfWZI2YZAnO!mNMonWM1gprTyL0wsZ7|;*AWt(zo==g;F)? z;+wuSL86-NrHT_L!msF2)+gYYp+X1!97^A2R>MS8@fMZ=V&Z!f^tsvBvXS zojCr=M;LRojDGMym84hAz-ildnuss=O1Pz(i7yRDzTv@q=Lhp8zR_2L zJhxyvSo%{F=!7N)CGbwhKp3!1Qa_cYnu9acpeC;Ye_}sP)A~(NrfVP8QF?daH`p!T zb_M#LfkkOJ?#kef!N>luvEOZ-hB(mYb#f~2b%o*tZCk&;2z93Vw)_1qoFfhR zcl9zdWu&j8-~0W)k;4c5AL1$Ff4T=}Q+XmVf-{mz>ey9A1kNp!u{D=;;rOc0L z`+e)6|H(k*s{`m85A=75!pHvE10K+GG`<=8g(+B9CG;aOl%`$pVrUs7S*3#%*3B+N z8^nhE`S1e+5k-zm171OnVsgK`U7#?1b6M+J{c7E8*JUkMIlGb3Gmv7XH|uO@&wqcX zn)ibD?tVJ_=JYE04mxo|j!&m`&>Mv9!erzNP&AY$+|vg4y5{x$faFF$^NOPI5rKK# zF`K+`z^9<`Z~oKBd0hWS-?fZJKb~k^Q08>?Nxxln`b?bJQfG!k9M?OH99MqgTYJcH z#}Q5)bgI)Z@(JQyebR3s_YCy=kq_a3<0&A(4Y)K(2-Vkv2|_@Fkd1H#z@)h0{Rxz< zy5apZ-)|9UfCAb>@ zp8xQTT4;kZuJX$D<@HoW;BvrtHBFTW3q|EYTWsa9<5o`%2Hp@(^ITDXPkH6qrAup8 zmoHtt3NYUQ?A3ghI+rh}5pPUe4_jm9H82{r24^}{_X*m74oU|cyw}{qP?#RyDsK2r z<2XWL9Q>8HgslmMx$wQ}mas=cVYHCyTf!O`Ko%%mVb+Te+6u=-I6bc@xR5paSGiUAG5Oh)^GL8oOQQ;yMMJ4cH{83 zwys*9$AA;lWYyX=_tjLDFR!^im#)`+bxqy!^*;gk%2lu{Mgwkvy=Ik@#twd8Bd)G4 zr;t;-b!+S8xWR90Dpunw=5zI0fN)cMwCWm|0W7bF$;v8GP9smta=EE)dS8axp!=Xi zRPS5?LxTE{bvNe*SX@KrVl3*HBk^**vwo^Rt(x|2Qd#b_y!;h%w=WcF)6rf}D$7|x zLxXUyuB*DK<7pkQe!JS~H+`cWeoNY`9X_`QHmu>^hI7Du0QZSMh*PO`y~=Lj*u5$f>A za?mORmkakaoDojT>FJ+Vs~t7U1q~HzNkAE<2%D&)M-*gZJAPDf^e8AhOdlPf4Jwjny*bI`?xCdchd>?!c1lZ?6%04kPKycJL4 zUGdMv>+y-&>ZX74f=fLL`tzUvAdX7z2nAn#GI*!oM}@xM_@H4w^+&(c&i=oqp=;>> zHO)_zPrvD`te2>hAL7G33M5r~O(yQ=pVuFpC!l>o!R$^5xhe^(w)vMRmttrO@ zq^qTDP_n#g={@#FZ8GHUF3R%bhEn*9rhU3+CAFEaz9PT_j zO_)&q-r>}*RyC2#huUq{-3J=(&9|59(N^ofJUn#!_qONP4!`e(S$kVIeA@7M%WF~Y zhseaQi=LJG@1Sws_)G7$yV}Gzx_(iAsj#E%@!fmxe94l2N)wYG`_QjPiPbbtuYGNK z%`Zm(b)nP%xA3S0&;(TIrD2 z!K?4|8K!c`Yn>K*%%U`fc7(o@C}YDR^FNEkMv$Cw_@{`Kw`)WbYa+jn9J&1NrL*pO zK5J#ynmK`kUH`}**xXcbPfozV`q7J<~^T((S0O$^*@IF z{Ppx{8#jFSaQ2zmj(tzRHmT@ZQ8N+yWyiZeoZhi)PiEof-lq!LZ(dq@_?z05mX-$- z624A-zrBby0RCj!5c@{4VmaN11+hwaeF(JL^|1mo4kw6i;4ms%t9O-h+8S z7XsS#{HoQU3CGUK*H^63=d4Rx7o^pSR$_n!mlRmnhLK`@{rZ(v7{XOmFjzcp2!+A6 zU}kyIyoKeql6gW=@vL%8PjdhL_m5k%dM(`oEOoA4aeoEKCsWrspKci|1^xe9CX_b%0DJPQx?(UpxLe|DZQz-h=)OH-hRm0hpD^J^pU=c# zNksx%XkQPyN~?$S43|gpEm{5ldmRJb0s}`>Ic;22s-(4!!tKW|7kxx7CT7*156bnP zyB(4;VTMFUlr;*v3|iPI+>vqHA|cbaz@AlmQAgM+#{%4p=s%YO{vG9mshD(51DBFY z;Y;U|fx)4Ze_a4lWmFdC#okEp29L4sMRB!OQl?`J&AKjVV~dy1iQ_5n5|Sl*djAO? z4bAUHz2mKE2j^`PriqUUi%L^!U(ppqhK^)GQp2~rcZ)!!Z8mwPim|l|AZK^XFn>{1 zfrXSn_iwX&Z<(BH^AOyHnA_U`P1BGXa=+l&Z6(maz~~{}<|~n{S*oOGJx?L*X%91j z#-7ysn3bFLgPVSP!UKJ`y^mTRwW@Jb2q(nnp7#8_m@&|JR>)smaYrM@?Y)~2PVIW; zK*Ip>2?&Xl9w^Qr#Fx>lCpVsUQH^Pg`@UkIm&GY%f7evpvyQE$(#5ib0ZMqp!waj5 z=*eJ(^s~;DMcadLbhtdrW&h)zW%Bb;Pc5EK$yq!XF!WzpV!1m6<(uc0SpT24t}mpi zD2$)Gf8w&T6usLp?{rzZK#945gbwdG{=2SiVQ$vLEkaH!dMF05i9MX z@WEw46rn^BGNijgVk>Zva2|RY^w2}v`p%r>qzmVA{@nY0-+^W|baEmHx$wn|G- zKF}HHeMgbyEl6Wjia;7uR+@(~gA}Ia(oB}pZlw$;-HS0gcY%`@IE}~lN@KJ{8U+f& zR1b41k%nloG?<|~kiq$K;EUSNd{5ihVY9jBnaz^Lz~GQ4V=IO;A_aRp1=}G7>Lith zaSnU_}y&feVwgLzPQ|ZbFP|1d)f)xm%D=8yo9Z=3#ng{VKn0mAilvTh;!hcF8$0jKtJk1G^MOGb3$sv?HW z){rs;{@JG>ry4_kK2G{O{O)PUmk_}w(%pI=cXzCz^1uzOB^aX8*U378_cmHQSR=ax zuf%)#06M&$7!tS#Zpn#ko^!aRRU=Oei>Tbw(!mL3a#1kKUrMSDB}jvqkXMNjrSqPw zBp`@SWtSFwiR+!F0+Y^EU=`JnbwB}BK13x6%C2QzLw*pO z)3gUr9xw)oT$q>2oFKz6D^$U3&Hwgx>W#3_oaK|s>atN-59}U)OFuGQxwT%N!o%Q= r+wY$@v|#_(b|0;+&TX63x$WQ9-1g5M?XDg4-gAJ*YS_qwwTb=$X6xp1 literal 0 HcmV?d00001 diff --git a/targets/targets.json b/targets/targets.json index 219d6ce629..84b00732be 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -119,6 +119,11 @@ "inherits": [ "PSA_Target" ], + "tfm_target_name": "", + "tfm_bootloader_supported": "", + "tfm_default_toolchain": "ARMCLANG", + "tfm_supported_toolchains": null, + "delivery_dir": "", "public": false }, "PSA_V8_M_NSPE": { @@ -138,6 +143,11 @@ "inherits": [ "PSA_Target" ], + "tfm_target_name": "", + "tfm_bootloader_supported": "", + "tfm_default_toolchain": "ARMCLANG", + "tfm_supported_toolchains": null, + "delivery_dir": "", "public": false }, "CM4_UARM": { @@ -12861,8 +12871,22 @@ ], "bootloader_supported": false }, + "CY8CPROTO_064_SB_S": { + "inherits": [ + "PSA_DUAL_V7_M_SPE" + ], + "tfm_target_name": "psoc64", + "tfm_bootloader_supported": false, + "tfm_default_toolchain": "ARMCLANG", + "tfm_supported_toolchains": [ + "ARMCLANG", + "GNUARM" + ], + "delivery_dir": "TARGET_Cypress/TARGET_PSOC6/TARGET_CY8CPROTO_064_SB/prebuilt" + }, "CY8CPROTO_064_SB": { "inherits": [ + "PSA_DUAL_V7_M_NSPE", "MCU_PSOC6_M4" ], "components_remove": [ diff --git a/tools/psa/build_tfm.py b/tools/psa/build_tfm.py index 5fd4240651..f10c3caf88 100644 --- a/tools/psa/build_tfm.py +++ b/tools/psa/build_tfm.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Copyright (c) 2019 ARM Limited. All rights reserved. @@ -18,22 +18,24 @@ limitations under the License. """ import os -from os.path import join, abspath, dirname, isdir +from os.path import join, abspath, dirname, isdir, relpath +import argparse import sys import shutil import subprocess import logging -logger = logging.getLogger('TF-M-Builder') +ROOT = abspath(join(dirname(__file__), os.pardir, os.pardir)) +sys.path.insert(0, ROOT) +from tools.targets import Target, TARGET_MAP, TARGET_NAMES + logging.basicConfig(level=logging.INFO, format='[%(name)s] %(asctime)s: %(message)s.', datefmt='%H:%M:%S') +logger = logging.getLogger('TF-M-Builder') -ROOT = abspath(join(dirname(__file__), os.pardir, os.pardir)) -sys.path.insert(0, ROOT) - -TF_M_BUILD_DIR = join(ROOT, os.pardir, 'tfm_build_dir') -VERSION_FILE_PATH = join(ROOT, 'features/FEATURE_PSA/FEATURE_TFM') +TF_M_BUILD_DIR = abspath(join(ROOT, os.pardir, 'tfm_build_dir')) +VERSION_FILE_PATH = join(ROOT, 'features/FEATURE_PSA/TARGET_TFM') dependencies = { "trusted-firmware-m": @@ -46,22 +48,37 @@ dependencies = { "CMSIS_5": ['https://github.com/ARM-software/CMSIS_5.git', '5.5.0'], } +def is_cmake_installed(): + """ + Check if cmake is installed + """ + command = ['cmake', '--version'] + return(run_cmd_and_return_errorcode(command)) + def is_git_installed(): """ Check if git is installed """ command = ['git', '--version'] - try: - with open(os.devnull, 'w') as fnull: - return subprocess.call(command, stdout=fnull, stderr=fnull) - except OSError as e: - return e.errno + return(run_cmd_and_return_errorcode(command)) def is_git_lfs_installed(): """ Check if git-lfs is installed """ command = ['git-lfs', '--version'] + return(run_cmd_and_return_errorcode(command)) + +def run_cmd_and_return_errorcode(command): + """ + Run the command in the sytem and return errorcode. + Commands are passed as a list of tokens. + E.g. The command 'git remote -v' would be passed in as: + ['git', 'remote', '-v'] + + :param command: System command as a list of tokens + """ + logger.debug('[Exec] %s', ' '.join(command)) try: with open(os.devnull, 'w') as fnull: return subprocess.call(command, stdout=fnull, stderr=fnull) @@ -88,7 +105,7 @@ def run_cmd_and_return_output(command): clean_up_cloned_repos() return output.decode("utf-8") -def detect_and_write_tfm_version(tfm_dir): +def detect_and_write_tfm_version(tfm_dir, commit): """ Identify the version of TF-M and write it to VERSION.txt :param tfm_dir: The filesystem path where TF-M repo is cloned @@ -102,9 +119,12 @@ def detect_and_write_tfm_version(tfm_dir): with open(join(VERSION_FILE_PATH, 'VERSION.txt'), 'w') as f: f.write(tfm_version) + if commit: + commit_changes(VERSION_FILE_PATH) + def check_repo_version(name, deps): """ - Compare the version of cloned and expected and exit if they dont match + Compare the version of cloned and expected and exit if they don't match :param name: Name of the git repository :param deps: Dictionary containing dependency details """ @@ -142,7 +162,7 @@ def check_and_clone_repo(name, deps): logger.info('%s repo exists, checking git version...', name) check_repo_version(name, deps) -def clone_tfm_repo(): +def clone_tfm_repo(commit): """ Clone TF-M git repos and it's dependencies """ @@ -150,7 +170,8 @@ def clone_tfm_repo(): check_and_clone_repo('mbedtls', dependencies) check_and_clone_repo('mbed-crypto', dependencies) check_and_clone_repo('CMSIS_5', dependencies) - detect_and_write_tfm_version(join(TF_M_BUILD_DIR, 'trusted-firmware-m')) + detect_and_write_tfm_version(join(TF_M_BUILD_DIR, 'trusted-firmware-m'), + commit) def clean_up_cloned_repos(): """ @@ -160,22 +181,301 @@ def clean_up_cloned_repos(): shutil.rmtree(TF_M_BUILD_DIR) except OSError as e: logger.error('Unable to cleanup cloned repos') - logger.error('"%s" occured', e.strerror) + logger.error('"%s" occurred', e.strerror) + +def get_tfm_secure_targets(): + """ + Creates a list of TF-M secure targets. + + :return: List of TF-M secure targets. + """ + return [str(t) for t in TARGET_NAMES if + Target.get_target(t).is_TFM_target] + +def get_target_info(target, toolchain=None): + """ + Creates a TF-M target tuple with default toolchain and + artifact delivery directory. + + :param target: Target name. + :param toolchain: Toolchain + :return: tuple (target, toolchain, delivery directory). + """ + if toolchain: + if not TARGET_MAP[target].tfm_supported_toolchains: + msg = "Supported Toolchains is not configured for target %s" % ( + TARGET_MAP[target].name) + raise Exception(msg) + elif toolchain not in TARGET_MAP[target].tfm_supported_toolchains: + msg = "Toolchain %s is not supported by %s" % (toolchain, + TARGET_MAP[target].name) + raise Exception(msg) + tc = toolchain + else: + tc = TARGET_MAP[target].tfm_default_toolchain + + delivery_dir = join(ROOT, 'targets', + TARGET_MAP[target].delivery_dir) + + if not os.path.exists(delivery_dir): + msg = "Delivery directory (delivery_dir) missing for %s" % target + raise FileNotFoundError(msg) + + bl_sup = True if TARGET_MAP[target].tfm_bootloader_supported else False + return tuple([TARGET_MAP[target].name, + TARGET_MAP[target].tfm_target_name, + tc, + delivery_dir, + bl_sup]) + +def get_mbed_supported_tfm_targets(): + tfm_secure_targets = get_tfm_secure_targets() + logger.debug("Found the following TF-M targets: {}".format( + ', '.join(tfm_secure_targets))) + + return [get_target_info(t) for t in tfm_secure_targets] + +def commit_changes(directory, target=None, toolchain=None): + """ + Check for changes in `directory` and if any then commit them + :param directory: path to be checked for changes + :param target: Target name + :param toolchain: Toolchain name + """ + # Use --intent-to-add option of git status to identify un-tracked files + cmd = ['git', '-C', ROOT, 'status', 'N', directory] + run_cmd_and_return_errorcode(cmd) + + cmd = ['git', '-C', ROOT, 'diff', '--exit-code', '--quiet', directory] + changes_made = run_cmd_and_return_errorcode(cmd) + + if changes_made: + if target: + logger.info("Change in image for %s has been detected" % target) + else: + logger.info("Change detected in directory %s" % directory) + cmd = ['git', '-C', ROOT, 'add', relpath(directory, ROOT)] + run_cmd_and_return_errorcode(cmd) + + if target: + logger.info("Committing image for %s" % target) + msg = '--message="Updated secure binary for %s (%s)"' % (target, + toolchain) + else: + logger.info("Committing changes in directory %s" % directory) + msg = '--message="Updated directory %s "' % directory + + cmd = ['git', '-C', ROOT, 'commit', msg] + run_cmd_and_return_errorcode(cmd) + else: + if target: + logger.info("No changes detected in %s, skipping commit" % target) + else: + logger.info("No changes detected in %s, skipping commit" % + relpath(directory, ROOT)) + +def run_cmake_build(configure, cmake_build_dir, bl_supported= None, + tfm_target=None, tfm_toolchain=None, debug=False): + + if configure: + cmake_cmd = ['cmake', '-GUnix Makefiles'] + cmake_cmd.append('-DPROJ_CONFIG=' + (join(TF_M_BUILD_DIR, + 'trusted-firmware-m', 'configs/ConfigCoreIPC.cmake'))) + cmake_cmd.append('-DTARGET_PLATFORM=' + tfm_target) + cmake_cmd.append('-DCOMPILER=' + tfm_toolchain) + if debug: + cmake_cmd.append('-DCMAKE_BUILD_TYPE=Debug') + else: + cmake_cmd.append('-DCMAKE_BUILD_TYPE=Release') + if not bl_supported: + cmake_cmd.append('-DBL2=False') + cmake_cmd.append('..') + else: + cmake_cmd = ['cmake', '--build', '.', '--', 'install'] + + proc = subprocess.Popen(cmake_cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, cwd=cmake_build_dir) + for line in iter(proc.stdout.readline, b''): + logger.debug(line.decode("utf-8").strip('\n')) + + std_out, std_err = proc.communicate() + + if proc.returncode: + logger.info(std_err.decode("utf-8")) + return proc.returncode + +def get_parser(): + parser = argparse.ArgumentParser() + + parser.add_argument("-m", "--mcu", + help="Build for the given MCU", + default=None, + choices=get_tfm_secure_targets()) + hmsg = "Build for the given tool chain (default is tfm_default_toolchain)" + parser.add_argument("-t", "--toolchain", + help=hmsg, + default=None, + choices=["ARMCLANG", "GNUARM"]) + + parser.add_argument("-d", "--debug", + help="Set build profile to debug", + action="store_true", + default=False) + + parser.add_argument('-l', '--list', + action="store_true", + default=False, + help="Print supported TF-M secure targets") + + parser.add_argument("--clone", + help="Clone TF-M git repo and its dependencies", + action="store_true", + default=False) + + parser.add_argument("--commit", + help="Create a git commit for each platform", + action="store_true", + default=False) + + parser.add_argument("--clean-build", + help="Remove cmake build directory", + action="store_true", + default=False) + + parser.add_argument("-v", "--verbose", + help="Verbose output", + action="store_true", + default=False) + + return parser + +def clean_build_directory(): + cmake_build_dir = join(TF_M_BUILD_DIR, 'trusted-firmware-m', 'cmake_build') + if isdir(cmake_build_dir): + logger.info("Removing cmake build directory %s" % + relpath(cmake_build_dir)) + shutil.rmtree(cmake_build_dir) def main(): """ - Build Trusted Firmware M (TF-M) image for mbed-os supported TF-M targets. - Current version of the script only clones TF-M git repo and dependencies - and creates a VERSION.txt file under 'features/FEATURE_PSA/FEATURE_TFM' + Build Trusted Firmware M (TF-M) image for mbed-os supported TF-M targets """ + + parser = get_parser() + args = parser.parse_args() + + if args.clean_build: + clean_build_directory() + return + + if args.verbose: + logger.setLevel(logging.DEBUG) + + if args.list: + logger.info("Supported TF-M platforms are: {}".format( + ', '.join([t for t in get_tfm_secure_targets()]))) + return + if not isdir(TF_M_BUILD_DIR): os.mkdir(TF_M_BUILD_DIR) - clone_tfm_repo() + + clone_tfm_repo(args.commit) + if args.clone: + return + + cmake_build_dir = join(TF_M_BUILD_DIR, 'trusted-firmware-m', 'cmake_build') + if not isdir(cmake_build_dir): + os.mkdir(cmake_build_dir) + + debug = False + if args.mcu: + tgt = None + if args.toolchain: + msg = "Building TF-M for target %s using toolchain %s" % (args.mcu, + args.toolchain) + logger.info(msg) + tgt = get_target_info(args.mcu, args.toolchain) + else: + tgt = get_target_info(args.mcu) + msg = "Building TF-M for target %s using default toolchain %s" % ( + args.mcu, tgt[2]) + logger.info(msg) + + if args.debug: + debug = True + + retcode = run_cmake_build(True, cmake_build_dir, tgt[4], tgt[1], + tgt[2], debug) + if retcode: + msg = "Cmake configure failed for target %s using toolchain %s" % ( + tgt[0], tgt[2]) + logger.critical(msg) + sys.exit(1) + + retcode = run_cmake_build(False, cmake_build_dir) + if retcode: + msg = "Cmake build failed for target %s using toolchain %s" % ( + tgt[0], tgt[2]) + logger.critical(msg) + sys.exit(1) + + output_dir = None + if(tgt[3].endswith('/')): + output_dir = tgt[3] + else: + output_dir = tgt[3] + '/' + tfm_secure_bin = join(cmake_build_dir, 'install', 'outputs', tgt[1], + 'tfm_s.bin') + logger.info("Copying %s to %s" % (relpath(tfm_secure_bin, ROOT), + relpath(output_dir, ROOT))) + shutil.copy2(tfm_secure_bin, output_dir) + + if args.commit: + commit_changes(tgt[3], tgt[0], tgt[2]) + else: + for tgt in get_mbed_supported_tfm_targets(): + msg = "Building TF-M for target %s using default toolchain %s" % ( + tgt[0], tgt[2]) + logger.info(msg) + + if args.debug: + debug = True + + retcode = run_cmake_build(True, cmake_build_dir, tgt[4], tgt[1], + tgt[2], debug) + if retcode: + msg = "Cmake configure failed for target %s with toolchain %s" % ( + tgt[0], tgt[2]) + logger.critical(msg) + sys.exit(1) + retcode = run_cmake_build(False, cmake_build_dir) + if retcode: + msg = "Cmake build failed for target %s using toolchain %s" % ( + tgt[0], tgt[2]) + logger.critical(msg) + sys.exit(1) + + output_dir = None + if(tgt[3].endswith('/')): + output_dir = tgt[3] + else: + output_dir = tgt[3] + '/' + + tfm_secure_bin = join(cmake_build_dir, 'install', 'outputs', + tgt[1], 'tfm_s.bin') + logger.info("Copying %s to %s" % (relpath(tfm_secure_bin, ROOT), + relpath(output_dir, ROOT))) + shutil.copy2(tfm_secure_bin, output_dir) + + if args.commit: + commit_changes(tgt[3], tgt[0], tgt[2]) if __name__ == '__main__': if is_git_installed() != 0: logger.error('"git" is not installed. Exiting...') elif is_git_lfs_installed() != 0: logger.error('"git-lfs" is not installed. Exiting...') + elif is_cmake_installed() != 0: + logger.error('"cmake" is not installed. Exiting...') else: main() diff --git a/tools/targets/__init__.py b/tools/targets/__init__.py index 9b760c6d42..80b57d7d64 100644 --- a/tools/targets/__init__.py +++ b/tools/targets/__init__.py @@ -418,8 +418,8 @@ class Target(namedtuple( return 'NSPE_Target' in self.labels @property - def is_PSA_target(self): - return self.is_PSA_secure_target or self.is_PSA_non_secure_target + def is_TFM_target(self): + return getattr(self, 'tfm_target_name', False) def get_post_build_hook(self, toolchain_labels): """Initialize the post-build hooks for a toolchain. For now, this