• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1C++11 in Skia
2=============
3
4Skia uses C++11.  But as a library, we are technically limited by what our
5clients support and what our build bots support.
6
7Skia may also be limited by restrictions we choose put on ourselves.  This
8document is not concerned with C++11 policy in Skia, only its technical
9feasibility.  This is about what we can use, a superset of what we may use.
10
11The gist:
12
13-   C++11 the language as supported by GCC 4.7 or later is pretty usable.
14-   The C++11 standard library can generally be used, with some teething.
15-   If you break a bot, that feature is not usable.
16-   Local statics are not thread safe.
17
18
19Clients
20-------
21
22The clients we pay most attention to are Chrome, Android, Mozilla, and a few
23internal Google projects.
24
25Chrome builds with a recent Clang on Mac and Linux and with a recent MSVC on
26Windows.  These toolchains are new enough to not be the weak link to use any
27C++11 language feature.
28
29Chrome intentionally disables thread-safe initialization of static variables,
30so we cannot rely on that.  Our bots disable this too, so keep an eye on TSAN.
31
32Android builds with either a somewhat aged GCC or a recent Clang.  They're
33generally not a weak link for C++11 language features.  Android's C++ standard
34library had historically been a pain, but seems to work fine these days.
35
36Mozilla's current weak link is a minimum requirement of GCC 4.7.  Most features
37marked in red on Mozilla's C++11 [feature
38matrix](https://developer.mozilla.org/en-US/docs/Using_CXX_in_Mozilla_code) are
39marked that way because they arrived in GCC 4.8.  Their minimum-supported Clang
40and MSVC toolchains are pretty good, but MSVC 2013 will become the weak link soon.
41
42Internal Google projects tend to support C++11 completely, including the
43full C++11 standard library.
44
45
46Bots
47----
48
49Most of our bots are pretty up-to-date: the Windows bots use MSVC 2013, the Mac
50bots a recent Clang, and the Linux bots GCC 4.8 or a recent Clang.  Our Android
51bots use a recent toolchain from Android (see above), and our Chrome bots use
52Chrome's toolchains (see above).  I'm not exactly sure what our Chrome OS bots
53are using.  They're probably our weak link right now, though problems are rare.
54
55I believe our bots' ability to use C++11 matches Mozilla's list nearly identically.
56