OLD | NEW |
(Empty) | |
| 1 C++11 in Skia |
| 2 ============= |
| 3 |
| 4 Skia is exploring the use of C++11. As a library, we are technically limited |
| 5 by what our clients support and what our build bots support. |
| 6 |
| 7 Skia may also be limited by restrictions we choose put on ourselves. This |
| 8 document is not concerned with C++11 policy in Skia, only its technical |
| 9 feasibility. This is about what we can use, a superset of what we may use. |
| 10 |
| 11 The gist: |
| 12 - C++11 the language as supported by GCC 4.4 or later is probably usable. |
| 13 - If you break a bot, that feature is not usable. |
| 14 - The C++11 standard library can't generally be used. |
| 15 - Local statics are not thread safe. |
| 16 |
| 17 |
| 18 Clients |
| 19 ------- |
| 20 |
| 21 The clients we pay most attention to are Chrome, Android, Mozilla, and a few |
| 22 internal Google projects. |
| 23 |
| 24 Chrome builds with a recent Clang on Mac and Linux and with a recent MSVC on |
| 25 Windows. These toolchains are new enough to not be the weak link to use any |
| 26 C++11 language feature. But Chrome still supports Mac OS X 10.6, which does |
| 27 not ship with a C++11 standard library. So [Chrome has banned the use of the |
| 28 C++11 standard library](http://chromium-cpp.appspot.com/). Some header-only |
| 29 features are probably technically fine, but the Mac toolchain will prevent us |
| 30 from even trying at compile time as long as we target 10.6 as our minimum API |
| 31 level. |
| 32 |
| 33 Chrome intentionally disables thread-safe initialization of static variables, |
| 34 and MSVC doesn't support it at all, so we cannot rely on that. |
| 35 |
| 36 Android builds with either a recent GCC or a recent Clang. They're generally |
| 37 not a weak link for C++11 language features. Android's C++ standard library |
| 38 has always been a pain, but since we can't use it anyway (see Chrome), don't |
| 39 worry about it. |
| 40 |
| 41 Mozilla's current weak link is a minimum requirement of GCC 4.6. Most features |
| 42 marked in red on Mozilla's C++11 [feature |
| 43 matrix](https://developer.mozilla.org/en-US/docs/Using_CXX_in_Mozilla_code) are |
| 44 marked that way because they arrived in GCC 4.7 or GCC 4.8. Their |
| 45 minimum-supported Clang and MSVC toolchains are great. They also appear to ban |
| 46 the C++ standard library. |
| 47 |
| 48 Internal Google projects tend to support C++11 completely, including the |
| 49 full C++11 standard library. |
| 50 |
| 51 |
| 52 Bots |
| 53 ---- |
| 54 |
| 55 Most of our bots are pretty up-to-date: the Windows bots use MSVC 2013, the Mac |
| 56 bots a recent Clang, and the Linux bots GCC 4.8 or a recent Clang. Our Android |
| 57 bots use a recent toolchain from Android (see above), and our Chrome bots use |
| 58 Chrome's toolchains (see above). I'm not exactly sure what our Chrome OS bots |
| 59 are using, but they've never been a problem. |
| 60 |
| 61 A few miscellaneous compile-only bots are actually our current overall weak link
: |
| 62 - Our NaCl builds use an old non-PNaCl toolchain, which is based on GCC |
| 63 4.4. GCC 4.4 has some support for C++11, but it's not nearly complete. |
| 64 There is no upgrade path except PNaCl; even the very latest NaCl toolchain |
| 65 is GCC 4.4, while PNaCl is based on Clang 3.4 (with complete C++11 support
). |
| 66 - Our iOS builds are driven from a Mac 10.7 machine using some unknown old C
lang. |
| 67 Who knows how old that is or what it supports? It's probably due for an u
pdate. |
| 68 |
| 69 If we were to eliminate the problems of the NaCl and iOS bots, our ability to |
| 70 use C++11 would match Mozilla's list nearly identically. |
OLD | NEW |