blob: 554139654f267c63784033ae68863b870022d082 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
[![Build Status](https://drone.yoedistro.org/api/badges/kraj/meta-clang/status.svg)](https://drone.yoedistro.org/kraj/meta-clang)
# meta-clang (a C language family frontend and LLVM compiler backend)
This layer provides [clang/llvm](http://clang.llvm.org/) as alternative to your system
C/C++ compiler for OpenEmbedded based distributions along with gcc
# Getting Started
```shell
git clone git://github.com/openembedded/openembedded-core.git
cd openembedded-core
git clone git://github.com/openembedded/bitbake.git
git clone git://github.com/kraj/meta-clang.git
$ . ./oe-init-build-env
```
Add meta-clang overlay
```
bitbake-layers add-layer ../meta-clang
```
Check `conf/bblayers.conf` to see that meta-clang is added to layer mix e.g.
# Default Compiler Switch
Note that by default gcc will remain the system compiler, however if you wish
clang to be the default compiler then set
```shell
TOOLCHAIN ?= "clang"
```
in `local.conf`, this would now switch default cross-compiler to be clang
you can select clang per recipe too by writing bbappends for them containing
```shell
TOOLCHAIN = "clang"
```
# Default C++ Standard Library Switch
Note that by default clang libc++ is default C++ standard library, however if you wish
to keep GNU libstdc++ to be the default then set
```shell
LIBCPLUSPLUS = ""
```
in `local.conf`.
You can select libstdc++ per package too by writing bbappends for them containing
```shell
LIBCPLUSPLUS_toolchain-clang_pn-<recipe> = ""
```
# Default Compiler Runtime ( Compiler-rt + libc++ )
By default, clang build from meta-clang uses clang runtime ( compiler-rt + libc++ + libunwind ) out of box
However, it is possible to switch to using gcc runtime as default, In order to do that
following settings are needed in site configurations e.g. in `local.conf`
```shell
TOOLCHAIN ?= "clang"
LIBCPLUSPLUS = ""
COMPILER_RT = ""
UNWINDLIB = ""
```
# Removing clang from generated SDK toolchain
clang based cross compiler is automatically included into the generated SDK using `bitbake meta-toolchain` or
`bitbake -cpopulate_sdk <image>` in circumstanced where clang is not expected to be part of SDK, then reset `CLANGSDK`
variable in `local.conf`
```shell
CLANGSDK = ""
```
# Building
Below we build for qemuarm machine as an example
```shell
$ MACHINE=qemuarm bitbake core-image-full-cmdline
```
# Running
```shell
$ runqemu nographic
```
# Limitations
Few components do not build with clang, if you have a component to add to that list
simply add it to conf/nonclangable.inc e.g.
```shell
TOOLCHAIN_pn-<recipe> = "gcc"
```
and OE will start using gcc to cross compile that recipe.
And if a component does not build with libc++, you can add it to `conf/nonclangable.inc` e.g.
```shell
CXX_remove_pn-<recipe>_toolchain-clang = " -stdlib=libc++ "
```
# Dependencies
```shell
URI: git://github.com/openembedded/openembedded-core.git
branch: master
revision: HEAD
URI: git://github.com/openembedded/bitbake.git
branch: master
revision: HEAD
```
# Contributing
You are encouraged to follow Github Pull request workflow
to share changes and following commit message guidelines are recommended [OE patch guidelines](https://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines)
Layer Maintainer: [Khem Raj](<mailto:raj.khem@gmail.com>)
|