12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572 |
- function(zephyr_sources)
- foreach(arg ${ARGV})
- if(IS_DIRECTORY ${arg})
- message(FATAL_ERROR "zephyr_sources() was called on a directory")
- endif()
- target_sources(zephyr PRIVATE ${arg})
- endforeach()
- endfunction()
- function(zephyr_include_directories)
- foreach(arg ${ARGV})
- if(IS_ABSOLUTE ${arg})
- set(path ${arg})
- else()
- set(path ${CMAKE_CURRENT_SOURCE_DIR}/${arg})
- endif()
- target_include_directories(zephyr_interface INTERFACE ${path})
- endforeach()
- endfunction()
- function(zephyr_system_include_directories)
- foreach(arg ${ARGV})
- if(IS_ABSOLUTE ${arg})
- set(path ${arg})
- else()
- set(path ${CMAKE_CURRENT_SOURCE_DIR}/${arg})
- endif()
- target_include_directories(zephyr_interface SYSTEM INTERFACE ${path})
- endforeach()
- endfunction()
- function(zephyr_compile_definitions)
- target_compile_definitions(zephyr_interface INTERFACE ${ARGV})
- endfunction()
- function(zephyr_compile_options)
- target_compile_options(zephyr_interface INTERFACE ${ARGV})
- endfunction()
- function(zephyr_link_libraries)
- target_link_libraries(zephyr_interface INTERFACE ${ARGV})
- endfunction()
- function(zephyr_cc_option)
- foreach(arg ${ARGV})
- target_cc_option(zephyr_interface INTERFACE ${arg})
- endforeach()
- endfunction()
- function(zephyr_cc_option_fallback option1 option2)
- target_cc_option_fallback(zephyr_interface INTERFACE ${option1} ${option2})
- endfunction()
- function(zephyr_ld_options)
- target_ld_options(zephyr_interface INTERFACE ${ARGV})
- endfunction()
- function(zephyr_get_include_directories_for_lang_as_string lang i)
- zephyr_get_include_directories_for_lang(${lang} list_of_flags DELIMITER " " ${ARGN})
- convert_list_of_flags_to_string_of_flags(list_of_flags str_of_flags)
- set(${i} ${str_of_flags} PARENT_SCOPE)
- endfunction()
- function(zephyr_get_system_include_directories_for_lang_as_string lang i)
- zephyr_get_system_include_directories_for_lang(${lang} list_of_flags DELIMITER " " ${ARGN})
- convert_list_of_flags_to_string_of_flags(list_of_flags str_of_flags)
- set(${i} ${str_of_flags} PARENT_SCOPE)
- endfunction()
- function(zephyr_get_compile_definitions_for_lang_as_string lang i)
- zephyr_get_compile_definitions_for_lang(${lang} list_of_flags DELIMITER " " ${ARGN})
- convert_list_of_flags_to_string_of_flags(list_of_flags str_of_flags)
- set(${i} ${str_of_flags} PARENT_SCOPE)
- endfunction()
- function(zephyr_get_compile_options_for_lang_as_string lang i)
- zephyr_get_compile_options_for_lang(${lang} list_of_flags DELIMITER " ")
- convert_list_of_flags_to_string_of_flags(list_of_flags str_of_flags)
- set(${i} ${str_of_flags} PARENT_SCOPE)
- endfunction()
- function(zephyr_get_include_directories_for_lang lang i)
- zephyr_get_parse_args(args ${ARGN})
- get_property(flags TARGET zephyr_interface PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
- process_flags(${lang} flags output_list)
- string(REPLACE ";" "$<SEMICOLON>" genexp_output_list "${output_list}")
- if(NOT ARGN)
- set(result_output_list "-I$<JOIN:${genexp_output_list},$<SEMICOLON>-I>")
- elseif(args_STRIP_PREFIX)
-
- set(result_output_list ${output_list})
- elseif(args_DELIMITER)
- set(result_output_list "-I$<JOIN:${genexp_output_list},${args_DELIMITER}-I>")
- endif()
- set(${i} ${result_output_list} PARENT_SCOPE)
- endfunction()
- function(zephyr_get_system_include_directories_for_lang lang i)
- zephyr_get_parse_args(args ${ARGN})
- get_property(flags TARGET zephyr_interface PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES)
- process_flags(${lang} flags output_list)
- string(REPLACE ";" "$<SEMICOLON>" genexp_output_list "${output_list}")
- set_ifndef(args_DELIMITER "$<SEMICOLON>")
- set(result_output_list "$<$<BOOL:${genexp_output_list}>:-isystem$<JOIN:${genexp_output_list},${args_DELIMITER}-isystem>>")
- set(${i} ${result_output_list} PARENT_SCOPE)
- endfunction()
- function(zephyr_get_compile_definitions_for_lang lang i)
- zephyr_get_parse_args(args ${ARGN})
- get_property(flags TARGET zephyr_interface PROPERTY INTERFACE_COMPILE_DEFINITIONS)
- process_flags(${lang} flags output_list)
- string(REPLACE ";" "$<SEMICOLON>" genexp_output_list "${output_list}")
- set_ifndef(args_DELIMITER "$<SEMICOLON>")
- set(result_output_list "-D$<JOIN:${genexp_output_list},${args_DELIMITER}-D>")
- set(${i} ${result_output_list} PARENT_SCOPE)
- endfunction()
- function(zephyr_get_compile_options_for_lang lang i)
- zephyr_get_parse_args(args ${ARGN})
- get_property(flags TARGET zephyr_interface PROPERTY INTERFACE_COMPILE_OPTIONS)
- process_flags(${lang} flags output_list)
- string(REPLACE ";" "$<SEMICOLON>" genexp_output_list "${output_list}")
- set_ifndef(args_DELIMITER "$<SEMICOLON>")
- set(result_output_list "$<JOIN:${genexp_output_list},${args_DELIMITER}>")
- set(${i} ${result_output_list} PARENT_SCOPE)
- endfunction()
- function(zephyr_get_parse_args return_dict)
- foreach(x ${ARGN})
- if(DEFINED single_argument)
- set(${single_argument} ${x} PARENT_SCOPE)
- unset(single_argument)
- else()
- if(x STREQUAL STRIP_PREFIX)
- set(${return_dict}_STRIP_PREFIX 1 PARENT_SCOPE)
- elseif(x STREQUAL NO_SPLIT)
- set(${return_dict}_NO_SPLIT 1 PARENT_SCOPE)
- elseif(x STREQUAL DELIMITER)
- set(single_argument ${return_dict}_DELIMITER)
- endif()
- endif()
- endforeach()
- endfunction()
- function(process_flags lang input output)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- set(languages C CXX ASM)
- set(tmp_list "")
- foreach(flag ${${input}})
- set(is_compile_lang_generator_expression 0)
- foreach(l ${languages})
- if(flag MATCHES "<COMPILE_LANGUAGE:${l}>:([^>]+)>")
- set(updated_flag ${CMAKE_MATCH_1})
- set(is_compile_lang_generator_expression 1)
- if(${l} STREQUAL ${lang})
-
-
-
- string(REGEX MATCH "(\\\$<)[^\\\$]*(\\\$<)[^\\\$]*(\\\$<)" IGNORE_RESULT ${flag})
- if(CMAKE_MATCH_2)
-
- string(REGEX REPLACE "\\\$<COMPILE_LANGUAGE:${l}>" "1" updated_flag ${flag})
- endif()
- list(APPEND tmp_list ${updated_flag})
- break()
- endif()
- endif()
- endforeach()
- if(NOT is_compile_lang_generator_expression)
-
-
- if(flag MATCHES "SHELL:[ ]*(.*)")
- separate_arguments(flag UNIX_COMMAND ${CMAKE_MATCH_1})
- endif()
-
-
- if(NOT flag MATCHES "\\\$<.*>")
- string(REPLACE "," "$<COMMA>" flag "${flag}")
- endif()
- list(APPEND tmp_list ${flag})
- endif()
- endforeach()
- set(${output} ${tmp_list} PARENT_SCOPE)
- endfunction()
- function(convert_list_of_flags_to_string_of_flags ptr_list_of_flags string_of_flags)
-
-
-
- string(REPLACE ";" " " locally_scoped_string_of_flags "${${ptr_list_of_flags}}")
-
- set(${string_of_flags} ${locally_scoped_string_of_flags} PARENT_SCOPE)
- endfunction()
- macro(get_property_and_add_prefix result target property prefix)
- zephyr_get_parse_args(args ${ARGN})
- if(args_STRIP_PREFIX)
- set(maybe_prefix "")
- else()
- set(maybe_prefix ${prefix})
- endif()
- get_property(target_property TARGET ${target} PROPERTY ${property})
- foreach(x ${target_property})
- list(APPEND ${result} ${maybe_prefix}${x})
- endforeach()
- endmacro()
- macro(zephyr_library)
- zephyr_library_get_current_dir_lib_name(${ZEPHYR_BASE} lib_name)
- zephyr_library_named(${lib_name})
- endmacro()
- macro(zephyr_library_get_current_dir_lib_name base lib_name)
-
- file(RELATIVE_PATH name ${base} ${CMAKE_CURRENT_LIST_FILE})
-
- get_filename_component(name ${name} DIRECTORY)
-
- string(REGEX REPLACE "/" "__" name ${name})
- set(${lib_name} ${name})
- endmacro()
- macro(zephyr_library_named name)
-
-
- set(ZEPHYR_CURRENT_LIBRARY ${name})
- add_library(${name} STATIC "")
- zephyr_append_cmake_library(${name})
- target_link_libraries(${name} PUBLIC zephyr_interface)
- endmacro()
- macro(zephyr_library_amend)
-
-
-
- if(NOT ZEPHYR_CURRENT_MODULE_DIR)
- message(FATAL_ERROR "Function only available for Zephyr modules.")
- endif()
- zephyr_library_get_current_dir_lib_name(${ZEPHYR_CURRENT_MODULE_DIR} lib_name)
- set(ZEPHYR_CURRENT_LIBRARY ${lib_name})
- endmacro()
- function(zephyr_link_interface interface)
- target_link_libraries(${interface} INTERFACE zephyr_interface)
- endfunction()
- function(zephyr_library_sources source)
- target_sources(${ZEPHYR_CURRENT_LIBRARY} PRIVATE ${source} ${ARGN})
- endfunction()
- function(zephyr_library_include_directories)
- target_include_directories(${ZEPHYR_CURRENT_LIBRARY} PRIVATE ${ARGN})
- endfunction()
- function(zephyr_library_link_libraries item)
- target_link_libraries(${ZEPHYR_CURRENT_LIBRARY} PUBLIC ${item} ${ARGN})
- endfunction()
- function(zephyr_library_compile_definitions item)
- target_compile_definitions(${ZEPHYR_CURRENT_LIBRARY} PRIVATE ${item} ${ARGN})
- endfunction()
- function(zephyr_library_compile_options item)
-
-
-
-
-
-
-
-
-
-
- string(MD5 uniqueness ${item})
- set(lib_name options_interface_lib_${uniqueness})
- if (TARGET ${lib_name})
-
- return()
- endif()
- add_library( ${lib_name} INTERFACE)
- target_compile_options(${lib_name} INTERFACE ${item} ${ARGN})
- target_link_libraries(${ZEPHYR_CURRENT_LIBRARY} PRIVATE ${lib_name})
- endfunction()
- function(zephyr_library_cc_option)
- foreach(option ${ARGV})
- string(MAKE_C_IDENTIFIER check${option} check)
- zephyr_check_compiler_flag(C ${option} ${check})
- if(${check})
- zephyr_library_compile_options(${option})
- endif()
- endforeach()
- endfunction()
- function(zephyr_append_cmake_library library)
- if(TARGET zephyr_prebuilt)
- message(WARNING
- "zephyr_library() or zephyr_library_named() called in Zephyr CMake "
- "application mode. `${library}` will not be treated as a Zephyr library."
- "To create a Zephyr library in Zephyr CMake kernel mode consider "
- "creating a Zephyr module. See more here: "
- "https://docs.zephyrproject.org/latest/guides/modules.html"
- )
- endif()
- set_property(GLOBAL APPEND PROPERTY ZEPHYR_LIBS ${library})
- endfunction()
- function(zephyr_library_import library_name library_path)
- add_library(${library_name} STATIC IMPORTED GLOBAL)
- set_target_properties(${library_name}
- PROPERTIES IMPORTED_LOCATION
- ${library_path}
- )
- zephyr_append_cmake_library(${library_name})
- endfunction()
- function(zephyr_library_app_memory partition)
- set_property(TARGET zephyr_property_target
- APPEND PROPERTY COMPILE_OPTIONS
- "-l" $<TARGET_FILE_NAME:${ZEPHYR_CURRENT_LIBRARY}> "${partition}")
- endfunction()
- function(zephyr_library_property)
- set(single_args "ALLOW_EMPTY")
- cmake_parse_arguments(LIB_PROP "" "${single_args}" "" ${ARGN})
- if(LIB_PROP_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "zephyr_library_property(${ARGV0} ...) given unknown arguments: ${FILE_UNPARSED_ARGUMENTS}")
- endif()
- foreach(arg ${single_args})
- if(DEFINED LIB_PROP_${arg})
- set_property(TARGET ${ZEPHYR_CURRENT_LIBRARY} PROPERTY ${arg} ${LIB_PROP_${arg}})
- endif()
- endforeach()
- endfunction()
- macro(zephyr_interface_library_named name)
- add_library(${name} INTERFACE)
- set_property(GLOBAL APPEND PROPERTY ZEPHYR_INTERFACE_LIBS ${name})
- endmacro()
- function(generate_inc_file
- source_file
- generated_file
- )
- add_custom_command(
- OUTPUT ${generated_file}
- COMMAND
- ${PYTHON_EXECUTABLE}
- ${ZEPHYR_BASE}/scripts/file2hex.py
- ${ARGN}
- --file ${source_file}
- > ${generated_file}
- DEPENDS ${source_file}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- )
- endfunction()
- function(generate_inc_file_for_gen_target
- target
- source_file
- generated_file
- gen_target
-
- )
- generate_inc_file(${source_file} ${generated_file} ${ARGN})
-
-
- add_dependencies(${target} ${gen_target})
- endfunction()
- function(generate_inc_file_for_target
- target
- source_file
- generated_file
-
- )
-
-
-
-
- generate_unique_target_name_from_filename(${generated_file} generated_target_name)
- add_custom_target(${generated_target_name} DEPENDS ${generated_file})
- generate_inc_file_for_gen_target(${target} ${source_file} ${generated_file} ${generated_target_name} ${ARGN})
- endfunction()
- function(_board_check_runner_type type)
- if (NOT (("${type}" STREQUAL "FLASH") OR ("${type}" STREQUAL "DEBUG")))
- message(FATAL_ERROR "invalid type ${type}; should be FLASH or DEBUG")
- endif()
- endfunction()
- function(board_set_runner type runner)
- _board_check_runner_type(${type})
- if (DEFINED BOARD_${type}_RUNNER)
- message(STATUS "overriding ${type} runner ${BOARD_${type}_RUNNER}; it's now ${runner}")
- endif()
- set(BOARD_${type}_RUNNER ${runner} PARENT_SCOPE)
- endfunction()
- macro(board_set_runner_ifnset type runner)
- _board_check_runner_type(${type})
-
-
-
- set_ifndef(BOARD_${type}_RUNNER ${runner})
- endmacro()
- macro(board_set_flasher runner)
- board_set_runner(FLASH ${runner})
- endmacro()
- macro(board_set_debugger runner)
- board_set_runner(DEBUG ${runner})
- endmacro()
- macro(board_set_flasher_ifnset runner)
- board_set_runner_ifnset(FLASH ${runner})
- endmacro()
- macro(board_set_debugger_ifnset runner)
- board_set_runner_ifnset(DEBUG ${runner})
- endmacro()
- function(board_runner_args runner)
- string(MAKE_C_IDENTIFIER ${runner} runner_id)
-
- set_property(GLOBAL APPEND PROPERTY BOARD_RUNNER_ARGS_EXPLICIT_${runner_id} ${ARGN})
- endfunction()
- function(board_finalize_runner_args runner)
-
-
- if(COMMAND app_set_runner_args)
- app_set_runner_args()
- endif()
-
- string(MAKE_C_IDENTIFIER ${runner} runner_id)
- get_property(explicit GLOBAL PROPERTY "BOARD_RUNNER_ARGS_EXPLICIT_${runner_id}")
-
- set_property(GLOBAL APPEND PROPERTY BOARD_RUNNER_ARGS_${runner_id}
-
- ${ARGN}
-
-
- ${explicit}
-
-
- ${BOARD_RUNNER_ARGS_${runner_id}}
- )
-
- set_property(GLOBAL APPEND PROPERTY ZEPHYR_RUNNERS ${runner})
- endfunction()
- function(board_check_revision)
- set(options EXACT)
- set(single_args FORMAT DEFAULT_REVISION HIGHEST_REVISION)
- set(multi_args VALID_REVISIONS)
- cmake_parse_arguments(BOARD_REV "${options}" "${single_args}" "${multi_args}" ${ARGN})
- string(TOUPPER ${BOARD_REV_FORMAT} BOARD_REV_FORMAT)
- if(NOT DEFINED BOARD_REVISION)
- if(DEFINED BOARD_REV_DEFAULT_REVISION)
- set(BOARD_REVISION ${BOARD_REV_DEFAULT_REVISION})
- set(BOARD_REVISION ${BOARD_REVISION} PARENT_SCOPE)
- else()
- message(FATAL_ERROR "No board revision specified, Board: `${BOARD}` \
- requires a revision. Please use: `-DBOARD=${BOARD}@<revision>`")
- endif()
- endif()
- if(DEFINED BOARD_REV_HIGHEST_REVISION)
- if(((BOARD_REV_FORMAT STREQUAL LETTER) AND
- (BOARD_REVISION STRGREATER BOARD_REV_HIGHEST_REVISION)) OR
- ((BOARD_REV_FORMAT MATCHES "^MAJOR\.MINOR\.PATCH$") AND
- (BOARD_REVISION VERSION_GREATER BOARD_REV_HIGHEST_REVISION))
- )
- message(FATAL_ERROR "Board revision `${BOARD_REVISION}` greater than \
- highest supported revision `${BOARD_REV_HIGHEST_REVISION}`. \
- Please specify a valid board revision.")
- endif()
- endif()
- if(BOARD_REV_FORMAT STREQUAL LETTER)
- set(revision_regex "([A-Z])")
- elseif(BOARD_REV_FORMAT MATCHES "^MAJOR\.MINOR\.PATCH$")
- set(revision_regex "((0|[1-9][0-9]*)(\.[0-9]+)(\.[0-9]+))")
-
-
- if(BOARD_REVISION MATCHES "((0|[1-9][0-9]*)(\.[0-9]+)?(\.[0-9]+)?)")
- if(NOT CMAKE_MATCH_3)
- set(BOARD_REVISION ${BOARD_REVISION}.0)
- set(BOARD_REVISION ${BOARD_REVISION} PARENT_SCOPE)
- endif()
- if(NOT CMAKE_MATCH_4)
- set(BOARD_REVISION ${BOARD_REVISION}.0)
- set(BOARD_REVISION ${BOARD_REVISION} PARENT_SCOPE)
- endif()
- endif()
- else()
- message(FATAL_ERROR "Invalid format specified for \
- `board_check_revision(FORMAT <LETTER | MAJOR.MINOR.PATCH>)`")
- endif()
- if(NOT (BOARD_REVISION MATCHES "^${revision_regex}$"))
- message(FATAL_ERROR "Invalid revision format used for `${BOARD_REVISION}`. \
- Board `${BOARD}` uses revision format: ${BOARD_REV_FORMAT}.")
- endif()
- if(NOT DEFINED BOARD_REV_VALID_REVISIONS)
- file(GLOB revision_candidates LIST_DIRECTORIES false RELATIVE ${BOARD_DIR}
- ${BOARD_DIR}/${BOARD}_*.conf
- )
- string(REPLACE "." "_" underscore_revision_regex ${revision_regex})
- set(file_revision_regex "${BOARD}_${underscore_revision_regex}.conf")
- foreach(candidate ${revision_candidates})
- if(${candidate} MATCHES "${file_revision_regex}")
- string(REPLACE "_" "." FOUND_BOARD_REVISION ${CMAKE_MATCH_1})
- list(APPEND BOARD_REV_VALID_REVISIONS ${FOUND_BOARD_REVISION})
- endif()
- endforeach()
- endif()
- if(${BOARD_REVISION} IN_LIST BOARD_REV_VALID_REVISIONS)
-
- return()
- endif()
- if(NOT BOARD_REV_EXACT)
- foreach(TEST_REVISION ${BOARD_REV_VALID_REVISIONS})
- if((BOARD_REV_FORMAT MATCHES "^MAJOR\.MINOR\.PATCH$") AND
- (${BOARD_REVISION} VERSION_GREATER_EQUAL ${TEST_REVISION}) AND
- (${TEST_REVISION} VERSION_GREATER_EQUAL "${ACTIVE_BOARD_REVISION}")
- )
- set(ACTIVE_BOARD_REVISION ${TEST_REVISION})
- elseif((BOARD_REV_FORMAT STREQUAL LETTER) AND
- (${BOARD_REVISION} STRGREATER ${TEST_REVISION}) AND
- (${TEST_REVISION} STRGREATER "${ACTIVE_BOARD_REVISION}")
- )
- set(ACTIVE_BOARD_REVISION ${TEST_REVISION})
- endif()
- endforeach()
- endif()
- if(BOARD_REV_EXACT OR NOT DEFINED ACTIVE_BOARD_REVISION)
- message(FATAL_ERROR "Board revision `${BOARD_REVISION}` for board \
- `${BOARD}` not found. Please specify a valid board revision.")
- endif()
- set(ACTIVE_BOARD_REVISION ${ACTIVE_BOARD_REVISION} PARENT_SCOPE)
- endfunction()
- function(zephyr_check_compiler_flag lang option check)
-
-
- zephyr_check_compiler_flag_hardcoded(${lang} "${option}" check exists)
- if(exists)
- set(check ${check} PARENT_SCOPE)
- return()
- endif()
-
- set_ifndef(
- ZEPHYR_TOOLCHAIN_CAPABILITY_CACHE_DIR
- ${USER_CACHE_DIR}/ToolchainCapabilityDatabase
- )
-
-
-
-
-
-
-
-
-
-
-
- set(cacheformat 3)
- set(key_string "")
- set(key_string "${key_string}${cacheformat}_")
- set(key_string "${key_string}${TOOLCHAIN_SIGNATURE}_")
- set(key_string "${key_string}${lang}_")
- set(key_string "${key_string}${option}_")
- set(key_string "${key_string}${CMAKE_REQUIRED_FLAGS}_")
- string(MD5 key ${key_string})
-
- set(key_path ${ZEPHYR_TOOLCHAIN_CAPABILITY_CACHE_DIR}/${key})
- if(EXISTS ${key_path})
- file(READ
- ${key_path}
- key_value
- LIMIT 1
- )
- set(${check} ${key_value} PARENT_SCOPE)
- return()
- endif()
-
-
-
-
- if("${option}" MATCHES "-Wno-(.*)")
- set(possibly_translated_option -W${CMAKE_MATCH_1})
- else()
- set(possibly_translated_option ${option})
- endif()
- check_compiler_flag(${lang} "${possibly_translated_option}" inner_check)
- set(${check} ${inner_check} PARENT_SCOPE)
-
- if(NOT (EXISTS ${key_path}))
-
-
-
-
-
-
-
-
-
-
-
-
- string(RANDOM LENGTH 8 tempsuffix)
- file(
- WRITE
- "${key_path}_tmp_${tempsuffix}"
- ${inner_check}
- )
- file(
- RENAME
- "${key_path}_tmp_${tempsuffix}" "${key_path}"
- )
-
-
-
- file(
- APPEND
- ${ZEPHYR_TOOLCHAIN_CAPABILITY_CACHE_DIR}/log.txt
- "${inner_check} ${key} ${key_string}\n"
- )
- endif()
- endfunction()
- function(zephyr_check_compiler_flag_hardcoded lang option check exists)
-
-
-
- if((${lang} STREQUAL CXX) AND ("${option}" IN_LIST CXX_EXCLUDED_OPTIONS))
- set(check 0 PARENT_SCOPE)
- set(exists 1 PARENT_SCOPE)
- else()
-
- set(exists 0 PARENT_SCOPE)
- endif()
- endfunction(zephyr_check_compiler_flag_hardcoded)
- function(zephyr_linker_sources location)
-
-
- set(snippet_base "${__build_dir}/include/generated")
- set(sections_path "${snippet_base}/snippets-sections.ld")
- set(ram_sections_path "${snippet_base}/snippets-ram-sections.ld")
- set(data_sections_path "${snippet_base}/snippets-data-sections.ld")
- set(rom_start_path "${snippet_base}/snippets-rom-start.ld")
- set(noinit_path "${snippet_base}/snippets-noinit.ld")
- set(rwdata_path "${snippet_base}/snippets-rwdata.ld")
- set(rodata_path "${snippet_base}/snippets-rodata.ld")
-
- get_property(cleared GLOBAL PROPERTY snippet_files_cleared)
- if (NOT DEFINED cleared)
- file(WRITE ${sections_path} "")
- file(WRITE ${ram_sections_path} "")
- file(WRITE ${data_sections_path} "")
- file(WRITE ${rom_start_path} "")
- file(WRITE ${noinit_path} "")
- file(WRITE ${rwdata_path} "")
- file(WRITE ${rodata_path} "")
- set_property(GLOBAL PROPERTY snippet_files_cleared true)
- endif()
-
- if ("${location}" STREQUAL "SECTIONS")
- set(snippet_path "${sections_path}")
- elseif("${location}" STREQUAL "RAM_SECTIONS")
- set(snippet_path "${ram_sections_path}")
- elseif("${location}" STREQUAL "DATA_SECTIONS")
- set(snippet_path "${data_sections_path}")
- elseif("${location}" STREQUAL "ROM_START")
- set(snippet_path "${rom_start_path}")
- elseif("${location}" STREQUAL "NOINIT")
- set(snippet_path "${noinit_path}")
- elseif("${location}" STREQUAL "RWDATA")
- set(snippet_path "${rwdata_path}")
- elseif("${location}" STREQUAL "RODATA")
- set(snippet_path "${rodata_path}")
- else()
- message(fatal_error "Must choose valid location for linker snippet.")
- endif()
- cmake_parse_arguments(L "" "SORT_KEY" "" ${ARGN})
- set(SORT_KEY default)
- if(DEFINED L_SORT_KEY)
- set(SORT_KEY ${L_SORT_KEY})
- endif()
- foreach(file IN ITEMS ${L_UNPARSED_ARGUMENTS})
-
- if(IS_ABSOLUTE ${file})
- set(path ${file})
- else()
- set(path ${CMAKE_CURRENT_SOURCE_DIR}/${file})
- endif()
- if(IS_DIRECTORY ${path})
- message(FATAL_ERROR "zephyr_linker_sources() was called on a directory")
- endif()
-
- file(RELATIVE_PATH relpath ${ZEPHYR_BASE}/include ${path})
-
- set (include_str "/* Sort key: \"${SORT_KEY}\" */#include \"${relpath}\"")
-
- file(STRINGS ${snippet_path} lines)
- list(APPEND lines ${include_str})
- list(SORT lines)
- string(REPLACE ";" "\n;" lines "${lines}")
- file(WRITE ${snippet_path} ${lines} "\n")
- endforeach()
- endfunction(zephyr_linker_sources)
- function(zephyr_code_relocate file location)
- if(NOT IS_ABSOLUTE ${file})
- set(file ${CMAKE_CURRENT_SOURCE_DIR}/${file})
- endif()
- set_property(TARGET code_data_relocation_target
- APPEND PROPERTY COMPILE_DEFINITIONS
- "${location}:${file}")
- endfunction()
- function(check_dtc_flag flag ok)
- execute_process(
- COMMAND
- ${DTC} ${flag} -v
- ERROR_QUIET
- OUTPUT_QUIET
- RESULT_VARIABLE dtc_check_ret
- )
- if (dtc_check_ret EQUAL 0)
- set(${ok} 1 PARENT_SCOPE)
- else()
- set(${ok} 0 PARENT_SCOPE)
- endif()
- endfunction()
- function(pow2round n)
- math(EXPR x "${${n}} & (${${n}} - 1)")
- if(${x} EQUAL 0)
- return()
- endif()
- math(EXPR ${n} "${${n}} | (${${n}} >> 1)")
- math(EXPR ${n} "${${n}} | (${${n}} >> 2)")
- math(EXPR ${n} "${${n}} | (${${n}} >> 4)")
- math(EXPR ${n} "${${n}} | (${${n}} >> 8)")
- math(EXPR ${n} "${${n}} | (${${n}} >> 16)")
- math(EXPR ${n} "${${n}} | (${${n}} >> 32)")
- math(EXPR ${n} "${${n}} + 1")
- set(${n} ${${n}} PARENT_SCOPE)
- endfunction()
- function(import_kconfig prefix kconfig_fragment)
-
- file(
- STRINGS
- ${kconfig_fragment}
- DOT_CONFIG_LIST
- REGEX "^${prefix}"
- ENCODING "UTF-8"
- )
- foreach (CONFIG ${DOT_CONFIG_LIST})
-
-
- string(REGEX MATCH "[^=]+" CONF_VARIABLE_NAME ${CONFIG})
-
- string(REGEX MATCH "=(.+$)" CONF_VARIABLE_VALUE ${CONFIG})
-
-
- set(CONF_VARIABLE_VALUE ${CMAKE_MATCH_1})
- if("${CONF_VARIABLE_VALUE}" MATCHES "^\"(.*)\"$")
- set(CONF_VARIABLE_VALUE ${CMAKE_MATCH_1})
- endif()
- set("${CONF_VARIABLE_NAME}" "${CONF_VARIABLE_VALUE}" PARENT_SCOPE)
- list(APPEND keys "${CONF_VARIABLE_NAME}")
- endforeach()
- foreach(outvar ${ARGN})
- set(${outvar} "${keys}" PARENT_SCOPE)
- endforeach()
- endfunction()
- function(add_subdirectory_ifdef feature_toggle source_dir)
- if(${${feature_toggle}})
- add_subdirectory(${source_dir} ${ARGN})
- endif()
- endfunction()
- function(target_sources_ifdef feature_toggle target scope item)
- if(${${feature_toggle}})
- target_sources(${target} ${scope} ${item} ${ARGN})
- endif()
- endfunction()
- function(target_compile_definitions_ifdef feature_toggle target scope item)
- if(${${feature_toggle}})
- target_compile_definitions(${target} ${scope} ${item} ${ARGN})
- endif()
- endfunction()
- function(target_include_directories_ifdef feature_toggle target scope item)
- if(${${feature_toggle}})
- target_include_directories(${target} ${scope} ${item} ${ARGN})
- endif()
- endfunction()
- function(target_link_libraries_ifdef feature_toggle target item)
- if(${${feature_toggle}})
- target_link_libraries(${target} ${item} ${ARGN})
- endif()
- endfunction()
- function(add_compile_option_ifdef feature_toggle option)
- if(${${feature_toggle}})
- add_compile_options(${option})
- endif()
- endfunction()
- function(target_compile_option_ifdef feature_toggle target scope option)
- if(${feature_toggle})
- target_compile_options(${target} ${scope} ${option})
- endif()
- endfunction()
- function(target_cc_option_ifdef feature_toggle target scope option)
- if(${feature_toggle})
- target_cc_option(${target} ${scope} ${option})
- endif()
- endfunction()
- function(zephyr_library_sources_ifdef feature_toggle source)
- if(${${feature_toggle}})
- zephyr_library_sources(${source} ${ARGN})
- endif()
- endfunction()
- function(zephyr_sources_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_sources(${ARGN})
- endif()
- endfunction()
- function(zephyr_cc_option_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_cc_option(${ARGN})
- endif()
- endfunction()
- function(zephyr_ld_option_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_ld_options(${ARGN})
- endif()
- endfunction()
- function(zephyr_link_libraries_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_link_libraries(${ARGN})
- endif()
- endfunction()
- function(zephyr_compile_options_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_compile_options(${ARGN})
- endif()
- endfunction()
- function(zephyr_compile_definitions_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_compile_definitions(${ARGN})
- endif()
- endfunction()
- function(zephyr_include_directories_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_include_directories(${ARGN})
- endif()
- endfunction()
- function(zephyr_library_compile_definitions_ifdef feature_toggle item)
- if(${${feature_toggle}})
- zephyr_library_compile_definitions(${item} ${ARGN})
- endif()
- endfunction()
- function(zephyr_library_include_directories_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_library_include_directories(${ARGN})
- endif()
- endfunction()
- function(zephyr_library_compile_options_ifdef feature_toggle item)
- if(${${feature_toggle}})
- zephyr_library_compile_options(${item} ${ARGN})
- endif()
- endfunction()
- function(zephyr_link_interface_ifdef feature_toggle interface)
- if(${${feature_toggle}})
- target_link_libraries(${interface} INTERFACE zephyr_interface)
- endif()
- endfunction()
- function(zephyr_library_link_libraries_ifdef feature_toggle item)
- if(${${feature_toggle}})
- zephyr_library_link_libraries(${item})
- endif()
- endfunction()
- function(zephyr_linker_sources_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_linker_sources(${ARGN})
- endif()
- endfunction()
- macro(list_append_ifdef feature_toggle list)
- if(${${feature_toggle}})
- list(APPEND ${list} ${ARGN})
- endif()
- endmacro()
- function(set_ifndef variable value)
- if(NOT ${variable})
- set(${variable} ${value} ${ARGN} PARENT_SCOPE)
- endif()
- endfunction()
- function(add_subdirectory_ifndef feature_toggle source_dir)
- if(NOT ${feature_toggle})
- add_subdirectory(${source_dir} ${ARGN})
- endif()
- endfunction()
- function(target_sources_ifndef feature_toggle target scope item)
- if(NOT ${feature_toggle})
- target_sources(${target} ${scope} ${item} ${ARGN})
- endif()
- endfunction()
- function(target_compile_definitions_ifndef feature_toggle target scope item)
- if(NOT ${feature_toggle})
- target_compile_definitions(${target} ${scope} ${item} ${ARGN})
- endif()
- endfunction()
- function(target_include_directories_ifndef feature_toggle target scope item)
- if(NOT ${feature_toggle})
- target_include_directories(${target} ${scope} ${item} ${ARGN})
- endif()
- endfunction()
- function(target_link_libraries_ifndef feature_toggle target item)
- if(NOT ${feature_toggle})
- target_link_libraries(${target} ${item} ${ARGN})
- endif()
- endfunction()
- function(add_compile_option_ifndef feature_toggle option)
- if(NOT ${feature_toggle})
- add_compile_options(${option})
- endif()
- endfunction()
- function(target_compile_option_ifndef feature_toggle target scope option)
- if(NOT ${feature_toggle})
- target_compile_options(${target} ${scope} ${option})
- endif()
- endfunction()
- function(target_cc_option_ifndef feature_toggle target scope option)
- if(NOT ${feature_toggle})
- target_cc_option(${target} ${scope} ${option})
- endif()
- endfunction()
- function(zephyr_library_sources_ifndef feature_toggle source)
- if(NOT ${feature_toggle})
- zephyr_library_sources(${source} ${ARGN})
- endif()
- endfunction()
- function(zephyr_sources_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_sources(${ARGN})
- endif()
- endfunction()
- function(zephyr_cc_option_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_cc_option(${ARGN})
- endif()
- endfunction()
- function(zephyr_ld_option_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_ld_options(${ARGN})
- endif()
- endfunction()
- function(zephyr_link_libraries_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_link_libraries(${ARGN})
- endif()
- endfunction()
- function(zephyr_compile_options_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_compile_options(${ARGN})
- endif()
- endfunction()
- function(zephyr_compile_definitions_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_compile_definitions(${ARGN})
- endif()
- endfunction()
- function(zephyr_include_directories_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_include_directories(${ARGN})
- endif()
- endfunction()
- function(zephyr_library_compile_definitions_ifndef feature_toggle item)
- if(NOT ${feature_toggle})
- zephyr_library_compile_definitions(${item} ${ARGN})
- endif()
- endfunction()
- function(zephyr_library_include_directories_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_library_include_directories(${ARGN})
- endif()
- endfunction()
- function(zephyr_library_compile_options_ifndef feature_toggle item)
- if(NOT ${feature_toggle})
- zephyr_library_compile_options(${item} ${ARGN})
- endif()
- endfunction()
- function(zephyr_link_interface_ifndef feature_toggle interface)
- if(NOT ${feature_toggle})
- target_link_libraries(${interface} INTERFACE zephyr_interface)
- endif()
- endfunction()
- function(zephyr_library_link_libraries_ifndef feature_toggle item)
- if(NOT ${feature_toggle})
- zephyr_library_link_libraries(${item})
- endif()
- endfunction()
- function(zephyr_linker_sources_ifndef feature_toggle)
- if(NOT ${feature_toggle})
- zephyr_linker_sources(${ARGN})
- endif()
- endfunction()
- macro(list_append_ifndef feature_toggle list)
- if(NOT ${feature_toggle})
- list(APPEND ${list} ${ARGN})
- endif()
- endmacro()
- function(check_compiler_flag lang option ok)
- if(NOT DEFINED CMAKE_REQUIRED_QUIET)
- set(CMAKE_REQUIRED_QUIET 1)
- endif()
- string(MAKE_C_IDENTIFIER
- check${option}_${lang}_${CMAKE_REQUIRED_FLAGS}
- ${ok}
- )
- if(${lang} STREQUAL C)
- check_c_compiler_flag("${option}" ${${ok}})
- else()
- check_cxx_compiler_flag("${option}" ${${ok}})
- endif()
- if(${${${ok}}})
- set(ret 1)
- else()
- set(ret 0)
- endif()
- set(${ok} ${ret} PARENT_SCOPE)
- endfunction()
- function(target_cc_option target scope option)
- target_cc_option_fallback(${target} ${scope} ${option} "")
- endfunction()
- function(target_cc_option_fallback target scope option1 option2)
- if(CONFIG_CPLUSPLUS)
- foreach(lang C CXX)
-
-
- zephyr_check_compiler_flag(${lang} ${option1} check)
- if(${check})
- target_compile_options(${target} ${scope}
- $<$<COMPILE_LANGUAGE:${lang}>:${option1}>
- $<$<COMPILE_LANGUAGE:ASM>:${option1}>
- )
- elseif(option2)
- target_compile_options(${target} ${scope}
- $<$<COMPILE_LANGUAGE:${lang}>:${option2}>
- $<$<COMPILE_LANGUAGE:ASM>:${option2}>
- )
- endif()
- endforeach()
- else()
- zephyr_check_compiler_flag(C ${option1} check)
- if(${check})
- target_compile_options(${target} ${scope} ${option1})
- elseif(option2)
- target_compile_options(${target} ${scope} ${option2})
- endif()
- endif()
- endfunction()
- function(target_ld_options target scope)
- zephyr_get_parse_args(args ${ARGN})
- list(REMOVE_ITEM ARGN NO_SPLIT)
- foreach(option ${ARGN})
- if(args_NO_SPLIT)
- set(option ${ARGN})
- endif()
- string(JOIN "" check_identifier "check" ${option})
- string(MAKE_C_IDENTIFIER ${check_identifier} check)
- set(SAVED_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
- string(JOIN " " CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} ${option})
- zephyr_check_compiler_flag(C "" ${check})
- set(CMAKE_REQUIRED_FLAGS ${SAVED_CMAKE_REQUIRED_FLAGS})
- target_link_libraries_ifdef(${check} ${target} ${scope} ${option})
- if(args_NO_SPLIT)
- break()
- endif()
- endforeach()
- endfunction()
- function(toolchain_parse_make_rule input_file include_files)
- file(STRINGS ${input_file} input)
-
-
-
-
-
-
-
- string(REPLACE "\;" ";" input_as_list ${input})
-
- list(POP_FRONT input_as_list first_input_line)
- string(FIND ${first_input_line} ": " index)
- math(EXPR j "${index} + 2")
- string(SUBSTRING ${first_input_line} ${j} -1 first_include_file)
-
- string(STRIP "${first_include_file}" first_include_file)
- file(TO_CMAKE_PATH "${first_include_file}" first_include_file)
- set(result "${first_include_file}")
-
- foreach(file ${input_as_list})
- string(STRIP "${file}" file)
- file(TO_CMAKE_PATH "${file}" file)
- list(APPEND result "${file}")
- endforeach()
- set(${include_files} ${result} PARENT_SCOPE)
- endfunction()
- function(check_set_linker_property)
- set(options APPEND)
- set(single_args TARGET)
- set(multi_args PROPERTY)
- cmake_parse_arguments(LINKER_PROPERTY "${options}" "${single_args}" "${multi_args}" ${ARGN})
- if(LINKER_PROPERTY_APPEND)
- set(APPEND "APPEND")
- endif()
- list(GET LINKER_PROPERTY_PROPERTY 0 property)
- list(REMOVE_AT LINKER_PROPERTY_PROPERTY 0)
- set(option ${LINKER_PROPERTY_PROPERTY})
- string(MAKE_C_IDENTIFIER check${option} check)
- set(SAVED_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
- set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${option}")
- zephyr_check_compiler_flag(C "" ${check})
- set(CMAKE_REQUIRED_FLAGS ${SAVED_CMAKE_REQUIRED_FLAGS})
- if(${check})
- set_property(TARGET ${LINKER_PROPERTY_TARGET} ${APPEND} PROPERTY ${property} ${option})
- endif()
- endfunction()
- function(set_compiler_property)
- set(options APPEND)
- set(multi_args PROPERTY)
- cmake_parse_arguments(COMPILER_PROPERTY "${options}" "${single_args}" "${multi_args}" ${ARGN})
- if(COMPILER_PROPERTY_APPEND)
- set(APPEND "APPEND")
- set(APPEND-CPP "APPEND")
- endif()
- set_property(TARGET compiler ${APPEND} PROPERTY ${COMPILER_PROPERTY_PROPERTY})
- set_property(TARGET compiler-cpp ${APPEND} PROPERTY ${COMPILER_PROPERTY_PROPERTY})
- endfunction()
- function(check_set_compiler_property)
- set(options APPEND)
- set(multi_args PROPERTY)
- cmake_parse_arguments(COMPILER_PROPERTY "${options}" "${single_args}" "${multi_args}" ${ARGN})
- if(COMPILER_PROPERTY_APPEND)
- set(APPEND "APPEND")
- set(APPEND-CPP "APPEND")
- endif()
- list(GET COMPILER_PROPERTY_PROPERTY 0 property)
- list(REMOVE_AT COMPILER_PROPERTY_PROPERTY 0)
- foreach(option ${COMPILER_PROPERTY_PROPERTY})
- if(CONFIG_CPLUSPLUS)
- zephyr_check_compiler_flag(CXX ${option} check)
- if(${check})
- set_property(TARGET compiler-cpp ${APPEND-CPP} PROPERTY ${property} ${option})
- set(APPEND-CPP "APPEND")
- endif()
- endif()
- zephyr_check_compiler_flag(C ${option} check)
- if(${check})
- set_property(TARGET compiler ${APPEND} PROPERTY ${property} ${option})
- set(APPEND "APPEND")
- endif()
- endforeach()
- endfunction()
- function(print arg)
- message(STATUS "${arg}: ${${arg}}")
- endfunction()
- macro(assert test comment)
- if(NOT ${test})
- message(FATAL_ERROR "Assertion failed: ${comment}")
- endif()
- endmacro()
- macro(assert_not test comment)
- if(${test})
- message(FATAL_ERROR "Assertion failed: ${comment}")
- endif()
- endmacro()
- macro(assert_exists var)
- if(NOT EXISTS ${${var}})
- message(FATAL_ERROR "No such file or directory: ${var}: '${${var}}'")
- endif()
- endmacro()
- function(check_if_directory_is_writeable dir ok)
- execute_process(
- COMMAND
- ${PYTHON_EXECUTABLE}
- ${ZEPHYR_BASE}/scripts/dir_is_writeable.py
- ${dir}
- RESULT_VARIABLE ret
- )
- if("${ret}" STREQUAL "0")
-
- set(${ok} 1 PARENT_SCOPE)
- else()
- set(${ok} 0 PARENT_SCOPE)
- endif()
- endfunction()
- function(find_appropriate_cache_directory dir)
- set(env_suffix_LOCALAPPDATA .cache)
- if(CMAKE_HOST_APPLE)
-
- set(env_suffix_HOME Library/Caches)
- else()
- set(env_suffix_HOME .cache)
- endif()
-
- if(CMAKE_HOST_APPLE)
- set(dirs HOME)
- elseif(CMAKE_HOST_WIN32)
- set(dirs LOCALAPPDATA)
- else()
-
-
-
-
- set(dirs
- XDG_CACHE_HOME
- HOME
- )
- endif()
- foreach(env_var ${dirs})
- if(DEFINED ENV{${env_var}})
- set(env_dir $ENV{${env_var}})
- set(test_user_dir ${env_dir}/${env_suffix_${env_var}})
- check_if_directory_is_writeable(${test_user_dir} ok)
- if(${ok})
-
- set(user_dir ${test_user_dir})
- break()
- else()
-
-
- endif()
- endif()
- endforeach()
-
-
-
- if(DEFINED user_dir)
-
-
- set(local_dir ${user_dir}/zephyr)
- else()
- set(local_dir ${ZEPHYR_BASE}/.cache)
- endif()
- set(${dir} ${local_dir} PARENT_SCOPE)
- endfunction()
- function(generate_unique_target_name_from_filename filename target_name)
- get_filename_component(basename ${filename} NAME)
- string(REPLACE "." "_" x ${basename})
- string(REPLACE "@" "_" x ${x})
- string(MD5 unique_chars ${filename})
- set(${target_name} gen_${x}_${unique_chars} PARENT_SCOPE)
- endfunction()
- function(zephyr_file)
- set(file_options APPLICATION_ROOT CONF_FILES)
- if((ARGC EQUAL 0) OR (NOT (ARGV0 IN_LIST file_options)))
- message(FATAL_ERROR "No <mode> given to `zephyr_file(<mode> <args>...)` function,\n \
- Please provide one of following: APPLICATION_ROOT, CONF_FILES")
- endif()
- if(${ARGV0} STREQUAL APPLICATION_ROOT)
- set(single_args APPLICATION_ROOT)
- elseif(${ARGV0} STREQUAL CONF_FILES)
- set(single_args CONF_FILES BOARD BOARD_REVISION DTS KCONF BUILD)
- endif()
- cmake_parse_arguments(FILE "" "${single_args}" "" ${ARGN})
- if(FILE_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "zephyr_file(${ARGV0} <path> ...) given unknown arguments: ${FILE_UNPARSED_ARGUMENTS}")
- endif()
- if(FILE_APPLICATION_ROOT)
-
-
-
- set(CACHED_PATH $CACHE{${FILE_APPLICATION_ROOT}})
- foreach(path ${CACHED_PATH})
-
-
-
- if(NOT IS_ABSOLUTE ${path})
- set(abs_path ${APPLICATION_SOURCE_DIR}/${path})
- list(FIND ${FILE_APPLICATION_ROOT} ${path} index)
- if(NOT ${index} LESS 0)
- list(REMOVE_AT ${FILE_APPLICATION_ROOT} ${index})
- list(INSERT ${FILE_APPLICATION_ROOT} ${index} ${abs_path})
- endif()
- endif()
- endforeach()
-
-
- foreach(path ${${FILE_APPLICATION_ROOT}})
- if(NOT IS_ABSOLUTE ${path})
- message(FATAL_ERROR
- "Relative path encountered in scoped variable: ${FILE_APPLICATION_ROOT}, value=${path}\n \
- Please adjust any `set(${FILE_APPLICATION_ROOT} ${path})` or `list(APPEND ${FILE_APPLICATION_ROOT} ${path})`\n \
- to absolute path using `\${CMAKE_CURRENT_SOURCE_DIR}/${path}` or similar. \n \
- Relative paths are only allowed with `-D${ARGV1}=<path>`")
- endif()
- endforeach()
-
- set(${FILE_APPLICATION_ROOT} ${${FILE_APPLICATION_ROOT}} PARENT_SCOPE)
- endif()
- if(FILE_CONF_FILES)
- if(DEFINED FILE_BOARD_REVISION AND NOT FILE_BOARD)
- message(FATAL_ERROR
- "zephyr_file(${ARGV0} <path> BOARD_REVISION ${FILE_BOARD_REVISION} ...)"
- " given without BOARD argument, please specify BOARD"
- )
- endif()
- if(NOT DEFINED FILE_BOARD)
-
- set(FILE_BOARD ${BOARD})
- if(DEFINED BOARD_REVISION)
- set(FILE_BOARD_REVISION ${BOARD_REVISION})
- endif()
- endif()
- set(FILENAMES ${FILE_BOARD})
- if(DEFINED FILE_BOARD_REVISION)
- string(REPLACE "." "_" revision_string ${FILE_BOARD_REVISION})
- list(APPEND FILENAMES "${FILE_BOARD}_${revision_string}")
- endif()
- if(FILE_DTS)
- foreach(filename ${FILENAMES})
- if(EXISTS ${FILE_CONF_FILES}/${filename}.overlay)
- list(APPEND ${FILE_DTS} ${FILE_CONF_FILES}/${filename}.overlay)
- endif()
- endforeach()
-
- set(${FILE_DTS} ${${FILE_DTS}} PARENT_SCOPE)
- endif()
- if(FILE_KCONF)
- foreach(filename ${FILENAMES})
- if(FILE_BUILD)
- set(filename "${filename}_${FILE_BUILD}")
- endif()
- if(EXISTS ${FILE_CONF_FILES}/${filename}.conf)
- list(APPEND ${FILE_KCONF} ${FILE_CONF_FILES}/${filename}.conf)
- endif()
- endforeach()
-
- set(${FILE_KCONF} ${${FILE_KCONF}} PARENT_SCOPE)
- endif()
- endif()
- endfunction()
- function(zephyr_string)
- set(options SANITIZE TOUPPER)
- cmake_parse_arguments(ZEPHYR_STRING "${options}" "" "" ${ARGN})
- if (NOT ZEPHYR_STRING_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "Function zephyr_string() called without a return variable")
- endif()
- list(GET ZEPHYR_STRING_UNPARSED_ARGUMENTS 0 return_arg)
- list(REMOVE_AT ZEPHYR_STRING_UNPARSED_ARGUMENTS 0)
- list(JOIN ZEPHYR_STRING_UNPARSED_ARGUMENTS "" work_string)
- if(ZEPHYR_STRING_SANITIZE)
- string(REGEX REPLACE "[^a-zA-Z0-9_]" "_" work_string ${work_string})
- endif()
- if(ZEPHYR_STRING_TOUPPER)
- string(TOUPPER ${work_string} work_string)
- endif()
- set(${return_arg} ${work_string} PARENT_SCOPE)
- endfunction()
- function(zephyr_check_cache variable)
- cmake_parse_arguments(CACHE_VAR "REQUIRED;WATCH" "" "" ${ARGN})
- string(TOLOWER ${variable} variable_text)
- string(REPLACE "_" " " variable_text ${variable_text})
- get_property(cached_value CACHE ${variable} PROPERTY VALUE)
-
-
-
-
-
-
-
- set(cli_argument ${cached_value})
- if(cli_argument STREQUAL CACHED_${variable})
-
- unset(cli_argument)
- endif()
- set(app_cmake_lists ${${variable}})
- if(cached_value STREQUAL ${variable})
-
-
- unset(app_cmake_lists)
- endif()
- if(DEFINED CACHED_${variable})
-
-
- if(cli_argument)
- if(NOT ((CACHED_${variable} STREQUAL cli_argument) OR (${variable}_DEPRECATED STREQUAL cli_argument)))
- message(WARNING "The build directory must be cleaned pristinely when "
- "changing ${variable_text},\n"
- "Current value=\"${CACHED_${variable}}\", "
- "Ignored value=\"${cli_argument}\"")
- endif()
- endif()
- if(CACHED_${variable})
- set(${variable} ${CACHED_${variable}} PARENT_SCOPE)
-
- set(${variable} ${CACHED_${variable}} CACHE STRING "Selected ${variable_text}" FORCE)
- else()
- unset(${variable} PARENT_SCOPE)
- unset(${variable} CACHE)
- endif()
- elseif(cli_argument)
- set(${variable} ${cli_argument})
- elseif(DEFINED ENV{${variable}})
- set(${variable} $ENV{${variable}})
- elseif(app_cmake_lists)
- set(${variable} ${app_cmake_lists})
- elseif(${CACHE_VAR_REQUIRED})
- message(FATAL_ERROR "${variable} is not being defined on the CMake command-line in the environment or by the app.")
- endif()
-
- set(${variable} ${${variable}} PARENT_SCOPE)
- set(CACHED_${variable} ${${variable}} CACHE STRING "Selected ${variable_text}")
- if(CACHE_VAR_WATCH)
-
- zephyr_boilerplate_watch(${variable})
- endif()
- endfunction(zephyr_check_cache variable)
- function(zephyr_boilerplate_watch variable)
- variable_watch(${variable} zephyr_variable_set_too_late)
- endfunction()
- function(zephyr_variable_set_too_late variable access value current_list_file)
- if (access STREQUAL "MODIFIED_ACCESS")
- message(WARNING
- "
- **********************************************************************
- *
- * WARNING
- *
- * CMake variable ${variable} set to \"${value}\" in:
- * ${current_list_file}
- *
- * This is too late to make changes! The change was ignored.
- *
- * Hint: ${variable} must be set before calling find_package(Zephyr ...).
- *
- **********************************************************************
- ")
- endif()
- endfunction()
- function(zephyr_get_targets directory types targets)
- get_property(sub_directories DIRECTORY ${directory} PROPERTY SUBDIRECTORIES)
- get_property(dir_targets DIRECTORY ${directory} PROPERTY BUILDSYSTEM_TARGETS)
- foreach(dir_target ${dir_targets})
- get_property(target_type TARGET ${dir_target} PROPERTY TYPE)
- if(${target_type} IN_LIST types)
- list(APPEND ${targets} ${dir_target})
- endif()
- endforeach()
- foreach(directory ${sub_directories})
- zephyr_get_targets(${directory} "${types}" ${targets})
- endforeach()
- set(${targets} ${${targets}} PARENT_SCOPE)
- endfunction()
- function(target_byproducts)
- cmake_parse_arguments(TB "" "TARGET" "BYPRODUCTS" ${ARGN})
- if(NOT DEFINED TB_TARGET)
- message(FATAL_ERROR "target_byproducts() missing parameter: TARGET <target>")
- endif()
- add_custom_command(TARGET ${TB_TARGET}
- POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo ""
- BYPRODUCTS ${TB_BYPRODUCTS}
- COMMENT "Logical command for additional byproducts on target: ${TB_TARGET}"
- )
- endfunction()
- function(dt_nodelabel var)
- set(req_single_args "NODELABEL")
- cmake_parse_arguments(DT_LABEL "" "${req_single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_nodelabel(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_LABEL_${arg})
- message(FATAL_ERROR "dt_nodelabel(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- get_target_property(${var} devicetree_target "DT_NODELABEL|${DT_LABEL_NODELABEL}")
- if(${${var}} STREQUAL ${var}-NOTFOUND)
- set(${var})
- endif()
- set(${var} ${${var}} PARENT_SCOPE)
- endfunction()
- function(dt_node_exists var)
- set(req_single_args "PATH")
- cmake_parse_arguments(DT_NODE "" "${req_single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_node_existsl(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_NODE_${arg})
- message(FATAL_ERROR "dt_node_exists(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- get_target_property(${var} devicetree_target "DT_NODE|${DT_NODE_PATH}")
- if(${var})
- set(${var} ${${var}} PARENT_SCOPE)
- else()
- set(${var} FALSE PARENT_SCOPE)
- endif()
- endfunction()
- function(dt_node_has_status var)
- set(req_single_args "PATH;STATUS")
- cmake_parse_arguments(DT_NODE "" "${req_single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_node_has_status(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_NODE_${arg})
- message(FATAL_ERROR "dt_node_has_status(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- dt_node_exists(${var} PATH ${DT_NODE_PATH})
- if(NOT ${${var}})
- set(${var} FALSE PARENT_SCOPE)
- endif()
- dt_prop(${var} PATH ${DT_NODE_PATH} PROPERTY status)
- if(NOT DEFINED ${var} OR "${${var}}" STREQUAL ok)
- set(${var} okay)
- endif()
- if(${var} STREQUAL ${DT_NODE_STATUS})
- set(${var} TRUE PARENT_SCOPE)
- else()
- set(${var} FALSE PARENT_SCOPE)
- endif()
- endfunction()
- function(dt_prop var)
- set(req_single_args "PATH;PROPERTY")
- set(single_args "INDEX")
- cmake_parse_arguments(DT_PROP "" "${req_single_args};${single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_prop(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_PROP_${arg})
- message(FATAL_ERROR "dt_prop(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- get_property(exists TARGET devicetree_target
- PROPERTY "DT_PROP|${DT_PROP_PATH}|${DT_PROP_PROPERTY}"
- SET
- )
- if(NOT exists)
- set(${var} PARENT_SCOPE)
- return()
- endif()
- get_target_property(val devicetree_target
- "DT_PROP|${DT_PROP_PATH}|${DT_PROP_PROPERTY}"
- )
- if(DEFINED DT_PROP_INDEX)
- list(GET val ${DT_PROP_INDEX} element)
- set(${var} "${element}" PARENT_SCOPE)
- else()
- set(${var} "${val}" PARENT_SCOPE)
- endif()
- endfunction()
- function(dt_num_regs var)
- set(req_single_args "PATH")
- cmake_parse_arguments(DT_REG "" "${req_single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_num_regs(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_REG_${arg})
- message(FATAL_ERROR "dt_num_regs(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- get_target_property(${var} devicetree_target "DT_REG|${DT_REG_PATH}|NUM")
- set(${var} ${${var}} PARENT_SCOPE)
- endfunction()
- function(dt_reg_addr var)
- set(req_single_args "PATH")
- set(single_args "INDEX")
- cmake_parse_arguments(DT_REG "" "${req_single_args};${single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_reg_addr(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_REG_${arg})
- message(FATAL_ERROR "dt_reg_addr(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- if(NOT DEFINED DT_REG_INDEX)
- set(DT_REG_INDEX 0)
- endif()
- get_target_property(${var}_list devicetree_target "DT_REG|${DT_REG_PATH}|ADDR")
- list(GET ${var}_list ${DT_REG_INDEX} ${var})
- if("${var}" STREQUAL NONE)
- set(${var})
- endif()
- set(${var} ${${var}} PARENT_SCOPE)
- endfunction()
- function(dt_reg_size var)
- set(req_single_args "PATH")
- set(single_args "INDEX")
- cmake_parse_arguments(DT_REG "" "${req_single_args};${single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_reg_size(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_REG_${arg})
- message(FATAL_ERROR "dt_reg_size(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- if(NOT DEFINED DT_REG_INDEX)
- set(DT_REG_INDEX 0)
- endif()
- get_target_property(${var}_list devicetree_target "DT_REG|${DT_REG_PATH}|SIZE")
- list(GET ${var}_list ${DT_REG_INDEX} ${var})
- if("${var}" STREQUAL NONE)
- set(${var})
- endif()
- set(${var} ${${var}} PARENT_SCOPE)
- endfunction()
- function(dt_has_chosen var)
- set(req_single_args "PROPERTY")
- cmake_parse_arguments(DT_CHOSEN "" "${req_single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_has_chosen(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_CHOSEN_${arg})
- message(FATAL_ERROR "dt_has_chosen(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- get_target_property(exists devicetree_target "DT_CHOSEN|${DT_CHOSEN_PROPERTY}")
- if(${exists} STREQUAL exists-NOTFOUND)
- set(${var} FALSE PARENT_SCOPE)
- else()
- set(${var} TRUE PARENT_SCOPE)
- endif()
- endfunction()
- function(dt_chosen var)
- set(req_single_args "PROPERTY")
- cmake_parse_arguments(DT_CHOSEN "" "${req_single_args}" "" ${ARGN})
- if(${ARGV0} IN_LIST req_single_args)
- message(FATAL_ERROR "dt_has_chosen(${ARGV0} ...) missing return parameter.")
- endif()
- foreach(arg ${req_single_args})
- if(NOT DEFINED DT_CHOSEN_${arg})
- message(FATAL_ERROR "dt_chosen(${ARGV0} ...) "
- "missing required argument: ${arg}"
- )
- endif()
- endforeach()
- get_target_property(${var} devicetree_target "DT_CHOSEN|${DT_CHOSEN_PROPERTY}")
- if(${${var}} STREQUAL ${var}-NOTFOUND)
- set(${var} PARENT_SCOPE)
- else()
- set(${var} ${${var}} PARENT_SCOPE)
- endif()
- endfunction()
- function(zephyr_linker)
- set(single_args "ENTRY;FORMAT")
- cmake_parse_arguments(LINKER "" "${single_args}" "" ${ARGN})
- if(LINKER_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "zephyr_linker(${ARGV0} ...) given unknown "
- "arguments: ${LINKER_UNPARSED_ARGUMENTS}"
- )
- endif()
- if(DEFINED LINKER_FORMAT)
- get_property(format_defined TARGET linker PROPERTY FORMAT SET)
- if(format_defined)
- message(FATAL_ERROR "zephyr_linker(FORMAT ...) already configured.")
- else()
- set_property(TARGET linker PROPERTY FORMAT ${LINKER_FORMAT})
- endif()
- endif()
- if(DEFINED LINKER_ENTRY)
- get_property(entry_defined TARGET linker PROPERTY ENTRY SET)
- if(entry_defined)
- message(FATAL_ERROR "zephyr_linker(ENTRY ...) already configured.")
- else()
- set_property(TARGET linker PROPERTY ENTRY ${LINKER_ENTRY})
- endif()
- endif()
- endfunction()
- function(zephyr_linker_memory)
- set(single_args "FLAGS;NAME;SIZE;START")
- cmake_parse_arguments(MEMORY "" "${single_args}" "" ${ARGN})
- if(MEMORY_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "zephyr_linker_memory(${ARGV0} ...) given unknown "
- "arguments: ${MEMORY_UNPARSED_ARGUMENTS}"
- )
- endif()
- foreach(arg ${single_args})
- if(NOT DEFINED MEMORY_${arg})
- message(FATAL_ERROR "zephyr_linker_memory(${ARGV0} ...) missing required "
- "argument: ${arg}"
- )
- endif()
- endforeach()
- set(MEMORY)
- zephyr_linker_arg_val_list(MEMORY "${single_args}")
- string(REPLACE ";" "\;" MEMORY "${MEMORY}")
- set_property(TARGET linker
- APPEND PROPERTY MEMORY_REGIONS "{${MEMORY}}"
- )
- endfunction()
- macro(zephyr_linker_memory_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_linker_memory(${ARGN})
- endif()
- endmacro()
- function(zephyr_linker_dts_memory)
- set(single_args "CHOSEN;FLAGS;NAME;PATH;NODELABEL")
- cmake_parse_arguments(DTS_MEMORY "" "${single_args}" "" ${ARGN})
- if(DTS_MEMORY_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "zephyr_linker_dts_memory(${ARGV0} ...) given unknown "
- "arguments: ${DTS_MEMORY_UNPARSED_ARGUMENTS}"
- )
- endif()
- if((DEFINED DTS_MEMORY_PATH AND (DEFINED DTS_MEMORY_NODELABEL OR DEFINED DTS_MEMORY_CHOSEN))
- OR (DEFINED DTS_MEMORY_NODELABEL AND DEFINED DTS_MEMORY_CHOSEN))
- message(FATAL_ERROR "zephyr_linker_dts_memory(${ARGV0} ...), only one of "
- "PATH, NODELABEL, and CHOSEN is allowed."
- )
- endif()
- if(DEFINED DTS_MEMORY_NODELABEL)
- dt_nodelabel(DTS_MEMORY_PATH NODELABEL ${DTS_MEMORY_NODELABEL})
- endif()
- if(DEFINED DTS_MEMORY_CHOSEN)
- dt_chosen(DTS_MEMORY_PATH PROPERTY ${DTS_MEMORY_CHOSEN})
- endif()
- if(NOT DEFINED DTS_MEMORY_PATH)
- return()
- endif()
- dt_node_exists(exists PATH ${DTS_MEMORY_PATH})
- if(NOT ${exists})
- return()
- endif()
- dt_reg_addr(addr PATH ${DTS_MEMORY_PATH})
- dt_reg_size(size PATH ${DTS_MEMORY_PATH})
- zephyr_linker_memory(
- NAME ${DTS_MEMORY_NAME}
- START ${addr}
- SIZE ${size}
- FLAGS ${DTS_MEMORY_FLAGS}
- )
- endfunction()
- function(zephyr_linker_group)
- set(single_args "NAME;GROUP;LMA;SYMBOL;VMA")
- set(symbol_values SECTION)
- cmake_parse_arguments(GROUP "" "${single_args}" "" ${ARGN})
- if(GROUP_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "zephyr_linker_group(${ARGV0} ...) given unknown "
- "arguments: ${GROUP_UNPARSED_ARGUMENTS}"
- )
- endif()
- if(DEFINED GROUP_GROUP AND (DEFINED GROUP_VMA OR DEFINED GROUP_LMA))
- message(FATAL_ERROR "zephyr_linker_group(GROUP ...) cannot be used with "
- "VMA or LMA"
- )
- endif()
- if(DEFINED GROUP_SYMBOL)
- if(NOT ${GROUP_SYMBOL} IN_LIST symbol_values)
- message(FATAL_ERROR "zephyr_linker_group(SYMBOL ...) given unknown value")
- endif()
- endif()
- set(GROUP)
- zephyr_linker_arg_val_list(GROUP "${single_args}")
- string(REPLACE ";" "\;" GROUP "${GROUP}")
- set_property(TARGET linker
- APPEND PROPERTY GROUPS "{${GROUP}}"
- )
- endfunction()
- function(zephyr_linker_section)
- set(options "ALIGN_WITH_INPUT;HIDDEN;NOINIT;NOINPUT")
- set(single_args "ADDRESS;ALIGN;ENDALIGN;GROUP;KVMA;LMA;NAME;SUBALIGN;TYPE;VMA")
- set(multi_args "PASS")
- cmake_parse_arguments(SECTION "${options}" "${single_args}" "${multi_args}" ${ARGN})
- if(SECTION_UNPARSED_ARGUMENTS)
- message(WARNING "zephyr_linker_section(${ARGV0} ...) given unknown "
- "arguments: ${SECTION_UNPARSED_ARGUMENTS}"
- )
- endif()
- if(DEFINED SECTION_GROUP AND (DEFINED SECTION_VMA OR DEFINED SECTION_LMA))
- message(FATAL_ERROR "zephyr_linker_section(GROUP ...) cannot be used with "
- "VMA or LMA"
- )
- endif()
- if(DEFINED SECTION_KVMA)
-
-
- if(CONFIG_MMU)
- math(EXPR KERNEL_MEM_VM_OFFSET
- "(${CONFIG_KERNEL_VM_BASE} + ${CONFIG_KERNEL_VM_OFFSET})\
- - (${CONFIG_SRAM_BASE_ADDRESS} + ${CONFIG_SRAM_OFFSET})"
- )
- if(NOT (${KERNEL_MEM_VM_OFFSET} EQUAL 0))
- set(SECTION_VMA ${SECTION_KVMA})
- set(SECTION_KVMA)
- endif()
- endif()
- endif()
- set(SECTION)
- zephyr_linker_arg_val_list(SECTION "${single_args}")
- zephyr_linker_arg_val_list(SECTION "${options}")
- zephyr_linker_arg_val_list(SECTION "${multi_args}")
- string(REPLACE ";" "\;" SECTION "${SECTION}")
- set_property(TARGET linker
- APPEND PROPERTY SECTIONS "{${SECTION}}"
- )
- endfunction()
- macro(zephyr_linker_section_ifdef feature_toggle)
- if(${${feature_toggle}})
- zephyr_linker_section(${ARGN})
- endif()
- endmacro()
- function(zephyr_iterable_section)
-
- set(options "ALIGN_WITH_INPUT")
- set(single_args "GROUP;LMA;NAME;SUBALIGN;VMA")
- set(multi_args "")
- set(align_input)
- cmake_parse_arguments(SECTION "${options}" "${single_args}" "${multi_args}" ${ARGN})
- if(NOT DEFINED SECTION_NAME)
- message(FATAL_ERROR "zephyr_iterable_section(${ARGV0} ...) missing "
- "required argument: NAME"
- )
- endif()
- if(NOT DEFINED SECTION_SUBALIGN)
- message(FATAL_ERROR "zephyr_iterable_section(${ARGV0} ...) missing "
- "required argument: SUBALIGN"
- )
- endif()
- if(SECTION_ALIGN_WITH_INPUT)
- set(align_input ALIGN_WITH_INPUT)
- endif()
- zephyr_linker_section(
- NAME ${SECTION_NAME}_area
- GROUP "${SECTION_GROUP}"
- VMA "${SECTION_VMA}" LMA "${SECTION_LMA}"
- NOINPUT ${align_input} SUBALIGN ${SECTION_SUBALIGN}
- )
- zephyr_linker_section_configure(
- SECTION ${SECTION_NAME}_area
- INPUT "._${SECTION_NAME}.static.*"
- SYMBOLS _${SECTION_NAME}_list_start _${SECTION_NAME}_list_end
- KEEP SORT NAME
- )
- endfunction()
- function(zephyr_linker_section_obj_level)
- set(single_args "SECTION;LEVEL")
- cmake_parse_arguments(OBJ "" "${single_args}" "" ${ARGN})
- if(NOT DEFINED OBJ_SECTION)
- message(FATAL_ERROR "zephyr_linker_section_obj_level(${ARGV0} ...) "
- "missing required argument: SECTION"
- )
- endif()
- if(NOT DEFINED OBJ_LEVEL)
- message(FATAL_ERROR "zephyr_linker_section_obj_level(${ARGV0} ...) "
- "missing required argument: LEVEL"
- )
- endif()
- zephyr_linker_section_configure(
- SECTION ${OBJ_SECTION}
- INPUT ".z_${OBJ_SECTION}_${OBJ_LEVEL}?_"
- SYMBOLS __${OBJ_SECTION}_${OBJ_LEVEL}_start
- KEEP SORT NAME
- )
- zephyr_linker_section_configure(
- SECTION ${OBJ_SECTION}
- INPUT ".z_${OBJ_SECTION}_${OBJ_LEVEL}??_"
- KEEP SORT NAME
- )
- endfunction()
- function(zephyr_linker_section_configure)
- set(options "ANY;FIRST;KEEP")
- set(single_args "ALIGN;OFFSET;PASS;PRIO;SECTION;SORT")
- set(multi_args "FLAGS;INPUT;SYMBOLS")
- cmake_parse_arguments(SECTION "${options}" "${single_args}" "${multi_args}" ${ARGN})
- if(SECTION_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "zephyr_linker_section_configure(${ARGV0} ...) given unknown arguments: ${SECTION_UNPARSED_ARGUMENTS}")
- endif()
- if(DEFINED SECTION_SYMBOLS)
- list(LENGTH SECTION_SYMBOLS symbols_count)
- if(${symbols_count} GREATER 2)
- message(FATAL_ERROR "zephyr_linker_section_configure(SYMBOLS [start_sym [end_sym]]) takes maximum two symbol names (start and end).")
- endif()
- endif()
- set(SECTION)
- zephyr_linker_arg_val_list(SECTION "${single_args}")
- zephyr_linker_arg_val_list(SECTION "${options}")
- zephyr_linker_arg_val_list(SECTION "${multi_args}")
- string(REPLACE ";" "\;" SECTION "${SECTION}")
- set_property(TARGET linker
- APPEND PROPERTY SECTION_SETTINGS "{${SECTION}}"
- )
- endfunction()
- function(zephyr_linker_symbol)
- set(single_args "EXPR;SYMBOL")
- cmake_parse_arguments(SYMBOL "" "${single_args}" "" ${ARGN})
- if(SECTION_UNPARSED_ARGUMENTS)
- message(WARNING "zephyr_linker_symbol(${ARGV0} ...) given unknown "
- "arguments: ${SECTION_UNPARSED_ARGUMENTS}"
- )
- endif()
- set(SYMBOL)
- zephyr_linker_arg_val_list(SYMBOL "${single_args}")
- string(REPLACE ";" "\;" SYMBOL "${SYMBOL}")
- set_property(TARGET linker
- APPEND PROPERTY SYMBOLS "{${SYMBOL}}"
- )
- endfunction()
- macro(zephyr_linker_arg_val_list list arguments)
- foreach(arg ${arguments})
- if(DEFINED ${list}_${arg})
- list(APPEND ${list} ${arg} "${${list}_${arg}}")
- endif()
- endforeach()
- endmacro()
|