blob: 0bf70b8d019404673152b7e8911f09b1e79efd6e [file] [log] [blame]
Eric Parkc9931992019-07-29 13:10:53 +09001
2
3
4
5<!doctype html>
6<html lang="en" class="no-js">
7 <head>
8
9 <meta charset="utf-8">
10 <meta name="viewport" content="width=device-width,initial-scale=1">
11 <meta http-equiv="x-ua-compatible" content="ie=edge">
12
13
14
15
16 <meta name="lang:clipboard.copy" content="Copy to clipboard">
17
18 <meta name="lang:clipboard.copied" content="Copied to clipboard">
19
20 <meta name="lang:search.language" content="en">
21
22 <meta name="lang:search.pipeline.stopwords" content="True">
23
24 <meta name="lang:search.pipeline.trimmer" content="True">
25
26 <meta name="lang:search.result.none" content="No matching documents">
27
28 <meta name="lang:search.result.one" content="1 matching document">
29
30 <meta name="lang:search.result.other" content="# matching documents">
31
32 <meta name="lang:search.tokenizer" content="[\s\-]+">
33
34 <link rel="shortcut icon" href="../../assets/images/favicon.png">
35 <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.4.0">
36
37
38
39 <title>Build Tips - Team Bliss</title>
40
41
42
43 <link rel="stylesheet" href="../../assets/stylesheets/application.0284f74d.css">
44
45
46
47
48 <script src="../../assets/javascripts/modernizr.74668098.js"></script>
49
50
51
52 <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
53 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono&display=fallback">
54 <style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
55
56
57 <link rel="stylesheet" href="../../assets/fonts/material-icons.css">
58
59
60
61
62
63
64 </head>
65
66 <body dir="ltr">
67
68 <svg class="md-svg">
69 <defs>
70
71
72 </defs>
73 </svg>
74 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
75 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
76 <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
77
78 <a href="#build-tips" tabindex="1" class="md-skip">
79 Skip to content
80 </a>
81
82
83 <header class="md-header" data-md-component="header">
84 <nav class="md-header-nav md-grid">
85 <div class="md-flex">
86 <div class="md-flex__cell md-flex__cell--shrink">
87 <a href="../.." title="Team Bliss" class="md-header-nav__button md-logo">
88
89 <i class="md-icon"></i>
90
91 </a>
92 </div>
93 <div class="md-flex__cell md-flex__cell--shrink">
94 <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
95 </div>
96 <div class="md-flex__cell md-flex__cell--stretch">
97 <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
98
99 <span class="md-header-nav__topic">
100 Team Bliss
101 </span>
102 <span class="md-header-nav__topic">
103
104 Build Tips
105
106 </span>
107
108 </div>
109 </div>
110 <div class="md-flex__cell md-flex__cell--shrink">
111
112 <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
113
114<div class="md-search" data-md-component="search" role="dialog">
115 <label class="md-search__overlay" for="__search"></label>
116 <div class="md-search__inner" role="search">
117 <form class="md-search__form" name="search">
118 <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
119 <label class="md-icon md-search__icon" for="__search"></label>
120 <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
121 &#xE5CD;
122 </button>
123 </form>
124 <div class="md-search__output">
125 <div class="md-search__scrollwrap" data-md-scrollfix>
126 <div class="md-search-result" data-md-component="result">
127 <div class="md-search-result__meta">
128 Type to start searching
129 </div>
130 <ol class="md-search-result__list"></ol>
131 </div>
132 </div>
133 </div>
134 </div>
135</div>
136
137 </div>
138
139 </div>
140 </nav>
141</header>
142
143 <div class="md-container">
144
145
146
147
148 <main class="md-main">
149 <div class="md-main__inner md-grid" data-md-component="container">
150
151
152 <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
153 <div class="md-sidebar__scrollwrap">
154 <div class="md-sidebar__inner">
155 <nav class="md-nav md-nav--primary" data-md-level="0">
156 <label class="md-nav__title md-nav__title--site" for="__drawer">
157 <a href="../.." title="Team Bliss" class="md-nav__button md-logo">
158
159 <i class="md-icon"></i>
160
161 </a>
162 Team Bliss
163 </label>
164
165 <ul class="md-nav__list" data-md-scrollfix>
166
167
168
169
170
171
172 <li class="md-nav__item">
173 <a href="../.." title="Welcome to the wiki!" class="md-nav__link">
174 Welcome to the wiki!
175 </a>
176 </li>
177
178
179
180
181
182
183
184 <li class="md-nav__item md-nav__item--nested">
185
186 <input class="md-toggle md-nav__toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2">
187
188 <label class="md-nav__link" for="nav-2">
189 Bliss OS
190 </label>
191 <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
192 <label class="md-nav__title" for="nav-2">
193 Bliss OS
194 </label>
195 <ul class="md-nav__list" data-md-scrollfix>
196
197
198
199
200
201
202
203 <li class="md-nav__item">
204 <a href="../../Bliss OS/" title="Index" class="md-nav__link">
205 Index
206 </a>
207 </li>
208
209
210 </ul>
211 </nav>
212 </li>
213
214
215
216
217
218
219
220
221
222 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
223
224 <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3" checked>
225
226 <label class="md-nav__link" for="nav-3">
227 BlissRoms
228 </label>
229 <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
230 <label class="md-nav__title" for="nav-3">
231 BlissRoms
232 </label>
233 <ul class="md-nav__list" data-md-scrollfix>
234
235
236
237
238
239
240
241 <li class="md-nav__item">
242 <a href="../" title="Index" class="md-nav__link">
243 Index
244 </a>
245 </li>
246
247
248
249
250
251
252
253 <li class="md-nav__item">
254 <a href="../build-guide/" title="BuildGuide" class="md-nav__link">
255 BuildGuide
256 </a>
257 </li>
258
259
260
261
262
263
264
265
266
267 <li class="md-nav__item md-nav__item--active">
268
269 <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
270
271
272
273
274 <label class="md-nav__link md-nav__link--active" for="__toc">
275 Build Tips
276 </label>
277
278 <a href="./" title="Build Tips" class="md-nav__link md-nav__link--active">
279 Build Tips
280 </a>
281
282
283<nav class="md-nav md-nav--secondary">
284
285
286
287
288
289 <label class="md-nav__title" for="__toc">Table of contents</label>
290 <ul class="md-nav__list" data-md-scrollfix>
291
292 <li class="md-nav__item">
293 <a href="#repo-optimization-tips" title="repo optimization tips" class="md-nav__link">
294 repo optimization tips
295 </a>
296
297 <nav class="md-nav">
298 <ul class="md-nav__list">
299
300 <li class="md-nav__item">
301 <a href="#threads" title="Threads" class="md-nav__link">
302 Threads
303 </a>
304
305</li>
306
307 <li class="md-nav__item">
308 <a href="#current-history-only" title="Current history only" class="md-nav__link">
309 Current history only
310 </a>
311
312</li>
313
314 <li class="md-nav__item">
315 <a href="#force" title="Force" class="md-nav__link">
316 Force
317 </a>
318
319</li>
320
321 <li class="md-nav__item">
322 <a href="#minimal-fetch" title="Minimal fetch" class="md-nav__link">
323 Minimal fetch
324 </a>
325
326</li>
327
328 <li class="md-nav__item">
329 <a href="#putting-it-all-together" title="Putting it all together" class="md-nav__link">
330 Putting it all together
331 </a>
332
333</li>
334
335 </ul>
336 </nav>
337
338</li>
339
340 <li class="md-nav__item">
341 <a href="#reset-tree" title="Reset tree" class="md-nav__link">
342 Reset tree
343 </a>
344
345</li>
346
347 <li class="md-nav__item">
348 <a href="#github-cherry-pick" title="GitHub cherry-pick" class="md-nav__link">
349 GitHub cherry-pick
350 </a>
351
352</li>
353
354 <li class="md-nav__item">
355 <a href="#make-and-go-inside" title="Make and go inside" class="md-nav__link">
356 Make and go inside
357 </a>
358
359</li>
360
361
362
363
364
365 </ul>
366
367</nav>
368
369 </li>
370
371
372 </ul>
373 </nav>
374 </li>
375
376
377
378
379
380
381
382 <li class="md-nav__item md-nav__item--nested">
383
384 <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
385
386 <label class="md-nav__link" for="nav-4">
387 Common
388 </label>
389 <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
390 <label class="md-nav__title" for="nav-4">
391 Common
392 </label>
393 <ul class="md-nav__list" data-md-scrollfix>
394
395
396
397
398
399
400
401 <li class="md-nav__item">
402 <a href="../../common/" title="Index" class="md-nav__link">
403 Index
404 </a>
405 </li>
406
407
408
409
410
411
412
413 <li class="md-nav__item">
414 <a href="../../common/git-started/" title="Git Started" class="md-nav__link">
415 Git Started
416 </a>
417 </li>
418
419
420 </ul>
421 </nav>
422 </li>
423
424
425
426
427
428
429
430 <li class="md-nav__item md-nav__item--nested">
431
432 <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
433
434 <label class="md-nav__link" for="nav-5">
435 Infrastructure
436 </label>
437 <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
438 <label class="md-nav__title" for="nav-5">
439 Infrastructure
440 </label>
441 <ul class="md-nav__list" data-md-scrollfix>
442
443
444
445
446
447
448
449 <li class="md-nav__item">
450 <a href="../../infrastructure/" title="Index" class="md-nav__link">
451 Index
452 </a>
453 </li>
454
455
456 </ul>
457 </nav>
458 </li>
459
460
461 </ul>
462</nav>
463 </div>
464 </div>
465 </div>
466
467
468 <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
469 <div class="md-sidebar__scrollwrap">
470 <div class="md-sidebar__inner">
471
472<nav class="md-nav md-nav--secondary">
473
474
475
476
477
478 <label class="md-nav__title" for="__toc">Table of contents</label>
479 <ul class="md-nav__list" data-md-scrollfix>
480
481 <li class="md-nav__item">
482 <a href="#repo-optimization-tips" title="repo optimization tips" class="md-nav__link">
483 repo optimization tips
484 </a>
485
486 <nav class="md-nav">
487 <ul class="md-nav__list">
488
489 <li class="md-nav__item">
490 <a href="#threads" title="Threads" class="md-nav__link">
491 Threads
492 </a>
493
494</li>
495
496 <li class="md-nav__item">
497 <a href="#current-history-only" title="Current history only" class="md-nav__link">
498 Current history only
499 </a>
500
501</li>
502
503 <li class="md-nav__item">
504 <a href="#force" title="Force" class="md-nav__link">
505 Force
506 </a>
507
508</li>
509
510 <li class="md-nav__item">
511 <a href="#minimal-fetch" title="Minimal fetch" class="md-nav__link">
512 Minimal fetch
513 </a>
514
515</li>
516
517 <li class="md-nav__item">
518 <a href="#putting-it-all-together" title="Putting it all together" class="md-nav__link">
519 Putting it all together
520 </a>
521
522</li>
523
524 </ul>
525 </nav>
526
527</li>
528
529 <li class="md-nav__item">
530 <a href="#reset-tree" title="Reset tree" class="md-nav__link">
531 Reset tree
532 </a>
533
534</li>
535
536 <li class="md-nav__item">
537 <a href="#github-cherry-pick" title="GitHub cherry-pick" class="md-nav__link">
538 GitHub cherry-pick
539 </a>
540
541</li>
542
543 <li class="md-nav__item">
544 <a href="#make-and-go-inside" title="Make and go inside" class="md-nav__link">
545 Make and go inside
546 </a>
547
548</li>
549
550
551
552
553
554 </ul>
555
556</nav>
557 </div>
558 </div>
559 </div>
560
561
562 <div class="md-content">
563 <article class="md-content__inner md-typeset">
564
565
566
567 <h1 id="build-tips">Build Tips</h1>
568<p>Here's a collective list of things you can try to improve your builds. Have fun!</p>
569<h2 id="repo-optimization-tips"><code>repo</code> optimization tips</h2>
570<h3 id="threads">Threads</h3>
571<p>By default, <code>repo</code> only utilizes four threads (or whatever the ROM manifest declares.) If you have a stronger machine with more threads, you can increase this number. So, for example, if you have 24 threads, you would type:</p>
572<pre><code>repo sync -j24
573</code></pre>
574<h3 id="current-history-only">Current history only</h3>
575<p>This should be set by default in your ROM manifest, but just in case, you can tell <code>repo</code> to only fetch recent changes. This allows for smaller downloads, which makes the sync quicker. Add the flag:</p>
576<pre><code>repo sync -c
577</code></pre>
578<h3 id="force">Force</h3>
579<p><strong>Warning! Dangerous option. Read before proceeding!</strong> Sometimes, your local history may go out of sync with remote repositories. This wouldn't be a problem if <code>repo</code> can handle it gracefully, but it doesn't and gives off a sync error. If you do not commit much, it may be worthwhile to add the force flags. Be warned though, <strong>any changes you make to the repositories WILL BE DELETED.</strong> Later down the line, if you commit a lot, you may want to remove this flag. To force sync, add the flag:</p>
580<pre><code>repo sync -f --force-sync
581</code></pre>
582<h3 id="minimal-fetch">Minimal fetch</h3>
583<p>To disable syncing clone bundles and tags, use:</p>
584<pre><code>repo sync --no-clone-bundle --no-tags
585</code></pre>
586<p>More documentation on this required, but for most developers these flags will be OK to use. This makes the sync faster as there is less information to sync over.</p>
587<h3 id="putting-it-all-together">Putting it all together</h3>
588<pre><code>repo sync -c -f -j24 --force-sync --no-clone-bundle --no-tags
589</code></pre>
590<p>That's quite long! How about we add this to our <code>.bashrc</code> as a alias? That way, we only have to type one phrase for <code>bash</code> to automatically type that out for us.</p>
591<p>Open up <code>~/.bashrc</code> and add these lines:</p>
592<pre><code># Alias to sync
593alias reposync='repo sync -c -f -j24 --force-sync --no-clone-bundle --no-tags'
594</code></pre>
595<p>This way, next time you want to sync, just type <code>reposync</code> and <code>bash</code> will substitute the command for you. Easy! Just don't forget to <code>source ~/.bashrc</code> otherwise <code>bash</code> will not know of this new alias.</p>
596<h2 id="reset-tree">Reset tree</h2>
597<p><strong>Warning! Very destructive tip. Do not use if you don't know what you are doing!</strong></p>
598<p>While messing around with device specific folders, you may break something and the build process might not work. Or, you may have multiple devices synced and you want to delete it all and start over. However, you might have limited bandwidth, and might not want to download the source over again.</p>
599<p>Add this function to your <code>~/.bashrc</code>:</p>
600<pre><code># Script to clean the source
601function resettree() {
602 rm -rf device kernel vendor out .repo/local_manifests
603 reposync
604}
605</code></pre>
606<p>Let's go over what this does, word by word:</p>
607<ul>
608<li><code>rm -rf</code>: Destructive command to erase all of the following:</li>
609<li><code>device</code> folder: Holds all device-related files</li>
610<li><code>kernel</code> folder: Holds all kernel-related files for devices</li>
611<li><code>vendor</code> folder: Holds all vendor-related files for devices AND ROM-specific vendor customizations</li>
612<li><code>out</code> folder: Stores artifacts of builds</li>
613<li><code>.repo/local_manifests</code> folder: Stores "manifest" information of devices to sync.</li>
614<li><code>reposync</code>: Executes the <code>repo sync</code> alias we made earlier.</li>
615</ul>
616<p>The last line is important, because by deleting the <code>vendor</code> folder, we also delete some crucial files for building Bliss. To fix that, we rerun a sync. Note that because we did not delete any other folders, syncing and updating files only take a fraction of a time compared to starting from scratch.</p>
617<p>To use this, after copying, don't forget to <code>source ~/.bashrc</code>. Then, run <code>resettree</code> at the base folder of the source code. Once you're done, don't forget to initialize a new device using <code>breakfast &lt;devicename&gt;</code>.</p>
618<h2 id="github-cherry-pick">GitHub cherry-pick</h2>
619<p>Thanks to @blueyes for providing the script!</p>
620<p>Copy the following into your <code>~/.bashrc</code>:</p>
621<pre><code>function gcp() {
622 COMMIT=`echo "$1" | cut -d/ -f6`
623 GH=`echo "$1" | cut -d/ -f1-3`
624 if [ "$COMMIT" != "commit" ]; then
625 echo -e "Please use a commit URL."
626 elif [ "$GH" != "https://github.com" ]; then
627 echo -e "Please use an https://github.com/ URL."
628 else
629 PROJECT=`echo "$1" | cut -d/ -f1-5`
630 git fetch $PROJECT
631 CP=`echo "$1" | cut -d/ -f7`
632 git cherry-pick $CP
633 fi
634}
635</code></pre>
636<p>To use this, <code>source ~/.bashrc</code> and then run <code>gcp &lt;GitHub commit URL here&gt;</code>.</p>
637<h2 id="make-and-go-inside">Make and go inside</h2>
638<p>This is a quick way to create and go inside a folder. Once again, copy this to your <code>~/.bashrc</code>:</p>
639<pre><code>function mkcdir ()
640{
641 mkdir -p -- "$1" &amp;&amp;
642 cd -P -- "$1"
643}
644</code></pre>
645<p>Don't forget to <code>source</code>, and run <code>mkcdir &lt;directory name&gt;</code>.</p>
646
647
648
649
650
651
652
653
654
655 </article>
656 </div>
657 </div>
658 </main>
659
660
661<footer class="md-footer">
662
663 <div class="md-footer-nav">
664 <nav class="md-footer-nav__inner md-grid">
665
666 <a href="../build-guide/" title="BuildGuide" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
667 <div class="md-flex__cell md-flex__cell--shrink">
668 <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
669 </div>
670 <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
671 <span class="md-flex__ellipsis">
672 <span class="md-footer-nav__direction">
673 Previous
674 </span>
675 BuildGuide
676 </span>
677 </div>
678 </a>
679
680
681 <a href="../../common/" title="Index" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
682 <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
683 <span class="md-flex__ellipsis">
684 <span class="md-footer-nav__direction">
685 Next
686 </span>
687 Index
688 </span>
689 </div>
690 <div class="md-flex__cell md-flex__cell--shrink">
691 <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
692 </div>
693 </a>
694
695 </nav>
696 </div>
697
698 <div class="md-footer-meta md-typeset">
699 <div class="md-footer-meta__inner md-grid">
700 <div class="md-footer-copyright">
701
702 powered by
703 <a href="https://www.mkdocs.org">MkDocs</a>
704 and
705 <a href="https://squidfunk.github.io/mkdocs-material/">
706 Material for MkDocs</a>
707 </div>
708
709 </div>
710 </div>
711</footer>
712
713 </div>
714
715 <script src="../../assets/javascripts/application.245445c6.js"></script>
716
717 <script>app.initialize({version:"1.0.4",url:{base:"../.."}})</script>
718
719
720 </body>
721</html>