source: general/genlib/js102.xml@ aa1bc104

12.0 12.1 ken/TL2024 ken/tuningfonts lazarus plabs/newcss python3.11 rahul/power-profiles-daemon renodr/vulkan-addition trunk xry111/llvm18
Last change on this file since aa1bc104 was 1685f47, checked in by Douglas R. Reno <renodr@…>, 12 months ago

Revert my earlier js102 change - it turns out that my script was using
CC=gcc CXX=g++ and I didn't notice.

Sorry for the noise, and good catch Xi!

  • Property mode set to 100644
File size: 12.7 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../../general.ent">
5 %general-entities;
6
7<!-- for when firefox and js91 use same version
8 <!ENTITY ff91-version "&firefox-version;">
9 and when they are on different versions - keep this for when
10 we have moved to next firefox-esr (ff-91) and JS has not moved
11 <!ENTITY ff91-version "&JS91-version;"> -->
12
13<!--<!ENTITY ff102-version "&firefox-version;">-->
14 <!ENTITY js102-download-http "&mozilla-http;/firefox/releases/&JS102-version;esr/source/firefox-&JS102-version;esr.source.tar.xz">
15 <!ENTITY js102-download-ftp " ">
16 <!ENTITY js102-md5sum "42b9a73626ed8281b86222f6f0a96c73">
17 <!ENTITY js102-md5sum "">
18 <!ENTITY js102-size "464 MB">
19 <!ENTITY js102-buildsize "3.3 GB (38 MB installed after removing 34MB static lib)">
20 <!ENTITY js102-time "1.7 SBU (with parallelism=4)">
21]>
22
23<sect1 id="js102" xreflabel="JS-&JS102-version;">
24 <?dbhtml filename="js102.html"?>
25
26
27 <title>JS-&JS102-version;</title>
28
29 <indexterm zone="js102">
30 <primary sortas="a-js102">js102</primary>
31 </indexterm>
32
33 <sect2 role="package">
34 <title>Introduction to JS</title>
35
36 <para>
37 <application>JS</application> (also referred as
38 <application>SpiderMonkey</application>) is Mozilla's JavaScript and
39 WebAssembly Engine, written in C++ and Rust.
40 In BLFS, the source code of JS is taken from Firefox.
41 </para>
42
43 <!-- To editors: make sure polkit work with mozjs before
44 tagging mozjs. -->
45 &lfs113_checked;
46
47 <bridgehead renderas="sect3">Package Information</bridgehead>
48 <itemizedlist spacing="compact">
49 <listitem>
50 <para>
51 Download (HTTP): <ulink url="&js102-download-http;"/>
52 </para>
53 </listitem>
54 <listitem>
55 <para>
56 Download (FTP): <ulink url="&js102-download-ftp;"/>
57 </para>
58 </listitem>
59 <listitem>
60 <para>
61 Download MD5 sum: &js102-md5sum;
62 </para>
63 </listitem>
64 <listitem>
65 <para>
66 Download size: &js102-size;
67 </para>
68 </listitem>
69 <listitem>
70 <para>
71 Estimated disk space required: &js102-buildsize;
72 </para>
73 </listitem>
74 <listitem>
75 <para>
76 Estimated build time: &js102-time;
77 </para>
78 </listitem>
79 </itemizedlist>
80<!--
81 <bridgehead renderas="sect3">Additional Downloads</bridgehead>
82 <itemizedlist spacing="compact">
83 <listitem>
84 <para>
85 Required patch:
86 <ulink url="&patch-root;/js-&JS91-version;-python_3_10-1.patch"/>
87 </para>
88 </listitem>
89 </itemizedlist>
90-->
91 <bridgehead renderas="sect3">JS102 Dependencies</bridgehead>
92
93 <bridgehead renderas="sect4">Required</bridgehead>
94 <para role="required">
95 <xref linkend="icu"/>,
96 <xref linkend="rust"/>, and
97 <xref linkend="which"/>
98 </para>
99
100 <bridgehead renderas="sect4">Recommended</bridgehead>
101 <para role="recommended">
102 <!-- If clang is installed, it will be used instead of gcc.
103 gcc does not work for 32-bit system w/o -msse2 -mfpmath=sse:
104 https://bugzilla.mozilla.org/show_bug.cgi?id=1729459 -->
105 <xref linkend="llvm"/> (with <application>Clang</application>,
106 required for 32-bit systems without SSE2 capabilities)
107 </para>
108
109 <!-- It seems nasm is only used for aarch64-win64. -->
110 <!--bridgehead renderas="sect4">Optional</bridgehead>
111 <para role="optional">
112 <xref linkend="nasm"/>
113 </para-->
114
115 </sect2>
116
117 <sect2 role="installation">
118 <title>Installation of JS</title>
119
120 <note>
121 <para>
122 Unlike most other packages in BLFS, the instructions below require you
123 to untar <filename>firefox-&JS102-version;esr.tar.xz</filename> and
124 change into the <filename>firefox-&JS102-version;</filename> folder.
125 </para>
126
127 <para>
128 Extracting the tarball
129 will reset the permissions of the current directory to 0755 if you
130 have permission to do that. If you do this in a directory where
131 the sticky bit is set, such
132 as <filename class="directory">/tmp</filename> it will end with error
133 messages:
134 </para>
135
136<literallayout>tar: .: Cannot utime: Operation not permitted
137tar: .: Cannot change mode to rwxr-xr-t: Operation not permitted
138tar: Exiting with failure status due to previous errors
139</literallayout>
140
141 <para>
142 This does finish with non-zero status, but it does
143 <emphasis>NOT</emphasis> mean there is a real problem.
144 Do not untar as the <systemitem class="username">root</systemitem> user
145 in a directory where the sticky bit is set - that will unset it.
146 </para>
147
148 </note>
149<!-- not needed when using clang. Upstream bug at
150 https://bugzilla.mozilla.org/show_bug.cgi?id=1729459.
151 07-21-2023: Issue has resurfaced again when using the default build
152 instructions for JS (which uses GCC). The problem is not present
153 in Firefox 115 though (which works OK on i686). -renodr
154
155
156 <para>
157 If building on a 32 bit machine, the following sed works around an issue
158 with an incompatible <quote>double</quote> type in one header file:
159 </para>
160
161<screen><userinput>case "$(uname -m)" in
162 i?86) sed -e 's/typedef double/typedef long double/' \
163 -i modules/fdlibm/src/math_private.h ;;
164esac</userinput></screen>
165-->
166
167 <para>
168 Install <application>JS</application> by running the following
169 commands:
170 </para>
171
172 <note>
173 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
174 href="../../xincludes/mozshm.xml"/>
175
176 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
177 href="../../xincludes/mozconfigure.xml"/>
178
179 <para>
180 Compiling the C++ code respects $MAKEFLAGS and defaults to 'j1',
181 the rust code will use all processors.
182 </para>
183 </note>
184
185<screen><userinput>mkdir obj &amp;&amp;
186cd obj &amp;&amp;
187
188sh ../js/src/configure.in --prefix=/usr \
189 --with-intl-api \
190 --with-system-zlib \
191 --with-system-icu \
192 --disable-jemalloc \
193 --disable-debug-symbols \
194 --enable-readline &amp;&amp;
195make</userinput></screen>
196
197 <para>
198 To run the JS test suite, issue:
199 <command>make -C js/src check-jstests
200 JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled"</command>.
201 It's recommended to redirect the output into a log.
202 <!-- recheck when ICU gets upgraded -->
203 <!-- Still true with 102 -renodr -->
204 Because we are building with system ICU, more than one hundred tests
205 (out of a total of more than 50,000) are known to fail.
206 </para>
207 <para>
208 To run the JIT test suite, issue:
209 <command>make -C js/src check-jit-test
210 JITTEST_EXTRA_ARGS="--timeout 300"</command>.
211 </para>
212
213 <caution>
214 <para>
215 An issue in the installation process causes any running program which
216 links to JS102 shared library (for example, GNOME Shell) to crash if
217 JS102 is upgraded or reinstalled. To work around this issue, remove
218 the old version of the JS102 shared library before installation:
219 </para>
220
221<screen role="root"><userinput>rm -fv /usr/lib/libmozjs-102.so</userinput></screen>
222 </caution>
223
224 <para>
225 Now, as the <systemitem class="username">root</systemitem> user:
226 </para>
227
228<screen role="root"><userinput>make install &amp;&amp;
229rm -v /usr/lib/libjs_static.ajs &amp;&amp;
230sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js102-config</userinput></screen>
231
232 </sect2>
233
234 <sect2 role="commands">
235 <title>Command Explanations</title>
236
237 <para>
238 <command>sh ../js/src/configure.in</command>:
239 <filename>configure.in</filename> is actually a shell script, but
240 the executable bit is not set in its permission mode so it's needed
241 to explicitly run it with <command>sh</command>.
242 </para>
243
244 <para>
245 <parameter>--with-intl-api</parameter>: This enables the
246 internationalization functions required by
247 <application>Gjs</application>.
248 </para>
249
250 <para>
251 <parameter>--with-system-*</parameter>: These parameters allow the build system
252 to use system versions of the above libraries. These are required for
253 stability.
254 </para>
255
256 <para>
257 <parameter>--enable-readline</parameter>: This switch enables Readline
258 support in the JS shell.
259 </para>
260
261 <para>
262 <parameter>--disable-jemalloc</parameter>: This switch disables the
263 internal memory allocator used in JS102. jemalloc is only intended for
264 the Firefox browser environment. For other applications using JS102,
265 the application may crash as items allocated in the jemalloc allocator
266 are freed on the system (glibc) allocator.
267 </para>
268
269 <para>
270 <parameter>--disable-debug-symbols</parameter>: Don't generate debug
271 symbols since they are very large and most users won't need it. Remove
272 it if you want to debug JS102.
273 </para>
274
275 <para>
276 <command>rm -v /usr/lib/libjs_static.ajs</command>: Remove a large
277 static library which is not used by any BLFS package.
278 </para>
279
280 <para>
281 <command>sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js102-config</command>:
282 Prevent <command>js102-config</command> from using buggy CFLAGS.
283 </para>
284
285 <para>
286 <option><envar>CC=gcc CXX=g++</envar></option>: BLFS used to
287 prefer to use gcc and g++ instead of upstream's defaults of the
288 <application>clang</application> programs. With the release of
289 gcc-12 the build takes longer with gcc and g++, primarily because
290 of extra warnings, and is bigger. Pass these environment variables
291 to the configure script if you wish to continue to use gcc, g++
292 (by exporting them and unset them after the installation, or simply
293 prepending them before the
294 <command>sh ../js/src/configure.in</command> command). If you are
295 building on a 32-bit system, also see below.
296 </para>
297
298 <para>
299 <option><envar>CXXFLAGS="-msse2 -mfpmath=sse"</envar></option>:
300 Use SSE2 instead of 387 for double-precision floating-point
301 operations. It's needed by GCC to satisfy the expectations of
302 upstream (Mozilla) developers with floating-point arithmetic.
303 Use it if you are building this package on a 32-bit system with
304 GCC (if Clang is not installed or GCC is explicitly specified).
305 Note that this will cause JS to crash on a processor without SSE2
306 capability. If you are running the system on such an old processor,
307 Clang is strictly needed. This setting is not needed on 64-bit
308 systems because all 64-bit x86 processors support SSE2 and the 64-bit
309 compilers (both Clang and GCC) use SSE2 by default.
310 </para>
311 </sect2>
312
313 <sect2 role="content">
314 <title>Contents</title>
315
316 <segmentedlist>
317 <segtitle>Installed Programs</segtitle>
318 <segtitle>Installed Libraries</segtitle>
319 <segtitle>Installed Directories</segtitle>
320
321 <seglistitem>
322 <seg>
323 js102 and js102-config
324 </seg>
325 <seg>
326 libmozjs-102.so
327 </seg>
328 <seg>
329 /usr/include/mozjs-102
330 </seg>
331 </seglistitem>
332 </segmentedlist>
333
334 <variablelist>
335 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
336 <?dbfo list-presentation="list"?>
337 <?dbhtml list-presentation="table"?>
338
339 <varlistentry id="js102-js102">
340 <term><command>js102</command></term>
341 <listitem>
342 <para>
343 provides a command line interface to the
344 <application>JavaScript</application> engine
345 </para>
346 <indexterm zone="js102 js102">
347 <primary sortas="b-js102">js102</primary>
348 </indexterm>
349 </listitem>
350 </varlistentry>
351
352 <varlistentry id="js102-config">
353 <term><command>js102-config</command></term>
354 <listitem>
355 <para>
356 is used to find the JS compiler and linker flags
357 </para>
358 <indexterm zone="js102 js102-config">
359 <primary sortas="b-js102-config">js102-config</primary>
360 </indexterm>
361 </listitem>
362 </varlistentry>
363
364 <varlistentry id="libmozjs-102">
365 <term><filename class="libraryfile">libmozjs-102.so</filename></term>
366 <listitem>
367 <para>
368 contains the Mozilla JavaScript API functions
369 </para>
370 <indexterm zone="js102 libmozjs-102">
371 <primary sortas="c-libmozjs102">libmozjs-102.so</primary>
372 </indexterm>
373 </listitem>
374 </varlistentry>
375 </variablelist>
376 </sect2>
377
378</sect1>
Note: See TracBrowser for help on using the repository browser.