3 !a_ !@sddlmZddlZddlZddlZddlZddlZddZddddd d dddd d d d dd dZddZddZ ddZ ddZ ddZ d.ddZ ddZddZd d!Zd"d#Zd$d%Zd&d'Zd/d)d*Zd+d,Zed-kredS)0)pprintNcCstjdd|jS)Nz\s+ )resubstrip)stringrN/home/aniruddha/Desktop/UnitTestSetup/test/cbmc/proofs/make_common_makefile.pycleanup_whitespace sr linux/z-Dz-I)platform separatordefineincludedarwinZwin32\z/Dz/I)r ZmacoswindowscCs,x&tjD]\}}tj|dkr |Sq WdS)Nr r )platform_definitionsitemssysr )r Z definitionrrr default_platform<srcsFdt|dfdd}fddjfdd||DS) Nr rcs|jS)N)split)r)from_separatorrr escape_separatorGsz.patch_path_separator..escape_separatorcs |jS)N)replace)r)r to_separatorrr change_separatorJsz.patch_path_separator..change_separatorcsg|] }|qSrr).0escaped)rrr Msz(patch_path_separator..)rjoin)opsysrrr)rrrr patch_path_separatorCs   r#cCsT|dkr |S|d krP|dk rP|d dkr6tjdd|S|d dkrPtjdd|S|S) Nr COMPILE_ONLY COMPILE_LINKz/Foz/Fo\s+z/Fez/Fe\s+)r$r%r')rr)r"linekeyvaluerrr patch_compile_outputPs  r+cCs*tj}|jddtttdd|jS)Nz--systemZOSz*Generate makefiles for operating system OS)metavarchoicesdefaulthelp)argparseArgumentParser add_argumentrstrr parse_args)parserrrr get_arguments_sr6c CsNi}t|8}x0tj|jD]\}}dd|D|t|<qWWdQRX|S)NcSsg|] }t|qSr)r )rr*rrr r usz-read_variable_definitions..)openjsonloadrr )filenameZvariableZ_filer)valuesrrr read_variable_definitionsqs  r<cCsf|rdj|jdnd}|j|r2|t|dn||}x&||gD]}|j|}|dk rD|SqDWdS)Nz{}__)formatrstrip startswithlenget)r)definesprefixZkey2Z_key_valuerrr find_definition_onceys" rGcCs.|\}}}t||dp,t||dp,t||dS)NHOC)rG)r)rDcommon_defines opsys_definesharness_definesrrr find_definitions   rNcsR|j|}|sdS|d kr,fdd|D}fdd|D}dj||dj|S) Nr>INCDEFcsg|]}t|qSr)r#)rr*)r"rr r sz(construct_definition..csg|]}dj|qS)z {}{} \)r?)rr*) value_prefixrr r sz{}_{} = \ {} # empty  )rOrP)rCr?r!)r" key_prefixrQr)Z definitionsr;linesr)r"rQr construct_definitions  rUcCs<t||}|r8|dkr&tjj|d}|jdj||dS)NFREERTOS_PLUS_TCPPROOFSrz{} = {} )rVrW)rNospathabspathwriter?)r"rrDmakefiler*rrr write_defines  r]c Cs|\}}}x|tdddg|||gD]b\}}xXtt|dt|dddgddd d gD]*\}}t|||||} | rV|j| d qVWq"WdS) NrJrIrHrrr>rOrPOPTZ CBMCFLAGSrR)ziprrUr[) r"rDr\rKrLrMrSrQr)rrrr write_common_definess   r`c st|}x|D]|}t||}tjd|}fdd|D}xDt||D]6\}} | dk rH|jdj|dj| }t|||| }qHW|j |qWWdQRXdS)Nz@(\w+)@csg|]}t|qSr)rN)rr))rDrr r sz"write_makefile..z@{}@r) r7r#rfindallr_rr?r!r+r[) r"templaterDr\Z _templater(keysr;r)r*r)rDr write_makefiles    rdcCsd}|dkr|j|dS)Na ################################################################ # Build configuration file to run cbmc under cbmc-batch in CI define encode_options '=$(shell echo $(1) | sed 's/ ,/ /g' | sed 's/ /;/g')=' endef cbmc-batch.yaml: @echo "Building $@" @$(RM) $@ @echo "jobos: ubuntu16" >> $@ @echo "cbmcflags: $(call encode_options,$(CBMCFLAGS) --unwinding-assertions)" >> $@ @echo "goto: $(ENTRY).goto" >> $@ @echo "expected: $(H_EXPECTED)" >> $@ ################################################################ r)r[)r" _makefiletargetrrr write_cbmcbatchyaml_targetsrgMakefilec CsZt|dF}t|d||t|d||t|||t||||t||WdQRXdS)NwrVrW)r7r]r`rdrg)r"rbrDr\rerrr makefile_from_templates   rjcCsBt}td}t|jdkrdnd}i}t|jd|||fddS)NzMakefileCommon.jsonrzMakefileWindows.jsonzMakefileLinux.jsonzMakefile.templatezMakefile.common)r6r<systemrj)argsrKrLrMrrr mainsrm__main__)N)rh)rr8rrrXr0r rrr#r+r6r<rGrNrUr]r`rdrgrjrm__name__rrrr sD