aboutsummaryrefslogtreecommitdiff
path: root/www/firefox/files/patch-bug1749604
blob: a0195b8d00c9e6149b391ca041fd579affa916c3 (plain) (blame)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
https://bugzilla.mozilla.org/show_bug.cgi?id=1749604
https://hg.mozilla.org/mozilla-central/rev/f6031b5927f5
https://hg.mozilla.org/mozilla-central/rev/c7440a6eb545
https://github.com/mozilla/gecko-dev/commit/e6f459cd77e3
(Avoid ~13 GB clone of moz-libwebrtc for libwebrtc regen)
(To be dropped for 98)

Updated README.md to reflect simplified setup for generation.
Updated generate-gn-build-files.sh:
  - remove dependencies on MOZ_LIBWEBRTC environment variable
  - add checking for GN environment variable
---

diff --git a/dom/media/webrtc/third_party_build/gn-configs/README.md b/dom/media/webrtc/third_party_build/gn-configs/README.md
index bc54ba183d016..09dea1ae87833 100644
--- dom/media/webrtc/third_party_build/gn-configs/README.md
+++ dom/media/webrtc/third_party_build/gn-configs/README.md
@@ -1,9 +1,10 @@
 # Generate new gn json files and moz.build files for building libwebrtc in our tree
 
-1. If generating on macOS for Apple Silicon (cross-compiling), make sure to have at least
-[Xcode 12.2](https://download.developer.apple.com/Developer_Tools/Xcode_12.2/Xcode_12.2.xip).
+1. If generating on macOS for Apple Silicon (cross-compiling), make sure to have
+   at least [Xcode 12.2](https://download.developer.apple.com/Developer_Tools/Xcode_12.2/Xcode_12.2.xip).
 
-   In addition the aarch64 Rust target will need to be installed via: `rustup target add aarch64-apple-darwin`
+   The aarch64 Rust target will need to be installed via:
+   `rustup target add aarch64-apple-darwin`
 
 2. If generating on Windows 10, Visual Studio 2019 is required.  Please follow
    the install instructions from [here](https://firefox-source-docs.mozilla.org/setup/windows_build.html)
@@ -14,86 +15,85 @@
    - MSVC v142 - VS2019 C++ ARM64 build tools
 
    "Debugging Tools for Windows" is also required.
-   - Under `Settings -> Apps` search for "Windows Software Development Kit" with the version
-   number 10.0.19041.685.
+   - Under `Settings -> Apps` search for "Windows Software Development Kit" with
+     the version number 10.0.19041.685.
    - select Modify (and allow the installer to modify)
    - select Change and then click Next
    - select "Debugging Tools for Windows" and then click Change.
 
-   And the aarch64 Rust target will need to be installed via: `rustup target add aarch64-pc-windows-msvc`
+   The aarch64 Rust target will need to be installed via:
+   `rustup target add aarch64-pc-windows-msvc`
 
-3. See information in `third_party/libwebrtc/README.mozilla` for the proper revision of libwebrtc
+3. See information in `third_party/libwebrtc/README.mozilla` for the proper
+   revision of libwebrtc
 
         libwebrtc updated from commit https://github.com/mozilla/libwebrtc/archive/149d693483e9055f574d9d65b01fe75a186b654b.tar.gz on 2020-11-30T15:48:48.472088.
         third_party updated from commit https://chromium.googlesource.com/chromium/src/third_party/+archive/5dc5a4a45df9592baa8e8c5f896006d9193d8e45.tar.gz on 2020-11-30T17:00:15.612630.
 
-   In our current case, the revision is `149d693483e9055f574d9d65b01fe75a186b654b` which
-   corresponds to:
+   In our current case, the revision is `149d693483e9055f574d9d65b01fe75a186b654b`
+   which corresponds to:
 
         mozilla-modifications-rel86
 
-4. Clone Mozilla's version of libwebrtc from [libwebrtc](https://github.com/mozilla/libwebrtc)
+   This commit was made on `Thu Nov 19 14:14:00 2020`.
 
-        git clone https://github.com/mozilla/libwebrtc moz-libwebrtc
-        export MOZ_LIBWEBRTC=`pwd`/moz-libwebrtc
-        (cd moz-libwebrtc ; git checkout mozilla-modifications-rel86)
+4. Download a version of the `gn` executable that corresponds to
+    `Thu Nov 19 14:14:00 2020`.  In our case, that is version `1889 (8fe02009)`.
+   
+   - [Win](https://chrome-infra-packages.appspot.com/p/gn/gn/windows-amd64/+/e_UmTHedzuu4zJ2gdpW8jrFFNnzIhThljx3jn3RMlVsC)
+   - [Linux](https://chrome-infra-packages.appspot.com/p/gn/gn/linux-amd64/+/bvBFKgehaepiKy_YhFnbiOpF38CK26N2OyE1R1jXof0C)
+   - [macOS](https://chrome-infra-packages.appspot.com/p/gn/gn/mac-amd64/+/nXvMRpyJhLhisAcnRmU5s9UZqovzMAhKAvWjax-swioC)
 
-   Note that branch was made on `Thu Nov 19 14:14:00 2020`
+   Find the downloaded `.zip` file, unzip and export the location of the
+   executable:
 
-5. Clone `depot_tools` from [depot_tools](https://chromium.googlesource.com/chromium/tools/depot_tools.git)
+        unzip gn-mac-amd64.zip && export GN=`pwd`/gn
+        unzip gn-windows-amd64.zip && export GN=`pwd`/gn.exe
+        unzip gn-linux-amd64.zip && export GN=`pwd`/gn
 
-        git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
-        export DEPOT_TOOLS=`pwd`/depot_tools
+   On platforms that don't have pre-built `gn` executables, `ninja` and `gn` can
+   be easily built:
 
-   If generating files on Windows, the following steps must be completed
-   from a traditional Windows Cmd prompt (cmd.exe) launched from the start
-   menu or search bar.  This allows `gclient` to properly bootstrap the
-   required python setup.
+        git clone https://github.com/ninja-build/ninja.git
+        git clone https://gn.googlesource.com/gn
+        (cd gn && git checkout 8fe02009)
+        (cd ninja && ./configure.py --bootstrap)
+        (export NINJA=`pwd`/ninja/ninja ; cd gn && python build/gen.py && $NINJA -C out)
+        export GN=`pwd`/gn/out/gn
 
-        cd {depot_tools directory}
-        set PATH=%CD%;%PATH%
-        set DEPOT_TOOLS_WIN_TOOLCHAIN=0
-        set vs2019_install="c:\Program Files (x86)\Microsoft Visual Studio\2019\Community"
-        gclient
-        exit
+   On OpenBSD, a slightly newer version of `gn` is needed in order to build:
 
-   Now, we need to checkout a revision of `depot_tools` that corresponds to the date of
-   our libwebrtc branch.  The closest `depot_tools` commit to `Thu Nov 19 14:14:00 2020` is
-   `e7d1862b155ac3ccbef72c4d70629b5c88ffcb32`.  There is additional information on how to
-   more automatically determine this [here](https://chromium.googlesource.com/chromium/src/+/master/docs/building_old_revisions.md).
+        (cd gn && git checkout 31f2bba8)
 
-        (cd depot_tools ; git checkout e7d1862b155ac3ccbef72c4d70629b5c88ffcb32 )
+5. Clone `depot_tools` from [depot_tools](https://chromium.googlesource.com/chromium/tools/depot_tools.git)
 
-6. It is necessary to let `depot_tools` pull information into the `libwebrtc` tree as well.  This can take a while.
+        git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
+        export DEPOT_TOOLS=`pwd`/depot_tools
 
-        (cd moz-libwebrtc ; \
-         export PATH=$DEPOT_TOOLS:$PATH ; \
-         export DEPOT_TOOLS_UPDATE=0 ; \
-         export DEPOT_TOOLS_WIN_TOOLCHAIN=0 ; \
-         gclient config https://github.com/mozilla/libwebrtc && \
-         gclient sync -D --force --reset --with_branch_heads \
-        )
-  
-    Note that if one uses `gclient` sync with a different output directory `$MOZ_LIBWEBRTC_GIT`
-    must be set to the original clone directory, and `$MOZ_LIBWEBRTC` needs to be set to the
-    directory created by `gclient sync`.
+   Now, we need to checkout a revision of `depot_tools` that corresponds to the
+   date of our libwebrtc branch.  The closest `depot_tools` commit to
+   `Thu Nov 19 14:14:00 2020` is `e7d1862b155ac3ccbef72c4d70629b5c88ffcb32`.
+   There is additional information on how to more automatically determine this
+   [here](https://chromium.googlesource.com/chromium/src/+/master/docs/building_old_revisions.md).
+
+        (cd depot_tools ; git checkout e7d1862b155ac3ccbef72c4d70629b5c88ffcb32 )
 
-7. Now it is time to generate the build files.  The script should be run from the top
-directory of our firefox tree.
+6. It is time to generate the build files.  The script should be run from the
+   top directory of our firefox tree.
 
-        ./dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
+        bash ./dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
 
-   Debugging the generate script itself may prove useful, and one can do this by setting the DEBUG_GEN environment
-   variable to a non-empty value. This will print everything that the script executes.
+   Debugging the generate script itself may prove useful, and one can do this by
+   setting the DEBUG_GEN environment variable to a non-empty value. This will 
+   print everything that the script executes.
 
-8. Checkin all the generated/modified files and try your build!
+7. Checkin all the generated/modified files and try your build!
 
 # Adding new configurations to the build
 
-- Each new platform/architecture will require 2 new mozconfig files,
-  one for the debug build and one for the non-debug build.  The
-  filenames follow the same pattern as the generated json files,
-  `a-b-c-d.mozconfig` where:
+- Each new platform/architecture will require 2 new mozconfig files, one for the
+  debug build and one for the non-debug build.  The filenames follow the same
+  pattern as the generated json files, `a-b-c-d.mozconfig` where:
   - a = generating cpu (example: x64)
   - b = debug (True / False)
   - c = target cpu (example: x64 / arm64)
@@ -103,9 +103,9 @@ directory of our firefox tree.
 - The new configs must be added to the appropriate platform section in
   `generate-gn-build-files.sh`.
 
-**Note:** when adding new mozconfig files, especially for linux/android
-configs, it is important to include the `ac_add_options
---enable-bootstrap`.  This ensures switching archtectures for
-"cross-compiled" generation works properly.  For example, when generating
-`x86` or `arm64` linux json files, it would be necessary to install additional
-libraries in order for the configure step to complete.
+**Note:** when adding new mozconfig files, especially for linux/android configs,
+it is important to include the `ac_add_options --enable-bootstrap`.  This
+ensures switching archtectures for "cross-compiled" generation works properly.
+For example, when generating `x86` or `arm64` linux json files, it would be
+necessary to install additional libraries in order for the configure step to
+complete.
diff --git a/dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh b/dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
index 4452b0ce76aeb..8d1acbf783514 100755
--- dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
+++ dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
@@ -8,33 +8,15 @@ if [ ! "x$DEBUG_GEN" = "x" ]; then
   set -x
 fi
 
-if [ "x$MOZ_LIBWEBRTC" = "x" ]; then
-  echo "MOZ_LIBWEBRTC is not defined, see README.md"
+if [ "x$GN" = "x" ]; then
+  echo "GN is not defined, see README.md"
   exit
 fi
 
-if [ -d $MOZ_LIBWEBRTC ]; then
-  echo "MOZ_LIBWEBRTC is $MOZ_LIBWEBRTC"
+if [ -f $GN ]; then
+  echo "GN is $GN"
 else
-  echo "Path $MOZ_LIBWEBRTC is not found, see README.md"
-  exit
-fi
-
-# git clone and gclient checkout may be in different places 
-if [ "x$MOZ_LIBWEBRTC_GIT" = "x" ]; then
-  MOZ_LIBWEBRTC_GIT=$MOZ_LIBWEBRTC
-fi
-
-if [ ! -d $MOZ_LIBWEBRTC_GIT/.git ]; then
-  echo "No .git directory is found in the libwebrtc checkout, see README.md"
-  exit
-fi
-
-if [ ! -d $MOZ_LIBWEBRTC/src/buildtools ]; then
-  echo "Path $MOZ_LIBWEBRTC/src/buildtools is not found, see README.md"
-  echo "Please run the following commands from inside $MOZ_LIBWEBRTC:"
-  echo "\tgclient config https://github.com/mozilla/libwebrtc"
-  echo "\tgclient sync -D --force --reset --with_branch_heads # this make take a while"
+  echo "Path $GN is not found, see README.md"
   exit
 fi
 
@@ -115,21 +97,6 @@ fi
 export PATH=$DEPOT_TOOLS:$PATH
 export DEPOT_TOOLS_UPDATE=0
 
-# Symlink in the buildtools and .git directories from our copy of libwebrtc.
-if [ -L ./third_party/libwebrtc/buildtools ]; then
-  rm ./third_party/libwebrtc/buildtools
-elif [ -d ./third_party/libwebrtc/buildtools ]; then
-  rm -rf ./third_party/libwebrtc/buildtools
-fi
-ln -s $MOZ_LIBWEBRTC/src/buildtools ./third_party/libwebrtc/
-
-if [ -L ./third_party/libwebrtc/.git ]; then
-  rm ./third_party/libwebrtc/.git
-elif [ -d ./third_party/libwebrtc/.git ]; then
-  rm -rf ./third_party/libwebrtc/.git
-fi
-ln -s $MOZ_LIBWEBRTC_GIT/.git ./third_party/libwebrtc/
-
 CONFIG_DIR=dom/media/webrtc/third_party_build/gn-configs
 echo "CONFIG_DIR is $CONFIG_DIR"