README.rst
1=====================================================
2LLVM parallel-libs Subproject Charter
3=====================================================
4
5----------------------------------------------
6Description
7----------------------------------------------
8The LLVM open source project will contain a subproject named `parallel-libs`
9which will host the development of libraries which are aimed at enabling
10parallelism in code and which are also closely tied to compiler technology.
11Examples of libraries suitable for hosting within the `parallel-libs`
12subproject are runtime libraries and parallel math libraries. The initial
13candidates for inclusion in this subproject are **StreamExecutor** and
14**libomptarget** which would live in the `streamexecutor` and `libomptarget`
15subdirectories of `parallel-libs`, respectively.
16
17The `parallel-libs` project will host a collection of libraries where each
18library may be dependent on other libraries from the project or may be
19completely independent of any other libraries in the project. The rationale for
20hosting independent libraries within the same subproject is that all libraries
21in the project are providing related functionality that lives at the
22intersection of parallelism and compiler technology. It is expected that some
23libraries which initially began as independent will develop dependencies over
24time either between existing libraries or by extracting common code that can be
25used by each. One of the purposes of this subproject is to provide a working
26space where such refactoring and code sharing can take place.
27
28Libraries in the `parallel-libs` subproject may also depend on the LLVM core
29libraries. This will be useful for avoiding duplication of code within the LLVM
30project for common utilities such as those found in the LLVM support library.
31
32
33----------------------------------------------
34Requirements
35----------------------------------------------
36Libraries included in the `parallel-libs` subproject must strive to achieve the
37following requirements:
38
391. Adhere to the LLVM coding standards.
402. Use the LLVM build and test infrastructure.
413. Be released under LLVM's license.
42
43
44Coding standards
45----------------
46Libraries in `parallel-libs` will match the LLVM coding standards. For existing
47projects being checked into the subproject as-is, an exception will be made
48during the initial check-in, with the understanding that the code will be
49promptly updated to follow the standards. Therefore, a three month grace period
50will be allowed for new libraries to meet the LLVM coding standards.
51
52Additional exceptions to strict adherence to the LLVM coding standards may be
53allowed in certain other cases, but the reasons for such exceptions must be
54discussed and documented on a case-by-case basis.
55
56
57LLVM build and test infrastructure
58----------------------------------
59Using the LLVM build and test infrastructure currently means using `cmake` for
60building, `lit` for testing, and `buildbot` for automating build and testing.
61This project will follow the main LLVM project conventions here and track them
62as they evolve.
63
64Each subproject library will be able to build separately without a single,
65unified cmake file, but each subproject libraries will also be integrated into
66the LLVM build so they can be built directly from the top level of the LLVM
67cmake infrastructure.
68
69
70LLVM license
71------------
72For simplicity, the `parallel-libs` project will use the normal LLVM license.
73While some runtime libraries use a dual license scheme in LLVM, we anticipate
74the project removing the need for this eventually and in the interim follow the
75simpler but still permissive license. Among other things, this makes it
76straightforward for these libraries to re-use core LLVM libraries where
77appropriate.
78
79
80----------------------------------------------
81Mailing List and Bugs
82----------------------------------------------
83Two mailing lists will be set up for the project:
84
851. parallel_libs-dev@lists.llvm.org for discussions among project developers, and
862. parallel_libs-commits@lists.llvm.org for patches and commits to the project.
87
88Each subproject library will manage its own components in Bugzilla. So, for
89example, there can be several Bugzilla components for different parts of
90StreamExecutor, etc.
91