sphinx.addnodesdocument)}( rawsourcechildren](docutils.nodessubstitution_definition)}(h&.. |AArch32| replace:: :term:`AArch32`h]h pending_xref)}(h:term:`AArch32`h]h inline)}(hhh]h TextAArch32}(hhparenthuba attributes}(ids]classes](xrefstdstd-termenames]dupnames]backrefs]utagnamehh!hubah"}(h$]h&]h+]h-]h/]refdoc design_documents/cmake_framework refdomainh)reftypeterm refexplicitrefwarn reftargetAArch32uh1hsource lineKh!h ubah"}(h$]h&]h+]AArch32ah-]h/]uh1h hAhBhCKh!hhhubh )}(h&.. |AArch64| replace:: :term:`AArch64`h]h)}(h:term:`AArch64`h]h)}(hhQh]hAArch64}(hhh!hSubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hOubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainh]reftypeterm refexplicitrefwarnh?AArch64uh1hhAhBhCKh!hKubah"}(h$]h&]h+]AArch64ah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |AMU| replace:: :term:`AMU`h]h)}(h :term:`AMU`h]h)}(hh|h]hAMU}(hhh!h~ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hzubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhreftypeterm refexplicitrefwarnh?AMUuh1hhAhBhCKh!hvubah"}(h$]h&]h+]AMUah-]h/]uh1h hAhBhCKh!hhhubh )}(h&.. |AMUs| replace:: :term:`AMUs `h]h)}(h:term:`AMUs `h]h)}(hhh]hAMUs}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhreftypeterm refexplicitrefwarnh?AMUuh1hhAhBhCKh!hubah"}(h$]h&]h+]AMUsah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |API| replace:: :term:`API`h]h)}(h :term:`API`h]h)}(hhh]hAPI}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhތreftypeterm refexplicitrefwarnh?APIuh1hhAhBhCKh!hubah"}(h$]h&]h+]APIah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |BTI| replace:: :term:`BTI`h]h)}(h :term:`BTI`h]h)}(hhh]hBTI}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?BTIuh1hhAhBhCKh!hubah"}(h$]h&]h+]BTIah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |CoT| replace:: :term:`CoT`h]h)}(h :term:`CoT`h]h)}(hj(h]hCoT}(hhh!j*ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j&ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj4reftypeterm refexplicitrefwarnh?CoTuh1hhAhBhCKh!j"ubah"}(h$]h&]h+]CoTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |COT| replace:: :term:`COT`h]h)}(h :term:`COT`h]h)}(hjSh]hCOT}(hhh!jUubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jQubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj_reftypeterm refexplicitrefwarnh?COTuh1hhAhBhCKh!jMubah"}(h$]h&]h+]COTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |CSS| replace:: :term:`CSS`h]h)}(h :term:`CSS`h]h)}(hj~h]hCSS}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j|ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?CSSuh1hhAhBhCK h!jxubah"}(h$]h&]h+]CSSah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |CVE| replace:: :term:`CVE`h]h)}(h :term:`CVE`h]h)}(hjh]hCVE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?CVEuh1hhAhBhCK h!jubah"}(h$]h&]h+]CVEah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DTB| replace:: :term:`DTB`h]h)}(h :term:`DTB`h]h)}(hjh]hDTB}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?DTBuh1hhAhBhCK h!jubah"}(h$]h&]h+]DTBah-]h/]uh1h hAhBhCK h!hhhubh )}(h .. |DS-5| replace:: :term:`DS-5`h]h)}(h :term:`DS-5`h]h)}(hjh]hDS-5}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?DS-5uh1hhAhBhCK h!jubah"}(h$]h&]h+]DS-5ah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DSU| replace:: :term:`DSU`h]h)}(h :term:`DSU`h]h)}(hj*h]hDSU}(hhh!j,ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j(ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj6reftypeterm refexplicitrefwarnh?DSUuh1hhAhBhCK h!j$ubah"}(h$]h&]h+]DSUah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DT| replace:: :term:`DT`h]h)}(h :term:`DT`h]h)}(hjUh]hDT}(hhh!jWubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jSubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjareftypeterm refexplicitrefwarnh?DTuh1hhAhBhCKh!jOubah"}(h$]h&]h+]DTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |EL| replace:: :term:`EL`h]h)}(h :term:`EL`h]h)}(hjh]hEL}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j~ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ELuh1hhAhBhCKh!jzubah"}(h$]h&]h+]ELah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |EHF| replace:: :term:`EHF`h]h)}(h :term:`EHF`h]h)}(hjh]hEHF}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?EHFuh1hhAhBhCKh!jubah"}(h$]h&]h+]EHFah-]h/]uh1h hAhBhCKh!hhhubh )}(h".. |FCONF| replace:: :term:`FCONF`h]h)}(h :term:`FCONF`h]h)}(hjh]hFCONF}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FCONFuh1hhAhBhCKh!jubah"}(h$]h&]h+]FCONFah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FDT| replace:: :term:`FDT`h]h)}(h :term:`FDT`h]h)}(hjh]hFDT}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?FDTuh1hhAhBhCKh!jubah"}(h$]h&]h+]FDTah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |FF-A| replace:: :term:`FF-A`h]h)}(h :term:`FF-A`h]h)}(hj,h]hFF-A}(hhh!j.ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j*ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj8reftypeterm refexplicitrefwarnh?FF-Auh1hhAhBhCKh!j&ubah"}(h$]h&]h+]FF-Aah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FIP| replace:: :term:`FIP`h]h)}(h :term:`FIP`h]h)}(hjWh]hFIP}(hhh!jYubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jUubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjcreftypeterm refexplicitrefwarnh?FIPuh1hhAhBhCKh!jQubah"}(h$]h&]h+]FIPah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FVP| replace:: :term:`FVP`h]h)}(h :term:`FVP`h]h)}(hjh]hFVP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FVPuh1hhAhBhCKh!j|ubah"}(h$]h&]h+]FVPah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FWU| replace:: :term:`FWU`h]h)}(h :term:`FWU`h]h)}(hjh]hFWU}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FWUuh1hhAhBhCKh!jubah"}(h$]h&]h+]FWUah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |GIC| replace:: :term:`GIC`h]h)}(h :term:`GIC`h]h)}(hjh]hGIC}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?GICuh1hhAhBhCKh!jubah"}(h$]h&]h+]GICah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |ISA| replace:: :term:`ISA`h]h)}(h :term:`ISA`h]h)}(hjh]hISA}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ISAuh1hhAhBhCKh!jubah"}(h$]h&]h+]ISAah-]h/]uh1h hAhBhCKh!hhhubh )}(h$.. |Linaro| replace:: :term:`Linaro`h]h)}(h:term:`Linaro`h]h)}(hj.h]hLinaro}(hhh!j0ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j,ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj:reftypeterm refexplicitrefwarnh?Linarouh1hhAhBhCKh!j(ubah"}(h$]h&]h+]Linaroah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |MMU| replace:: :term:`MMU`h]h)}(h :term:`MMU`h]h)}(hjYh]hMMU}(hhh!j[ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jWubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjereftypeterm refexplicitrefwarnh?MMUuh1hhAhBhCKh!jSubah"}(h$]h&]h+]MMUah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |MPAM| replace:: :term:`MPAM`h]h)}(h :term:`MPAM`h]h)}(hjh]hMPAM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPAMuh1hhAhBhCKh!j~ubah"}(h$]h&]h+]MPAMah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |MPMM| replace:: :term:`MPMM`h]h)}(h :term:`MPMM`h]h)}(hjh]hMPMM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPMMuh1hhAhBhCKh!jubah"}(h$]h&]h+]MPMMah-]h/]uh1h hAhBhCKh!hhhubh )}(h".. |MPIDR| replace:: :term:`MPIDR`h]h)}(h :term:`MPIDR`h]h)}(hjh]hMPIDR}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPIDRuh1hhAhBhCKh!jubah"}(h$]h&]h+]MPIDRah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |MTE| replace:: :term:`MTE`h]h)}(h :term:`MTE`h]h)}(hjh]hMTE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MTEuh1hhAhBhCKh!jubah"}(h$]h&]h+]MTEah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |OEN| replace:: :term:`OEN`h]h)}(h :term:`OEN`h]h)}(hj0h]hOEN}(hhh!j2ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j.ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj<reftypeterm refexplicitrefwarnh?OENuh1hhAhBhCKh!j*ubah"}(h$]h&]h+]OENah-]h/]uh1h hAhBhCKh!hhhubh )}(h$.. |OP-TEE| replace:: :term:`OP-TEE`h]h)}(h:term:`OP-TEE`h]h)}(hj[h]hOP-TEE}(hhh!j]ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jYubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjgreftypeterm refexplicitrefwarnh?OP-TEEuh1hhAhBhCK h!jUubah"}(h$]h&]h+]OP-TEEah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |OTE| replace:: :term:`OTE`h]h)}(h :term:`OTE`h]h)}(hjh]hOTE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?OTEuh1hhAhBhCK!h!jubah"}(h$]h&]h+]OTEah-]h/]uh1h hAhBhCK!h!hhhubh )}(h.. |PDD| replace:: :term:`PDD`h]h)}(h :term:`PDD`h]h)}(hjh]hPDD}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PDDuh1hhAhBhCK"h!jubah"}(h$]h&]h+]PDDah-]h/]uh1h hAhBhCK"h!hhhubh )}(h".. |PAUTH| replace:: :term:`PAUTH`h]h)}(h :term:`PAUTH`h]h)}(hjh]hPAUTH}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PAUTHuh1hhAhBhCK#h!jubah"}(h$]h&]h+]PAUTHah-]h/]uh1h hAhBhCK#h!hhhubh )}(h.. |PMF| replace:: :term:`PMF`h]h)}(h :term:`PMF`h]h)}(hjh]hPMF}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PMFuh1hhAhBhCK$h!jubah"}(h$]h&]h+]PMFah-]h/]uh1h hAhBhCK$h!hhhubh )}(h .. |PSCI| replace:: :term:`PSCI`h]h)}(h :term:`PSCI`h]h)}(hj2h]hPSCI}(hhh!j4ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j0ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj>reftypeterm refexplicitrefwarnh?PSCIuh1hhAhBhCK%h!j,ubah"}(h$]h&]h+]PSCIah-]h/]uh1h hAhBhCK%h!hhhubh )}(h.. |RAS| replace:: :term:`RAS`h]h)}(h :term:`RAS`h]h)}(hj]h]hRAS}(hhh!j_ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j[ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjireftypeterm refexplicitrefwarnh?RASuh1hhAhBhCK&h!jWubah"}(h$]h&]h+]RASah-]h/]uh1h hAhBhCK&h!hhhubh )}(h.. |ROT| replace:: :term:`ROT`h]h)}(h :term:`ROT`h]h)}(hjh]hROT}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ROTuh1hhAhBhCK'h!jubah"}(h$]h&]h+]ROTah-]h/]uh1h hAhBhCK'h!hhhubh )}(h .. |SCMI| replace:: :term:`SCMI`h]h)}(h :term:`SCMI`h]h)}(hjh]hSCMI}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SCMIuh1hhAhBhCK(h!jubah"}(h$]h&]h+]SCMIah-]h/]uh1h hAhBhCK(h!hhhubh )}(h.. |SCP| replace:: :term:`SCP`h]h)}(h :term:`SCP`h]h)}(hjh]hSCP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SCPuh1hhAhBhCK)h!jubah"}(h$]h&]h+]SCPah-]h/]uh1h hAhBhCK)h!hhhubh )}(h .. |SDEI| replace:: :term:`SDEI`h]h)}(h :term:`SDEI`h]h)}(hj h]hSDEI}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SDEIuh1hhAhBhCK*h!jubah"}(h$]h&]h+]SDEIah-]h/]uh1h hAhBhCK*h!hhhubh )}(h.. |SDS| replace:: :term:`SDS`h]h)}(h :term:`SDS`h]h)}(hj4h]hSDS}(hhh!j6ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j2ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj@reftypeterm refexplicitrefwarnh?SDSuh1hhAhBhCK+h!j.ubah"}(h$]h&]h+]SDSah-]h/]uh1h hAhBhCK+h!hhhubh )}(h.. |SEA| replace:: :term:`SEA`h]h)}(h :term:`SEA`h]h)}(hj_h]hSEA}(hhh!jaubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j]ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjkreftypeterm refexplicitrefwarnh?SEAuh1hhAhBhCK,h!jYubah"}(h$]h&]h+]SEAah-]h/]uh1h hAhBhCK,h!hhhubh )}(h.. |SiP| replace:: :term:`SiP`h]h)}(h :term:`SiP`h]h)}(hjh]hSiP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SiPuh1hhAhBhCK-h!jubah"}(h$]h&]h+]SiPah-]h/]uh1h hAhBhCK-h!hhhubh )}(h.. |SIP| replace:: :term:`SIP`h]h)}(h :term:`SIP`h]h)}(hjh]hSIP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SIPuh1hhAhBhCK.h!jubah"}(h$]h&]h+]SIPah-]h/]uh1h hAhBhCK.h!hhhubh )}(h.. |SMC| replace:: :term:`SMC`h]h)}(h :term:`SMC`h]h)}(hjh]hSMC}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SMCuh1hhAhBhCK/h!jubah"}(h$]h&]h+]SMCah-]h/]uh1h hAhBhCK/h!hhhubh )}(h".. |SMCCC| replace:: :term:`SMCCC`h]h)}(h :term:`SMCCC`h]h)}(hj h]hSMCCC}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SMCCCuh1hhAhBhCK0h!jubah"}(h$]h&]h+]SMCCCah-]h/]uh1h hAhBhCK0h!hhhubh )}(h.. |SoC| replace:: :term:`SoC`h]h)}(h :term:`SoC`h]h)}(hj6h]hSoC}(hhh!j8ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j4ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjBreftypeterm refexplicitrefwarnh?SoCuh1hhAhBhCK1h!j0ubah"}(h$]h&]h+]SoCah-]h/]uh1h hAhBhCK1h!hhhubh )}(h.. |SP| replace:: :term:`SP`h]h)}(h :term:`SP`h]h)}(hjah]hSP}(hhh!jcubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j_ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjmreftypeterm refexplicitrefwarnh?SPuh1hhAhBhCK2h!j[ubah"}(h$]h&]h+]SPah-]h/]uh1h hAhBhCK2h!hhhubh )}(h.. |SPD| replace:: :term:`SPD`h]h)}(h :term:`SPD`h]h)}(hjh]hSPD}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SPDuh1hhAhBhCK3h!jubah"}(h$]h&]h+]SPDah-]h/]uh1h hAhBhCK3h!hhhubh )}(h.. |SPM| replace:: :term:`SPM`h]h)}(h :term:`SPM`h]h)}(hjh]hSPM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SPMuh1hhAhBhCK4h!jubah"}(h$]h&]h+]SPMah-]h/]uh1h hAhBhCK4h!hhhubh )}(h .. |SSBS| replace:: :term:`SSBS`h]h)}(h :term:`SSBS`h]h)}(hjh]hSSBS}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SSBSuh1hhAhBhCK5h!jubah"}(h$]h&]h+]SSBSah-]h/]uh1h hAhBhCK5h!hhhubh )}(h.. |SVE| replace:: :term:`SVE`h]h)}(h :term:`SVE`h]h)}(hj h]hSVE}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?SVEuh1hhAhBhCK6h!j ubah"}(h$]h&]h+]SVEah-]h/]uh1h hAhBhCK6h!hhhubh )}(h.. |TBB| replace:: :term:`TBB`h]h)}(h :term:`TBB`h]h)}(hj8 h]hTBB}(hhh!j: ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j6 ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjD reftypeterm refexplicitrefwarnh?TBBuh1hhAhBhCK7h!j2 ubah"}(h$]h&]h+]TBBah-]h/]uh1h hAhBhCK7h!hhhubh )}(h .. |TBBR| replace:: :term:`TBBR`h]h)}(h :term:`TBBR`h]h)}(hjc h]hTBBR}(hhh!je ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!ja ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjo reftypeterm refexplicitrefwarnh?TBBRuh1hhAhBhCK8h!j] ubah"}(h$]h&]h+]TBBRah-]h/]uh1h hAhBhCK8h!hhhubh )}(h.. |TEE| replace:: :term:`TEE`h]h)}(h :term:`TEE`h]h)}(hj h]hTEE}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TEEuh1hhAhBhCK9h!j ubah"}(h$]h&]h+]TEEah-]h/]uh1h hAhBhCK9h!hhhubh )}(h .. |TF-A| replace:: :term:`TF-A`h]h)}(h :term:`TF-A`h]h)}(hj h]hTF-A}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TF-Auh1hhAhBhCK:h!j ubah"}(h$]h&]h+]TF-Aah-]h/]uh1h hAhBhCK:h!hhhubh )}(h .. |TF-M| replace:: :term:`TF-M`h]h)}(h :term:`TF-M`h]h)}(hj h]hTF-M}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TF-Muh1hhAhBhCK;h!j ubah"}(h$]h&]h+]TF-Mah-]h/]uh1h hAhBhCK;h!hhhubh )}(h.. |TLB| replace:: :term:`TLB`h]h)}(h :term:`TLB`h]h)}(hj h]hTLB}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TLBuh1hhAhBhCKh!j_ ubah"}(h$]h&]h+]TRNGah-]h/]uh1h hAhBhCK>h!hhhubh )}(h.. |TSP| replace:: :term:`TSP`h]h)}(h :term:`TSP`h]h)}(hj h]hTSP}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TSPuh1hhAhBhCK?h!j ubah"}(h$]h&]h+]TSPah-]h/]uh1h hAhBhCK?h!hhhubh )}(h.. |TZC| replace:: :term:`TZC`h]h)}(h :term:`TZC`h]h)}(hj h]hTZC}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TZCuh1hhAhBhCK@h!j ubah"}(h$]h&]h+]TZCah-]h/]uh1h hAhBhCK@h!hhhubh )}(h".. |UBSAN| replace:: :term:`UBSAN`h]h)}(h :term:`UBSAN`h]h)}(hj h]hUBSAN}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?UBSANuh1hhAhBhCKAh!j ubah"}(h$]h&]h+]UBSANah-]h/]uh1h hAhBhCKAh!hhhubh )}(h .. |UEFI| replace:: :term:`UEFI`h]h)}(h :term:`UEFI`h]h)}(hj h]hUEFI}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?UEFIuh1hhAhBhCKBh!j ubah"}(h$]h&]h+]UEFIah-]h/]uh1h hAhBhCKBh!hhhubh )}(h .. |WDOG| replace:: :term:`WDOG`h]h)}(h :term:`WDOG`h]h)}(hj< h]hWDOG}(hhh!j> ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j: ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjH reftypeterm refexplicitrefwarnh?WDOGuh1hhAhBhCKCh!j6 ubah"}(h$]h&]h+]WDOGah-]h/]uh1h hAhBhCKCh!hhhubh )}(h!.. |XLAT| replace:: :term:`XLAT` h]h)}(h :term:`XLAT`h]h)}(hjg h]hXLAT}(hhh!ji ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!je ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjs reftypeterm refexplicitrefwarnh?XLATuh1hhAhBhCKDh!ja ubah"}(h$]h&]h+]XLATah-]h/]uh1h hAhBhCKDh!hhhubh section)}(hhh](h title)}(hTF-A CMake buildsystemh]hTF-A CMake buildsystem}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]refidid1uh1j h!j hhhAa/home/test/workspace/code/optee_3.16/trusted-firmware-a/docs/design_documents/cmake_framework.rsthCKubh field_list)}(hhh](h field)}(hhh](h field_name)}(hAuthorh]hAuthor}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j hAj hCKubh field_body)}(hBalint Dobszayh]h paragraph)}(hj h]hBalint Dobszay}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hhh](j )}(h Organizationh]h Organization}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j hAj hCKubj )}(h Arm Limitedh]j )}(hj h]h Arm Limited}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hhh](j )}(hContacth]hContact}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j hAj hCKubj )}(h'Balint Dobszay h]j )}(hj h](hBalint Dobszay <}(hBalint Dobszay }(h>h!j" ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hhh](j )}(hStatush]hStatus}(hjX h!jV ubah"}(h$]h&]h+]h-]h/]uh1j h!jS hAj hCKubj )}(h Accepted h]j )}(hAcceptedh]hAccepted}(hjj h!jh ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jd ubah"}(h$]h&]h+]h-]h/]uh1j h!jS ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubeh"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCKubh topic)}(hhh](j )}(hTable of Contentsh]hTable of Contents}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j hAj hCK ubh bullet_list)}(hhh]h list_item)}(hhh](j )}(hhh]j+ )}(hhh]hTF-A CMake buildsystem}(hj h!j ubah"}(h$]j ah&]h+]h-]h/]refidtf-a-cmake-buildsystemuh1j* h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubj )}(hhh](j )}(hhh]j )}(hhh]j+ )}(hhh]hAbstract}(hAbstracth!j ubah"}(h$]id2ah&]h+]h-]h/]refidabstractuh1j* h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubj )}(hhh]j )}(hhh]j+ )}(hhh]h Introduction}(h Introductionh!j ubah"}(h$]id3ah&]h+]h-]h/]refid introductionuh1j* h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubj )}(hhh](j )}(hhh]j+ )}(hhh]h Main features}(h Main featuresh!j ubah"}(h$]id4ah&]h+]h-]h/]refid main-featuresuh1j* h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubj )}(hhh](j )}(hhh]j )}(hhh]j+ )}(hhh]h$Structured configuration description}(h$Structured configuration descriptionh!j, ubah"}(h$]id5ah&]h+]h-]h/]refid$structured-configuration-descriptionuh1j* h!j) ubah"}(h$]h&]h+]h-]h/]uh1j h!j& ubah"}(h$]h&]h+]h-]h/]uh1j h!j# ubj )}(hhh]j )}(hhh]j+ )}(hhh]hTarget description}(hTarget descriptionh!jO ubah"}(h$]id6ah&]h+]h-]h/]refidtarget-descriptionuh1j* h!jL ubah"}(h$]h&]h+]h-]h/]uh1j h!jI ubah"}(h$]h&]h+]h-]h/]uh1j h!j# ubj )}(hhh]j )}(hhh]j+ )}(hhh]hCompiler abstraction}(hCompiler abstractionh!jr ubah"}(h$]id7ah&]h+]h-]h/]refidcompiler-abstractionuh1j* h!jo ubah"}(h$]h&]h+]h-]h/]uh1j h!jl ubah"}(h$]h&]h+]h-]h/]uh1j h!j# ubj )}(hhh]j )}(hhh]j+ )}(hhh]hExternal tools}(hExternal toolsh!j ubah"}(h$]id8ah&]h+]h-]h/]refidexternal-toolsuh1j* h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j# ubeh"}(h$]h&]h+]h-]h/]uh1j h!j ubeh"}(h$]h&]h+]h-]h/]uh1j h!j ubj )}(hhh]j )}(hhh]j+ )}(hhh]hWorkflow}(hWorkflowh!j ubah"}(h$]id9ah&]h+]h-]h/]refidworkflowuh1j* h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubj )}(hhh]j )}(hhh]j+ )}(hhh]hExample}(hExampleh!j ubah"}(h$]id10ah&]h+]h-]h/]refidexampleuh1j* h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubeh"}(h$]h&]h+]h-]h/]uh1j h!j ubeh"}(h$]h&]h+]h-]h/]uh1j h!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhANhCNubeh"}(h$]table-of-contentsah&]contentsah+]table of contentsah-]h/]uh1j hAj hCK h!j hhubj )}(hhh](j )}(hj h]hAbstract}(hj h!j"hhhANhCNubah"}(h$]h&]h+]h-]h/]j j uh1j h!jhhhAj hCK ubj )}(hXThis document presents a proposal for a new buildsystem for TF-A using CMake, and as part of this a reusable CMake framework for embedded projects. For a summary about the proposal, please see the `Phabricator wiki page `_. As mentioned there, the proposal consists of two phases. The subject of this document is the first phase only.h](hThis document presents a proposal for a new buildsystem for TF-A using CMake, and as part of this a reusable CMake framework for embedded projects. For a summary about the proposal, please see the }(hThis document presents a proposal for a new buildsystem for TF-A using CMake, and as part of this a reusable CMake framework for embedded projects. For a summary about the proposal, please see the h!j/hhhANhCNubj+ )}(hc`Phabricator wiki page `_h]hPhabricator wiki page}(hPhabricator wiki pageh!j8ubah"}(h$]h&]h+]h-]h/]namePhabricator wiki pagerefuriHhttps://developer.trustedfirmware.org/w/tf_a/cmake-buildsystem-proposal/uh1j* h!j/ubh target)}(hK h]h"}(h$]phabricator-wiki-pageah&]h+]phabricator wiki pageah-]h/]refurijJuh1jK referencedKh!j/ubhp. As mentioned there, the proposal consists of two phases. The subject of this document is the first phase only.}(hp. As mentioned there, the proposal consists of two phases. The subject of this document is the first phase only.h!j/hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK h!jhhubeh"}(h$]j ah&]h+]abstractah-]h/]uh1j h!j hhhAj hCK ubj )}(hhh](j )}(hj h]h Introduction}(hj h!jphhhANhCNubah"}(h$]h&]h+]h-]h/]j j uh1j h!jmhhhAj hCKubj )}(hXThe current Makefile based buildsystem of TF-A has become complicated and hard to maintain, there is a need for a new, more flexible solution. The proposal is to use CMake language for the new buildsystem. The main reasons of this decision are the following:h]hXThe current Makefile based buildsystem of TF-A has become complicated and hard to maintain, there is a need for a new, more flexible solution. The proposal is to use CMake language for the new buildsystem. The main reasons of this decision are the following:}(hjh!j}hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jmhhubj )}(hhh](j )}(hOIt is a well-established, mature tool, widely accepted by open-source projects.h]j )}(hOIt is a well-established, mature tool, widely accepted by open-source projects.h]hOIt is a well-established, mature tool, widely accepted by open-source projects.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCNubj )}(hZTF-M is already using CMake, reducing fragmentation for tf.org projects can be beneficial.h]j )}(hZTF-M is already using CMake, reducing fragmentation for tf.org projects can be beneficial.h]hZTF-M is already using CMake, reducing fragmentation for tf.org projects can be beneficial.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCNubj )}(hXCCMake has various advantages over Make, e.g.: * Host and target system agnostic project. * CMake project is scalable, supports project modularization. * Supports software integration. * Out-of-the-box support for integration with several tools (e.g. project generation for various IDEs, integration with cppcheck, etc). h](j )}(h-CMake has various advantages over Make, e.g.:h]h-CMake has various advantages over Make, e.g.:}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubj )}(hhh](j )}(h(Host and target system agnostic project.h]j )}(hjh]h(Host and target system agnostic project.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK!h!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubj )}(h;CMake project is scalable, supports project modularization.h]j )}(hjh]h;CMake project is scalable, supports project modularization.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK"h!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubj )}(hSupports software integration.h]j )}(hjh]hSupports software integration.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK#h!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubj )}(hOut-of-the-box support for integration with several tools (e.g. project generation for various IDEs, integration with cppcheck, etc). h]j )}(hOut-of-the-box support for integration with several tools (e.g. project generation for various IDEs, integration with cppcheck, etc).h]hOut-of-the-box support for integration with several tools (e.g. project generation for various IDEs, integration with cppcheck, etc).}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK$h!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubeh"}(h$]h&]h+]h-]h/]bullet*uh1j hAj hCK!h!jubeh"}(h$]h&]h+]h-]h/]uh1j h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]j6j7uh1j hAj hCKh!jmhhubj )}(h"Of course there are drawbacks too:h]h"Of course there are drawbacks too:}(hjFh!jDhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK'h!jmhhubj )}(hhh](j )}(h.Language is problematic (e.g. variable scope).h]j )}(hjWh]h.Language is problematic (e.g. variable scope).}(hjWh!jYubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK)h!jUubah"}(h$]h&]h+]h-]h/]uh1j h!jRhhhAj hCNubj )}(hNot embedded approach. h]j )}(hNot embedded approach.h]hNot embedded approach.}(hjrh!jpubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK*h!jlubah"}(h$]h&]h+]h-]h/]uh1j h!jRhhhAj hCNubeh"}(h$]h&]h+]h-]h/]j6j7uh1j hAj hCK)h!jmhhubj )}(hXhTo overcome these and other problems, we need to create workarounds for some tasks, wrap CMake functions, etc. Since this functionality can be useful in other embedded projects too, it is beneficial to collect the new code into a reusable framework and store this in a separate repository. The following diagram provides an overview of the framework structure:h]hXhTo overcome these and other problems, we need to create workarounds for some tasks, wrap CMake functions, etc. Since this functionality can be useful in other embedded projects too, it is beneficial to collect the new code into a reusable framework and store this in a separate repository. The following diagram provides an overview of the framework structure:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK,h!jmhhubj )}(h|Framework structure|h]h image)}(hNimage:: ../resources/diagrams/cmake_framework_structure.png :width: 75 %h]h"}(h$]h&]h+]h-]h/]altFramework structurewidth75%uri0resources/diagrams/cmake_framework_structure.png candidates}j7jsuh1jhAj hCKh!jhhubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK2h!jmhhubeh"}(h$]j ah&]h+] introductionah-]h/]uh1j h!j hhhAj hCKubj )}(hhh](j )}(hj h]h Main features}(hj h!jhhhANhCNubah"}(h$]h&]h+]h-]h/]j j uh1j h!jhhhAj hCK5ubj )}(hhh](j )}(hj3 h]h$Structured configuration description}(hj3 h!jhhhANhCNubah"}(h$]h&]h+]h-]h/]j j6 uh1j h!jhhhAj hCK8ubj )}(hIn the current Makefile system the build configuration description, validation, processing, and the target creation, source file description are mixed and spread across several files. One of the goals of the framework is to organize this.h]hIn the current Makefile system the build configuration description, validation, processing, and the target creation, source file description are mixed and spread across several files. One of the goals of the framework is to organize this.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK9h!jhhubj )}(hThe framework provides a solution to describe the input build parameters, flags, macros, etc. in a structured way. It contains two utilities for this purpose:h]hThe framework provides a solution to describe the input build parameters, flags, macros, etc. in a structured way. It contains two utilities for this purpose:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK>h!jhhubj )}(hhh](j )}(h*Map: simple key-value pair implementation.h]j )}(hjh]h*Map: simple key-value pair implementation.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKAh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCNubj )}(h#Group: collection of related maps. h]j )}(h"Group: collection of related maps.h]h"Group: collection of related maps.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKBh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]j6j7uh1j hAj hCKAh!jhhubj )}(hXThe related parameters shall be packed into a group (or "setting group"). The setting groups shall be defined and filled with content in config files. Currently the config files are created and edited manually, but later a configuration management tool (e.g. Kconfig) shall be used to generate these files. Therefore, the framework does not contain parameter validation and conflict checking, these shall be handled by the configuration tool.h]hXThe related parameters shall be packed into a group (or “setting group”). The setting groups shall be defined and filled with content in config files. Currently the config files are created and edited manually, but later a configuration management tool (e.g. Kconfig) shall be used to generate these files. Therefore, the framework does not contain parameter validation and conflict checking, these shall be handled by the configuration tool.}(hj3h!j1hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKDh!jhhubeh"}(h$]j< ah&]h+]$structured configuration descriptionah-]h/]uh1j h!jhhhAj hCK8ubj )}(hhh](j )}(hjV h]hTarget description}(hjV h!jIhhhANhCNubah"}(h$]h&]h+]h-]h/]j jY uh1j h!jFhhhAj hCKLubj )}(hXOThe framework provides an API called STGT ('simple target') to describe the targets, i.e. what is the build output, what source files are used, what libraries are linked, etc. The API wraps the CMake target functions, and also extends the built-in functionality, it can use the setting groups described in the previous section. A group can be applied onto a target, i.e. a collection of macros, flags, etc. can be applied onto the given output executable/library. This provides a more granular way than the current Makefile system where most of these are global and applied onto each target.h]hXSThe framework provides an API called STGT (‘simple target’) to describe the targets, i.e. what is the build output, what source files are used, what libraries are linked, etc. The API wraps the CMake target functions, and also extends the built-in functionality, it can use the setting groups described in the previous section. A group can be applied onto a target, i.e. a collection of macros, flags, etc. can be applied onto the given output executable/library. This provides a more granular way than the current Makefile system where most of these are global and applied onto each target.}(hjXh!jVhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKMh!jFhhubeh"}(h$]j_ ah&]h+]target descriptionah-]h/]uh1j h!jhhhAj hCKLubj )}(hhh](j )}(hjy h]hCompiler abstraction}(hjy h!jnhhhANhCNubah"}(h$]h&]h+]h-]h/]j j| uh1j h!jkhhhAj hCKWubj )}(hXApart from the built-in CMake usage of the compiler, there are some common tasks that CMake does not solve (e.g. preprocessing a file). For these tasks the framework uses wrapper functions instead of direct calls to the compiler. This way it is not tied to one specific compiler.h]hXApart from the built-in CMake usage of the compiler, there are some common tasks that CMake does not solve (e.g. preprocessing a file). For these tasks the framework uses wrapper functions instead of direct calls to the compiler. This way it is not tied to one specific compiler.}(hj}h!j{hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKXh!jkhhubeh"}(h$]j ah&]h+]compiler abstractionah-]h/]uh1j h!jhhhAj hCKWubj )}(hhh](j )}(hj h]hExternal tools}(hj h!jhhhANhCNubah"}(h$]h&]h+]h-]h/]j j uh1j h!jhhhAj hCK^ubj )}(hXIn the TF-A buildsystem some external tools are used, e.g. fiptool for image generation or dtc for device tree compilation. These tools have to be found and/or built by the framework. For this, the CMake find_package functionality is used, any other necessary tools can be added later.h]hXIn the TF-A buildsystem some external tools are used, e.g. fiptool for image generation or dtc for device tree compilation. These tools have to be found and/or built by the framework. For this, the CMake find_package functionality is used, any other necessary tools can be added later.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK_h!jhhubeh"}(h$]j ah&]h+]external toolsah-]h/]uh1j h!jhhhAj hCK^ubeh"}(h$]j ah&]h+] main featuresah-]h/]uh1j h!j hhhAj hCK5ubj )}(hhh](j )}(hj h]hWorkflow}(hj h!jhhhANhCNubah"}(h$]h&]h+]h-]h/]j j uh1j h!jhhhAj hCKeubj )}(hPThe following diagram demonstrates the development workflow using the framework:h]hPThe following diagram demonstrates the development workflow using the framework:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKfh!jhhubj )}(h|Framework workflow|h]j)}(h=image:: ../resources/diagrams/cmake_framework_workflow.pngh]h"}(h$]h&]h+]h-]h/]altFramework workflowuri/resources/diagrams/cmake_framework_workflow.pngj}j7jsuh1jhAj hCKh!jhhubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKhh!jhhubj )}(h.The process can be split into two main phases:h]h.The process can be split into two main phases:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKjh!jhhubj )}(hIn the provisioning phase, first we have to obtain the necessary resources, i.e. clone the code repository and other dependencies. Next we have to do the configuration, preferably using a config tool like KConfig.h]hIn the provisioning phase, first we have to obtain the necessary resources, i.e. clone the code repository and other dependencies. Next we have to do the configuration, preferably using a config tool like KConfig.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKlh!jhhubj )}(hXIIn the development phase first we run CMake, which will generate the buildsystem using the selected generator backend (currently only the Makefile generator is supported). After this we run the selected build tool which in turn calls the compiler, linker, packaging tool, etc. Finally we can run and debug the output executables.h]hXIIn the development phase first we run CMake, which will generate the buildsystem using the selected generator backend (currently only the Makefile generator is supported). After this we run the selected build tool which in turn calls the compiler, linker, packaging tool, etc. Finally we can run and debug the output executables.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKph!jhhubj )}(hUsually during development only the steps in this second phase have to be repeated, while the provisioning phase needs to be done only once (or rarely).h]hUsually during development only the steps in this second phase have to be repeated, while the provisioning phase needs to be done only once (or rarely).}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKvh!jhhubeh"}(h$]j ah&]h+]workflowah-]h/]uh1j h!j hhhAj hCKeubj )}(hhh](j )}(hj h]hExample}(hj h!j5hhhANhCNubah"}(h$]h&]h+]h-]h/]j j uh1j h!j2hhhAj hCKzubj )}(h6This is a short example for the basic framework usage.h]h6This is a short example for the basic framework usage.}(hjDh!jBhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK{h!j2hhubj )}(hFirst, we create a setting group called *mem_conf* and fill it with several parameters. It is worth noting the difference between *CONFIG* and *DEFINE* types: the former is only a CMake domain option, the latter is only a C language macro.h](h(First, we create a setting group called }(h(First, we create a setting group called h!jPhhhANhCNubh emphasis)}(h *mem_conf*h]hmem_conf}(hhh!j[ubah"}(h$]h&]h+]h-]h/]uh1jYh!jPubhP and fill it with several parameters. It is worth noting the difference between }(hP and fill it with several parameters. It is worth noting the difference between h!jPhhhANhCNubjZ)}(h*CONFIG*h]hCONFIG}(hhh!jnubah"}(h$]h&]h+]h-]h/]uh1jYh!jPubh and }(h and h!jPhhhANhCNubjZ)}(h*DEFINE*h]hDEFINE}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jYh!jPubhX types: the former is only a CMake domain option, the latter is only a C language macro.}(hX types: the former is only a CMake domain option, the latter is only a C language macro.h!jPhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK}h!j2hhubj )}(hXNext, we create a target called *fw1* and add the *mem_conf* setting group to it. This means that all source and header files used by the target will have all the parameters declared in the setting group. Then we set the target type to executable, and add some source files. Since the target has the parameters from the settings group, we can use it for conditionally adding source files. E.g. *dram_controller.c* will only be added if MEM_TYPE equals dram.h](h Next, we create a target called }(h Next, we create a target called h!jhhhANhCNubjZ)}(h*fw1*h]hfw1}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jYh!jubh and add the }(h and add the h!jhhhANhCNubjZ)}(h *mem_conf*h]hmem_conf}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jYh!jubhXN setting group to it. This means that all source and header files used by the target will have all the parameters declared in the setting group. Then we set the target type to executable, and add some source files. Since the target has the parameters from the settings group, we can use it for conditionally adding source files. E.g. }(hXN setting group to it. This means that all source and header files used by the target will have all the parameters declared in the setting group. Then we set the target type to executable, and add some source files. Since the target has the parameters from the settings group, we can use it for conditionally adding source files. E.g. h!jhhhANhCNubjZ)}(h*dram_controller.c*h]hdram_controller.c}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jYh!jubh, will only be added if MEM_TYPE equals dram.}(h, will only be added if MEM_TYPE equals dram.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j2hhubh literal_block)}(hXgroup_new(NAME mem_conf) group_add(NAME mem_conf TYPE DEFINE KEY MEM_SIZE VAL 1024) group_add(NAME mem_conf TYPE CONFIG DEFINE KEY MEM_TYPE VAL dram) group_add(NAME mem_conf TYPE CFLAG KEY -Os) stgt_create(NAME fw1) stgt_add_setting(NAME fw1 GROUPS mem_conf) stgt_set_target(NAME fw1 TYPE exe) stgt_add_src(NAME fw1 SRC ${CMAKE_SOURCE_DIR}/main.c ) stgt_add_src_cond(NAME fw1 KEY MEM_TYPE VAL dram SRC ${CMAKE_SOURCE_DIR}/dram_controller.c )h]hXgroup_new(NAME mem_conf) group_add(NAME mem_conf TYPE DEFINE KEY MEM_SIZE VAL 1024) group_add(NAME mem_conf TYPE CONFIG DEFINE KEY MEM_TYPE VAL dram) group_add(NAME mem_conf TYPE CFLAG KEY -Os) stgt_create(NAME fw1) stgt_add_setting(NAME fw1 GROUPS mem_conf) stgt_set_target(NAME fw1 TYPE exe) stgt_add_src(NAME fw1 SRC ${CMAKE_SOURCE_DIR}/main.c ) stgt_add_src_cond(NAME fw1 KEY MEM_TYPE VAL dram SRC ${CMAKE_SOURCE_DIR}/dram_controller.c )}(hhh!jubah"}(h$]h&]h+]h-]h/] xml:spacepreserveforcelanguagecmakehighlight_args}uh1jhAj hCKh!j2hhubh )}(hh.. |Framework structure| image:: ../resources/diagrams/cmake_framework_structure.png :width: 75 % h]j)}(hjh]h"}(h$]h&]h+]h-]h/]altjwidthjuri0resources/diagrams/cmake_framework_structure.pngj}j7j suh1jh!jhAj hCKubah"}(h$]h&]h+]jah-]h/]uh1h hAj hCKh!j2hhubh )}(hV.. |Framework workflow| image:: ../resources/diagrams/cmake_framework_workflow.png h]j)}(hjh]h"}(h$]h&]h+]h-]h/]altjuri/resources/diagrams/cmake_framework_workflow.pngj}j7j suh1jh!jhAj hCKubah"}(h$]h&]h+]jah-]h/]uh1h hAj hCKh!j2hhubh transition)}(h--------------h]h"}(h$]h&]h+]h-]h/]uh1j(hAj hCKh!j2hhubj )}(hM*Copyright (c) 2019-2020, Arm Limited and Contributors. All rights reserved.*h]jZ)}(hj6h]hKCopyright (c) 2019-2020, Arm Limited and Contributors. All rights reserved.}(hhh!j8ubah"}(h$]h&]h+]h-]h/]uh1jYh!j4ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j2hhubeh"}(h$]j ah&]h+]exampleah-]h/]uh1j h!j hhhAj hCKzubeh"}(h$]j ah&]h+]tf-a cmake buildsystemah-]h/]uh1j h!hhhhAj hCKubeh"}(h$]h&]h+]h-]h/]sourcej uh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj|error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcej _destinationN _config_files]pep_referencesN pep_base_url https://www.python.org/dev/peps/pep_file_url_templatepep-%04drfc_referencesN rfc_base_urlhttps://tools.ietf.org/html/ tab_widthKtrim_footnote_reference_spacefile_insertion_enabled raw_enabledKsyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xformembed_stylesheetcloak_email_addressesenvNubreporterNindirect_targets]substitution_defs}(hHh hshKhhvhhhhjhjJj"jujMjjxjjjjj!jjLj$jwjOjjzjjjjj#jjNj&jyjQjj|jjjjj%jjPj(j{jSjj~jjjjj'jjRj*j}jUjjjjjjj)jjTj,jjWjjjjjjj+jjVj.jjYjjjjjjj-jjXj0jj[jjjjj jj/ j jZ j2 j j] j j j j j j j1 j j\ j4 j j_ j j j j j j j3 j j^ j6 j ja Framework structurejFramework workflowjusubstitution_names}(aarch32hHaarch64hsamuhamushɌapihbtijcotjucssjcvejdtbjds-5j!dsujLdtjweljehfjfconfjfdtj#ff-ajNfipjyfvpjfwujgicjisaj%linarojPmmuj{mpamjmpmmjmpidrjmtej'oenjRop-teej}otejpddjpauthjpmfj)pscijTrasjrotjscmijscpjsdeij+sdsjVseajsipjsmcjsmcccj-socjXspjspdjspmjssbsj svej/ tbbjZ tbbrj teej tf-aj tf-mj tlbj1 tlkj\ trngj tspj tzcj ubsanj uefij3 wdogj^ xlatj framework structurejframework workflowjurefnames}refids}nameids}(jVj jjjjj jVjSjj jj jCj< jhj_ jj jj j/j jOj u nametypes}(jVNjNjjNjVjNjNjCNjhNjNjNj/NjONuh$}(j j jj j jjSjMj jmj jj< jj_ jFj jkj jj jj j2j j j j j j j j j6 j, jY jO j| jr j j j j j j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jK sRparse_messages]transform_messages] transformerN decorationNhhub.