forked from cplusplus/modules-ecosystem-tr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuildprocess.tex
84 lines (52 loc) · 3.31 KB
/
buildprocess.tex
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
%!TEX root = iso_cpp_modules_ecosystem_technical_report.tex
\rSec0[build]{Build Process}
\indextext{build|(}%
\rSec1[build.steps]{Steps of the Build}
\pnum When building \Cpp{} code that produces or consumes modules, the
build process needs to be broken down in different steps. The steps
described here represent the semantic organization, not the interface
presented to the \Cpp{} developer, the organization in steps does not
preclude parts of those steps to be executed in parallel.
\rSec2[build.steps.external-importable]{Identify External Importable Units}
\pnum As the \Cpp{} standard library itself will offer a modular
interface as well as importable headers, it will be very rarely the
case that a build system will be able to consider only modules
declared inside the same build context.
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/5}{modules-ecosystem-tr\#5}
\rSec2[build.steps.importable-headers]{Identify Importable Headers}
\pnum While external importable units may include header units, it's
also necessary to identify any importable header internal to the
project itself.
\pnum The \Cpp{} standard describes ``importable headers'' and
``non-importable headers'', however those cannot be differentiated
from their content alone, therefore they need to identified at the
tooling level.
\pnum The \Cpp{} standard also allows (15.3.7) the implementation to
optimize away source file inclusion when a header is known to be
importable.
\pnum Since an include directive may be replaced by an import
directive, a change in the identification of header units may change
the dependency information of any translation unit.
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/6}{modules-ecosystem-tr\#6}
\rSec2[build.steps.dependency-scan]{Dependency Scanning}
\pnum Once the list of importable headers is defined, the dependency
scanning phase can be performed. The dependency scanning is invoked by
the build system on all translation units (including header units).
\pnum The dependency scanning of each translation unit is independent
of the dependency scanning of any other translation unit.
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/7}{modules-ecosystem-tr\#7}
\rSec2[build.steps.bmi-generation]{Generation of the Binary Module Inteface}
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/8}{modules-ecosystem-tr\#8}
\rSec2[build.steps.compilation]{Compilation}
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/9}{modules-ecosystem-tr\#9}
\rSec2[build.steps.linking]{Linking}
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/10}{modules-ecosystem-tr\#10}
\rSec1[build.coherency]{Coherency Requirements}
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/11}{modules-ecosystem-tr\#11}
\rSec1[build.header-units]{Header Units}
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/12}{modules-ecosystem-tr\#12}
\rSec1[build.stdlib]{Relationship with the Standard Library}
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/13}{modules-ecosystem-tr\#13}
\rSec1[build.trivial]{Trivial Cases}
\pnum TODO: \href{https://github.com/cplusplus/modules-ecosystem-tr/issues/14}{modules-ecosystem-tr\#14}
\indextext{build|)}%