Merge pull request #94789 from Faless/web/fix_thread_cc_with_workaround
[Web] Fix closure compiler builds, enable it in CI.
This commit is contained in:
commit
607b230ffe
|
@ -6,7 +6,7 @@ on:
|
||||||
env:
|
env:
|
||||||
# Used for the cache key. Add version suffix to force clean build.
|
# Used for the cache key. Add version suffix to force clean build.
|
||||||
GODOT_BASE_BRANCH: master
|
GODOT_BASE_BRANCH: master
|
||||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no
|
SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no use_closure_compiler=yes
|
||||||
EM_VERSION: 3.1.59
|
EM_VERSION: 3.1.59
|
||||||
EM_CACHE_FOLDER: "emsdk-cache"
|
EM_CACHE_FOLDER: "emsdk-cache"
|
||||||
|
|
||||||
|
|
|
@ -227,6 +227,11 @@ def configure(env: "SConsEnvironment"):
|
||||||
env.Append(LINKFLAGS=["-sDEFAULT_PTHREAD_STACK_SIZE=%sKB" % env["default_pthread_stack_size"]])
|
env.Append(LINKFLAGS=["-sDEFAULT_PTHREAD_STACK_SIZE=%sKB" % env["default_pthread_stack_size"]])
|
||||||
env.Append(LINKFLAGS=["-sPTHREAD_POOL_SIZE=8"])
|
env.Append(LINKFLAGS=["-sPTHREAD_POOL_SIZE=8"])
|
||||||
env.Append(LINKFLAGS=["-sWASM_MEM_MAX=2048MB"])
|
env.Append(LINKFLAGS=["-sWASM_MEM_MAX=2048MB"])
|
||||||
|
if not env["dlink_enabled"]:
|
||||||
|
# Workaround https://github.com/emscripten-core/emscripten/issues/21844#issuecomment-2116936414.
|
||||||
|
# Not needed (and potentially dangerous) when dlink_enabled=yes, since we set EXPORT_ALL=1 in that case.
|
||||||
|
env.Append(LINKFLAGS=["-sEXPORTED_FUNCTIONS=['__emscripten_thread_crashed','_main']"])
|
||||||
|
|
||||||
elif env["proxy_to_pthread"]:
|
elif env["proxy_to_pthread"]:
|
||||||
print_warning('"threads=no" support requires "proxy_to_pthread=no", disabling proxy to pthread.')
|
print_warning('"threads=no" support requires "proxy_to_pthread=no", disabling proxy to pthread.')
|
||||||
env["proxy_to_pthread"] = False
|
env["proxy_to_pthread"] = False
|
||||||
|
|
|
@ -77,7 +77,7 @@ class Sample {
|
||||||
* Creates a `Sample` based on the params. Will register it to the
|
* Creates a `Sample` based on the params. Will register it to the
|
||||||
* `GodotAudio.samples` registry.
|
* `GodotAudio.samples` registry.
|
||||||
* @param {SampleParams} params Base params
|
* @param {SampleParams} params Base params
|
||||||
* @param {SampleOptions} [options={}] Optional params
|
* @param {SampleOptions} [options={{}}] Optional params
|
||||||
* @returns {Sample}
|
* @returns {Sample}
|
||||||
*/
|
*/
|
||||||
static create(params, options = {}) {
|
static create(params, options = {}) {
|
||||||
|
@ -98,8 +98,7 @@ class Sample {
|
||||||
/**
|
/**
|
||||||
* `Sample` constructor.
|
* `Sample` constructor.
|
||||||
* @param {SampleParams} params Base params
|
* @param {SampleParams} params Base params
|
||||||
* @param {SampleOptions} [options={}] Optional params
|
* @param {SampleOptions} [options={{}}] Optional params
|
||||||
* @constructor
|
|
||||||
*/
|
*/
|
||||||
constructor(params, options = {}) {
|
constructor(params, options = {}) {
|
||||||
/** @type {string} */
|
/** @type {string} */
|
||||||
|
@ -154,7 +153,7 @@ class Sample {
|
||||||
if (this._audioBuffer == null) {
|
if (this._audioBuffer == null) {
|
||||||
throw new Error('couldn\'t duplicate a null audioBuffer');
|
throw new Error('couldn\'t duplicate a null audioBuffer');
|
||||||
}
|
}
|
||||||
/** @type {Float32Array[]} */
|
/** @type {Array<Float32Array>} */
|
||||||
const channels = new Array(this._audioBuffer.numberOfChannels);
|
const channels = new Array(this._audioBuffer.numberOfChannels);
|
||||||
for (let i = 0; i < this._audioBuffer.numberOfChannels; i++) {
|
for (let i = 0; i < this._audioBuffer.numberOfChannels; i++) {
|
||||||
const channel = new Float32Array(this._audioBuffer.getChannelData(i));
|
const channel = new Float32Array(this._audioBuffer.getChannelData(i));
|
||||||
|
@ -189,7 +188,6 @@ class SampleNodeBus {
|
||||||
/**
|
/**
|
||||||
* `SampleNodeBus` constructor.
|
* `SampleNodeBus` constructor.
|
||||||
* @param {Bus} bus The bus related to the new `SampleNodeBus`.
|
* @param {Bus} bus The bus related to the new `SampleNodeBus`.
|
||||||
* @constructor
|
|
||||||
*/
|
*/
|
||||||
constructor(bus) {
|
constructor(bus) {
|
||||||
const NUMBER_OF_WEB_CHANNELS = 6;
|
const NUMBER_OF_WEB_CHANNELS = 6;
|
||||||
|
@ -413,8 +411,7 @@ class SampleNode {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {SampleNodeParams} params Base params
|
* @param {SampleNodeParams} params Base params
|
||||||
* @param {SampleNodeOptions} [options={}] Optional params
|
* @param {SampleNodeOptions} [options={{}}] Optional params
|
||||||
* @constructor
|
|
||||||
*/
|
*/
|
||||||
constructor(params, options = {}) {
|
constructor(params, options = {}) {
|
||||||
/** @type {string} */
|
/** @type {string} */
|
||||||
|
@ -441,7 +438,7 @@ class SampleNode {
|
||||||
this._sampleNodeBuses = new Map();
|
this._sampleNodeBuses = new Map();
|
||||||
/** @type {AudioBufferSourceNode | null} */
|
/** @type {AudioBufferSourceNode | null} */
|
||||||
this._source = GodotAudio.ctx.createBufferSource();
|
this._source = GodotAudio.ctx.createBufferSource();
|
||||||
/** @type {AudioBufferSourceNode["onended"]} */
|
|
||||||
this._onended = null;
|
this._onended = null;
|
||||||
|
|
||||||
this.setPlaybackRate(options.playbackRate ?? 44100);
|
this.setPlaybackRate(options.playbackRate ?? 44100);
|
||||||
|
@ -558,7 +555,7 @@ class SampleNode {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the volumes of the `SampleNode` for each buses passed in parameters.
|
* Sets the volumes of the `SampleNode` for each buses passed in parameters.
|
||||||
* @param {Bus[]} buses
|
* @param {Array<Bus>} buses
|
||||||
* @param {Float32Array} volumes
|
* @param {Float32Array} volumes
|
||||||
*/
|
*/
|
||||||
setVolumes(buses, volumes) {
|
setVolumes(buses, volumes) {
|
||||||
|
@ -818,7 +815,6 @@ class Bus {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* `Bus` constructor.
|
* `Bus` constructor.
|
||||||
* @constructor
|
|
||||||
*/
|
*/
|
||||||
constructor() {
|
constructor() {
|
||||||
/** @type {Set<SampleNode>} */
|
/** @type {Set<SampleNode>} */
|
||||||
|
@ -985,7 +981,6 @@ class Bus {
|
||||||
GodotAudio.buses = GodotAudio.buses.filter((v) => v !== this);
|
GodotAudio.buses = GodotAudio.buses.filter((v) => v !== this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @type {Bus["prototype"]["_syncSampleNodes"]} */
|
|
||||||
_syncSampleNodes() {
|
_syncSampleNodes() {
|
||||||
const sampleNodes = Array.from(this._sampleNodes);
|
const sampleNodes = Array.from(this._sampleNodes);
|
||||||
for (let i = 0; i < sampleNodes.length; i++) {
|
for (let i = 0; i < sampleNodes.length; i++) {
|
||||||
|
@ -1086,7 +1081,7 @@ const _GodotAudio = {
|
||||||
// `Bus` class
|
// `Bus` class
|
||||||
/**
|
/**
|
||||||
* Registry of `Bus`es.
|
* Registry of `Bus`es.
|
||||||
* @type {Bus[]}
|
* @type {Array<Bus>}
|
||||||
*/
|
*/
|
||||||
buses: null,
|
buses: null,
|
||||||
/**
|
/**
|
||||||
|
@ -1309,7 +1304,7 @@ const _GodotAudio = {
|
||||||
/**
|
/**
|
||||||
* Triggered when a sample node volumes need to be updated.
|
* Triggered when a sample node volumes need to be updated.
|
||||||
* @param {string} playbackObjectId Id of the sample playback
|
* @param {string} playbackObjectId Id of the sample playback
|
||||||
* @param {number[]} busIndexes Indexes of the buses that need to be updated
|
* @param {Array<number>} busIndexes Indexes of the buses that need to be updated
|
||||||
* @param {Float32Array} volumes Array of the volumes
|
* @param {Float32Array} volumes Array of the volumes
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue