Windows CE 6.0 R3 Build System Series – 7. Blddemo.bat : il “coordinatore” del sistema di build

Il sistema di build è costituito da una serie di tool e di script che sono coordinati da un unico file batch : il blddemo.bat. A seguito dell’inizializzazione del sistema, come visto nell’articolo precedente, la compilazione vera e propria dell’immagine viene avviata lanciando quest’ultimo che ha il compito di invocare in sequenza tutti i tool e gli script necessari per eseguire le quattro note fasi.

In primo luogo, è importante sapere che esso prevede alcuni parametri in ingresso, attraverso i quali ne è possibile modificare il comportamento. E’ altresì importante essere a conoscenza del fatto che invocare il blddemo senza parametri, determina l’esecuzione di tutte le fasi tra cui anche la prima, ossia la Pre-Sysgen, che esegue la compilazione delle directory PRIVATE e PUBLIC non necessarie. E’ tipicamente raro e caldamente sconsigliato lanciare il blddemo in questa modalità.

La generica riga di comando per la sua invocazione è la seguente :

BldDemo [[no]clean] [[no]cleanplat] [nuke] [norel] [Params for CEBUILD]

Osserviamo che, alcuni parametri sono specifici per il blddemo mentre altri sono destinati al batch cebuild.bat che è considerato il Master Build Tool e che viene invocato dallo stesso blddemo al suo interno.

La prima parte dei parametri, specifici per il blddemo, hanno il seguente significato :

  • clean : indica se eseguire una pulizia o meno delle directory %_PROJECTROOT%\cesysgen e %_PLATFORMROOT%\cesysgen che contengono i componenti del sistema operativo e della BSP filtrati attraverso la fase di Sysgen precedente;
  • noclean : non esegue il clean del punto precedente;
  • cleanplat : simile al clean ma ripulisce la cartella %_PLATFORMROOT%\target che contiene i componenti buildati della BSP (librerie ed eseguibili);
  • nocleanplat : non esegue il clean del punto precedente;
  • nuke : permette la ricerca del batch BldNuke.bat nelle cartelle %_PROJECTROOT% e %_PRIVATEROOT%\bat ed eventualmente la sua esecuzione;
  • norel : richiede esplicitamente di non eseguire la fase di Build Release Directory;
  • nomakeimg : non permette l’esecuzione della fase di Make Run-Time Image;
  • rel : esplicita la richiesta di esecuzione della fase di Build Release Directory;
  • Params for CEBUILD : una sequenza di parametri che saranno passati al file cebuild.bat che viene invocato all’interno del blddemo stesso. Tipici valori sono –q per un “quick” build, ossia senza la fase di Pre-Sysgen; –qbsp ossia un “quick” build ma esclusivamente sulla BSP;

Di seguito, riporto alcune tipiche modalità di esecuzione del blddemo :

  • blddemo clean : prima di avviare il build, viene eseguito un clean delle directory relative ad una compilazione precedente. In particolare, vengono ripulite la %_PROJECTROOT%\cesysgen e %_PLATFORMROOT%\cesysgen che come sappiamo contengono le librerie ed i file eseguibili filtrati sulla base dei componenti selezionati nell’OS design. A seguito del clean, parte la generazione dell’immagine dalla fase di Pre-Sysgen e quindi viene eseguita una compilazione completa includendo anche il codice in PUBLIC e PRIVATE;
  • blddemo –q : la “q” sta per “quick” ed è l’opzione più tipica, in quanto la compilazione parte dalla fase di Sysgen;
  • blddemo –qbsp : alla configurazione precedente viene aggiunta l’opzione “bsp” attraverso la quale si parte direttamente dalla fase di Sysgen e Build della sola BSP;
  • blddemo clean –q : esegue una pulizia prima di avviare l’esecuzione “quick”;

Passiamo ora alle operazioni eseguite al suo interno.

In primo luogo, verifica se esiste ed eventualmente lancia il file pblddemo.bat che lo sviluppatore può creare per customizzare il processo di build.

6518.blddemo1_492B0534

Subito dopo, viene eseguito il parsing dei parametri forniti in ingresso e sulla base di essi vengono settate le seguenti variabili :

  • clean / noclean –> _BLDDEMO_CLEAN = 1 (o vuoto);
  • cleanplat / nocleanplat –> _BLDDEMO_CLEANPLAT = 1 (o vuoto);
  • nuke –> _BLDDEMO_NUKE = 1;
  • norel / rel –> _BLDDEMO_NOREL = 1 (o vuoto);
  • nomakeimg / makeimg –> _BLDDEMO_NOMAKEIMG = 1 (o vuoto);

Se _BLDDEMO_NUKE = 1 viene invocato il BldNuke.bat, il cui scopo è poco  chiaro ma si presume che possa essere usato come “arma nucleare” (nuke) per un build completo dell’immagine.

0743.blddemo2_393BC070

Se è richiesto un clean attraverso le variabili _BLDDEMO_CLEAN = 1 e/o _BLDDEMO_CLEANPLAT = 1, viene eseguita tale operazione di pulizia.

5428.blddemo3_38635A86

Vengono anche cancellati eventuali vecchi file batch relativi alle Pre e Post Custom Build Actions che possono essere definite nelle proprietà dell’OS Design. Allo stesso modo, eventuali Pre e Post Sysgen Actions relative ai sottoprogetti.

0755.blddemo4_0BDA2AA0

Viene invocato il pbxmlutils che permette di riprodurre un ambiente di build da linea di comando in relazione a tutto ciò che settiamo attraverso la UI di Platform Builder e che viene aggiunto all’interno del file pbxml del nostro OS Design. In pratica, questo tool è in grado di leggere le impostazioni del file <MyOSDesign>.pbxml.

Successivamente, vengono invocati i file batch relativi all’esecuzione delle Pre-Sysgen Custom Build Actions e Pre-Sysgen Subproject Build Actions, ossia tutto ciò che precede la fase di Sysgen.

A questo punto, viene lanciato il cebuild.bat passandogli tutti i parametri ricevuti in ingresso :

2337.blddemo5_0F0C1288

Come vedremo negli articoli successivi, questo è il batch che si occuperà di eseguire le fasi principali di Sysgen e Build BSP.

Al termine dell’esecuzione del cebuild, viene verificata l’eventuale presenza del file build.errnella %_WINCEROOT% il quale indica il fatto che ci sono stati degli errori durante le fasi di Sysgen e/o Build BSP, per cui l’esecuzione del blddemo viene interrotta.

Se non si sono verificati errori, vengono invocati i batch relativi alle Post-Sysgen Custom Build Actions e Post-Sysgen Subproject Build Actions, quindi ciò che è postumo al Sysgen.

A questo punto è possibile proseguire con le due ultime fasi; viene invocato il buildrel.batse la variabile _BLDDEMO_NOREL non è stata settata…

3288.blddemo6_4A5F7846

… ed il makeimg.exe se la _BLDDEMO_NOMAKEIMG non è stata settata.

6232.blddemo7_08E4C5ED

A questo punto viene creato il log con l’insieme di tutti i settaggi della fase di Sysgen nel fileSysgenSettings.out e viene visualizzato il log makeimg.out generato dal makeimg (solo se la environment variable BLDDEMO_MI_LOG non è stata settata).

Infine, se la variabile MAKEIMG_MI_LOG risulta uguale a “imageupdate”, viene eseguito il comando “dir” sul file NK.bin generato, per visualizzarne le informazioni.

7875.blddemo8_5A1F0D4A

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s