Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c379ec6

Browse filesBrowse files
jbergstroemrvagg
authored andcommitted
doc: move build instructions to a new document
This makes README.md easier to consume and likely less confusing for people that get it as part of a binary download. PR-URL: #5634 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Brian White <mscdex@mscdex.net> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent d5d64c3 commit c379ec6
Copy full SHA for c379ec6

File tree

Expand file treeCollapse file tree

2 files changed

+249
-238
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+249
-238
lines changed
Open diff view settings
Collapse file

‎BUILDING.md‎

Copy file name to clipboard
+246Lines changed: 246 additions & 0 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
## Building Node.js
2+
3+
Depending on what platform or features you require the build process may
4+
differ slightly. After you've successfully built a binary, running the
5+
test suite to validate that the binary works as intended is a good next step.
6+
7+
If you consistently can reproduce a test failure, search for it in the
8+
[Node.js issue tracker](https://github.com/nodejs/node/issues) or
9+
file a new issue.
10+
11+
12+
### Unix / Macintosh
13+
14+
Prerequisites:
15+
16+
* `gcc` and `g++` 4.8 or newer, or
17+
* `clang` and `clang++` 3.4 or newer
18+
* Python 2.6 or 2.7
19+
* GNU Make 3.81 or newer
20+
* libexecinfo (FreeBSD and OpenBSD only)
21+
22+
```text
23+
$ ./configure
24+
$ make
25+
$ [sudo] make install
26+
```
27+
28+
If your Python binary is in a non-standard location or has a
29+
non-standard name, run the following instead:
30+
31+
```text
32+
$ export PYTHON=/path/to/python
33+
$ $PYTHON ./configure
34+
$ make
35+
$ [sudo] make install
36+
```
37+
38+
To run the tests:
39+
40+
```text
41+
$ make test
42+
```
43+
44+
To build the documentation:
45+
46+
```text
47+
$ make doc
48+
```
49+
50+
To read the documentation:
51+
52+
```text
53+
$ man doc/node.1
54+
```
55+
56+
To test if Node.js was built correctly:
57+
58+
```
59+
$ node -e "console.log('Hello from Node.js ' + process.version)"
60+
```
61+
62+
63+
### Windows
64+
65+
Prerequisites:
66+
67+
* [Python 2.6 or 2.7](https://www.python.org/downloads/)
68+
* Visual Studio 2013 / 2015, all editions including the Community edition, or
69+
* Visual Studio Express 2013 / 2015 for Desktop
70+
* Basic Unix tools required for some tests,
71+
[Git for Windows](http://git-scm.com/download/win) includes Git Bash
72+
and tools which can be included in the global `PATH`.
73+
74+
```text
75+
> vcbuild nosign
76+
```
77+
78+
To run the tests:
79+
80+
```text
81+
> vcbuild test
82+
```
83+
84+
To test if Node.js was built correctly:
85+
86+
```
87+
$ node -e "console.log('Hello from Node.js ' + process.version)"
88+
```
89+
90+
### Android / Android based devices, aka. Firefox OS
91+
92+
Be sure you have downloaded and extracted [Android NDK]
93+
(https://developer.android.com/tools/sdk/ndk/index.html)
94+
before in a folder. Then run:
95+
96+
```
97+
$ ./android-configure /path/to/your/android-ndk
98+
$ make
99+
```
100+
101+
102+
### `Intl` (ECMA-402) support:
103+
104+
[Intl](https://github.com/nodejs/node/wiki/Intl) support is not
105+
enabled by default.
106+
107+
108+
#### "small" (English only) support
109+
110+
This option will build with "small" (English only) support, but
111+
the full `Intl` (ECMA-402) APIs. With `--download=all` it will
112+
download the ICU library as needed.
113+
114+
##### Unix / Macintosh:
115+
116+
```text
117+
$ ./configure --with-intl=small-icu --download=all
118+
```
119+
120+
##### Windows:
121+
122+
```text
123+
> vcbuild small-icu download-all
124+
```
125+
126+
The `small-icu` mode builds with English-only data. You can add full
127+
data at runtime.
128+
129+
*Note:* more docs are on
130+
[the node wiki](https://github.com/nodejs/node/wiki/Intl).
131+
132+
#### Build with full ICU support (all locales supported by ICU):
133+
134+
With the `--download=all`, this may download ICU if you don't have an
135+
ICU in `deps/icu`.
136+
137+
##### Unix / Macintosh:
138+
139+
```text
140+
$ ./configure --with-intl=full-icu --download=all
141+
```
142+
143+
##### Windows:
144+
145+
```text
146+
> vcbuild full-icu download-all
147+
```
148+
149+
#### Building without Intl support
150+
151+
The `Intl` object will not be available. This is the default at
152+
present, so this option is not normally needed.
153+
154+
##### Unix / Macintosh:
155+
156+
```text
157+
$ ./configure --with-intl=none
158+
```
159+
160+
##### Windows:
161+
162+
```text
163+
> vcbuild intl-none
164+
```
165+
166+
#### Use existing installed ICU (Unix / Macintosh only):
167+
168+
```text
169+
$ pkg-config --modversion icu-i18n && ./configure --with-intl=system-icu
170+
```
171+
172+
If you are cross compiling, your `pkg-config` must be able to supply a path
173+
that works for both your host and target environments.
174+
175+
#### Build with a specific ICU:
176+
177+
You can find other ICU releases at
178+
[the ICU homepage](http://icu-project.org/download).
179+
Download the file named something like `icu4c-**##.#**-src.tgz` (or
180+
`.zip`).
181+
182+
##### Unix / Macintosh
183+
184+
```text
185+
# from an already-unpacked ICU:
186+
$ ./configure --with-intl=[small-icu,full-icu] --with-icu-source=/path/to/icu
187+
188+
# from a local ICU tarball
189+
$ ./configure --with-intl=[small-icu,full-icu] --with-icu-source=/path/to/icu.tgz
190+
191+
# from a tarball URL
192+
$ ./configure --with-intl=full-icu --with-icu-source=http://url/to/icu.tgz
193+
```
194+
195+
##### Windows
196+
197+
First unpack latest ICU to `deps/icu`
198+
[icu4c-**##.#**-src.tgz](http://icu-project.org/download) (or `.zip`)
199+
as `deps/icu` (You'll have: `deps/icu/source/...`)
200+
201+
```text
202+
> vcbuild full-icu
203+
```
204+
205+
## Building Node.js with FIPS-compliant OpenSSL
206+
207+
NOTE: Windows is not yet supported
208+
209+
It is possible to build Node.js with
210+
[OpenSSL FIPS module](https://www.openssl.org/docs/fips/fipsnotes.html).
211+
212+
**Note**: building in this way does **not** allow you to claim that the
213+
runtime is FIPS 140-2 validated. Instead you can indicate that the runtime
214+
uses a validated module. See the [security policy](http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140sp/140sp1747.pdf)
215+
page 60 for more details. In addition, the validation for the underlying module
216+
is only valid if it is deployed in accordance with its [security policy](http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140sp/140sp1747.pdf).
217+
If you need FIPS validated cryptography it is recommended that you read both
218+
the [security policy](http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140sp/140sp1747.pdf)
219+
and [user guide](https://openssl.org/docs/fips/UserGuide-2.0.pdf).
220+
221+
### Instructions
222+
223+
1. Obtain a copy of openssl-fips-x.x.x.tar.gz.
224+
To comply with the security policy you must ensure the path
225+
through which you get the file complies with the requirements
226+
for a "secure installation" as described in section 6.6 in
227+
the [user guide](https://openssl.org/docs/fips/UserGuide-2.0.pdf).
228+
For evaluation/experimentation you can simply download and verify
229+
`openssl-fips-x.x.x.tar.gz` from https://www.openssl.org/source/
230+
2. Extract source to `openssl-fips` folder and `cd openssl-fips`
231+
3. `./config`
232+
4. `make`
233+
5. `make install`
234+
(NOTE: to comply with the security policy you must use the exact
235+
commands in steps 3-5 without any additional options as per
236+
Appendix A in the [security policy](http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140sp/140sp1747.pdf).
237+
The only exception is that `./config no-asm` can be
238+
used in place of `./config`, and the FIPSDIR environment variable
239+
may be used to specify a non-standard install folder for the
240+
validated module, as per User Guide sections 4.2.1, 4.2.2, and 4.2.3.
241+
6. Get into Node.js checkout folder
242+
7. `./configure --openssl-fips=/path/to/openssl-fips/installdir`
243+
For example on ubuntu 12 the installation directory was
244+
/usr/local/ssl/fips-2.0
245+
8. Build Node.js with `make -j`
246+
9. Verify with `node -p "process.versions.openssl"` (`1.0.2a-fips`)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.