summaryrefslogtreecommitdiffstats
path: root/README.md
blob: f5e5c269e40fb0a9d182fe6115b335c39481c176 (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
# 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
```

Edit conf/bblayers.conf to add meta-clang to layer mix e.g.

```python
BBLAYERS ?= " \
  /home/kraj/openembedded-core/meta-clang \
  /home/kraj/openembedded-core/meta \
  "
```

# 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

```python
TOOLCHAIN ?= "clang"
```

in local.conf, this would now switch to using clang as default compiler systemwide
you can select clang per package too by writing bbappends for them containing

```python
TOOLCHAIN = "clang"
```

# Default C++ Standard Library Switch

Note that by default clang libc++ is default C++ standard library, however if you wish
GNU libstdc++ to be the default one then set

```python
LIBCPLUSPLUS = ""
```

in local.conf.
You can select libstdc++ per package too by writing bbappends for them containing

```python
LIBCPLUSPLUS_toolchain-clang_pn-<recipe> = ""
```

# Default Compiler Runtime ( Compiler-rt + libcxx )

By default, clang build from meta-clang uses gcc runtime ( libgcc + libstdc++ ) out of box
However, it is possible to switch to using Clang runtime as default, In order to do that
following settings are needed in site configurations e.g. in local.conf

```python
TOOLCHAIN ?= "clang"
TARGET_CXXFLAGS_append_toolchain-clang = " --stdlib=libc++"
TUNE_CCARGS_append_toolchain-clang = " --rtlib=compiler-rt --stdlib=libc++"
```

# Building

Below we build for qemuarm machine as an example

```shell
$ MACHINE=qemux86 bitbake core-image-base
```
# Running

```shell
$ runqemu qemux86
```

# 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

```
URI: git://github.com/openembedded/openembedded-core.git
branch: master
revision: HEAD

URI: git://github.com/openembedded/bitbake.git
branch: master
revision: HEAD
```

Send pull requests to openembedded-devel@lists.openembedded.org with '[meta-clang]' in the subject'

When sending single patches, please use something like:

'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-clang][PATCH'

You are encouraged to fork the mirror on [github](https://github.com/kraj/meta-clang/)
to share your patches, this is preferred for patch sets consisting of more than
one patch. Other services like gitorious, repo.or.cz or self hosted setups are
of course accepted as well, 'git fetch <remote>' works the same on all of them.
We recommend github because it is free, easy to use, has been proven to be reliable
and has a really good web GUI.

Layer Maintainer: [Khem Raj](<mailto:raj.khem@gmail.com>)