Skip to content

Commit

Permalink
Separate Node and Web Binaries (facebook#1325)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: facebook#1325

Fixes facebook#1321

Differential Revision: https://internalfb.com/D47368830

fbshipit-source-id: 889c904c062567f4166a735165bbb33e72180b61
  • Loading branch information
NickGerleman authored and facebook-github-bot committed Jul 12, 2023
1 parent 7097b12 commit 7032679
Show file tree
Hide file tree
Showing 11 changed files with 191 additions and 44 deletions.
49 changes: 44 additions & 5 deletions javascript/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ add_link_options(
"SHELL:-s ALLOW_MEMORY_GROWTH=1"
"SHELL:-s ASSERTIONS=0"
"SHELL:-s DYNAMIC_EXECUTION=0"
"SHELL:-s ENVIRONMENT='web,node'"
"SHELL:-s EXPORT_NAME='loadYoga'"
"SHELL:-s FETCH_SUPPORT_INDEXEDDB=0"
"SHELL:-s FILESYSTEM=0"
Expand All @@ -51,24 +50,64 @@ add_library(yogaObjLib OBJECT ${SOURCES})

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/binaries)

add_executable(asmjs-sync-node $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(asmjs-sync-node PUBLIC
"SHELL:-s ENVIRONMENT='node'"
"SHELL:-s WASM=0"
"SHELL:-s WASM_ASYNC_COMPILATION=0")

add_executable(asmjs-async-node $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(asmjs-async-node PUBLIC
"SHELL:-s ENVIRONMENT='node'"
"SHELL:-s WASM=0"
"SHELL:-s WASM_ASYNC_COMPILATION=1")

add_executable(asmjs-sync-web $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(asmjs-sync-web PUBLIC
"SHELL:-s ENVIRONMENT='web'"
"SHELL:-s WASM=0"
"SHELL:-s WASM_ASYNC_COMPILATION=0")

add_executable(asmjs-async-web $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(asmjs-async-web PUBLIC
"SHELL:-s ENVIRONMENT='web'"
"SHELL:-s WASM=0"
"SHELL:-s WASM_ASYNC_COMPILATION=1")

add_executable(asmjs-sync $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(asmjs-sync PUBLIC
"SHELL:-s ENVIRONMENT='web,node'"
"SHELL:-s WASM=0"
"SHELL:-s WASM_ASYNC_COMPILATION=0")

add_executable(asmjs-async $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(asmjs-async PUBLIC
"SHELL:-s ENVIRONMENT='web,node'"
"SHELL:-s WASM=0"
"SHELL:-s WASM_ASYNC_COMPILATION=1")

add_executable(wasm-sync $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(wasm-sync PUBLIC
add_executable(wasm-sync-node $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(wasm-sync-node PUBLIC
"SHELL:-s ENVIRONMENT='node'"
"SHELL:-s WASM=1"
"SHELL:-s WASM_ASYNC_COMPILATION=0")

add_executable(wasm-async-node $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(wasm-async-node PUBLIC
"SHELL:-s ENVIRONMENT='node'"
"SHELL:-s WASM=1"
"SHELL:-s WASM_ASYNC_COMPILATION=1")

add_executable(wasm-sync-web $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(wasm-sync-web PUBLIC
"SHELL:-s ENVIRONMENT='web'"
"SHELL:-s WASM=1"
"SHELL:-s SINGLE_FILE=1"
"SHELL:-s WASM_ASYNC_COMPILATION=0")

add_executable(wasm-async $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(wasm-async PUBLIC
add_executable(wasm-async-web $<TARGET_OBJECTS:yogaObjLib>)
target_link_options(wasm-async-web PUBLIC
"SHELL:-s ENVIRONMENT='web'"
"SHELL:-s WASM=1"
"SHELL:-s SINGLE_FILE=1"
"SHELL:-s WASM_ASYNC_COMPILATION=1")
38 changes: 18 additions & 20 deletions javascript/just.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,37 +45,35 @@ function defineFlavor(flavor: string, env: NodeJS.ProcessEnv) {
);
}

defineFlavor('asmjs-async', {WASM: '0', SYNC: '0'});
defineFlavor('asmjs-sync', {WASM: '0', SYNC: '1'});
defineFlavor('wasm-async', {WASM: '1', SYNC: '0'});
defineFlavor('wasm-sync', {WASM: '1', SYNC: '1'});
defineFlavor('asmjs-async-node', {WASM: '0', SYNC: '0'});
defineFlavor('asmjs-sync-node', {WASM: '0', SYNC: '1'});
defineFlavor('asmjs-async-web', {WASM: '0', SYNC: '0'});
defineFlavor('asmjs-sync-web', {WASM: '0', SYNC: '1'});
defineFlavor('wasm-async-node', {WASM: '1', SYNC: '0'});
defineFlavor('wasm-sync-node', {WASM: '1', SYNC: '1'});
defineFlavor('wasm-async-web', {WASM: '1', SYNC: '0'});
defineFlavor('wasm-sync-web', {WASM: '1', SYNC: '1'});

task('cmake-build:all', cmakeBuildTask());
task(
'cmake-build:async',
cmakeBuildTask({targets: ['asmjs-async', 'wasm-async']}),
);
task(
'cmake-build:sync',
cmakeBuildTask({targets: ['asmjs-sync', 'wasm-sync']}),
);

task('build', series(emcmakeGenerateTask(), 'cmake-build:all'));
task('build', series(emcmakeGenerateTask(), cmakeBuildTask()));

task(
'test',
series(
emcmakeGenerateTask(),
series('cmake-build:asmjs-async', 'jest:asmjs-async'),
series('cmake-build:asmjs-sync', 'jest:asmjs-sync'),
series('cmake-build:wasm-async', 'jest:wasm-async'),
series('cmake-build:wasm-sync', 'jest:wasm-sync'),
series('cmake-build:asmjs-async-node', 'jest:asmjs-async-node'),
series('cmake-build:asmjs-sync-node', 'jest:asmjs-sync-node'),
series('cmake-build:wasm-async-node', 'jest:wasm-async-node'),
series('cmake-build:wasm-sync-node', 'jest:wasm-sync-node'),
),
);

task(
'benchmark',
series(emcmakeGenerateTask(), 'cmake-build:sync', runBenchTask()),
series(
emcmakeGenerateTask(),
cmakeBuildTask({targets: ['asmjs-sync-node', 'wasm-sync-node']}),
runBenchTask(),
),
);

task(
Expand Down
42 changes: 27 additions & 15 deletions javascript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,35 @@
},
"exports": {
".": {
"browser": "./src/entrypoint/wasm-async.ts",
"node": "./src/entrypoint/wasm-async.ts",
"default": "./src/entrypoint/asmjs-async.ts"
"browser": "./src/entrypoint/wasm-async-web.ts",
"node": "./src/entrypoint/wasm-async-node.ts",
"default": "./src/entrypoint/asmjs-async-web.ts"
},
"./sync": {
"browser": "./src/entrypoint/asmjs-sync.ts",
"node": "./src/entrypoint/wasm-sync.ts",
"default": "./src/entrypoint/asmjs-sync.ts"
"browser": "./src/entrypoint/asmjs-sync-web.ts",
"node": "./src/entrypoint/wasm-sync-node.ts",
"default": "./src/entrypoint/asmjs-sync-web.ts"
},
"./asmjs-async": "./src/entrypoint/asmjs-async.ts",
"./asmjs-sync": "./src/entrypoint/asmjs-sync.ts",
"./wasm-async": "./src/entrypoint/wasm-async.ts",
"./wasm-sync": "./src/entrypoint/wasm-sync.ts"
"./asmjs-async": {
"browser": "./src/entrypoint/asmjs-async-web.ts",
"node": "./src/entrypoint/asmjs-async-node.ts",
"default": "./src/entrypoint/asmjs-async-web.ts"
},
"./asmjs-sync": {
"browser": "./src/entrypoint/asmjs-sync-web.ts",
"node": "./src/entrypoint/asmjs-sync-node.ts",
"default": "./src/entrypoint/asmjs-sync-web.ts"
},
"./wasm-async": {
"browser": "./src/entrypoint/wasm-async-web.ts",
"node": "./src/entrypoint/wasm-async-node.ts",
"default": "./src/entrypoint/wasm-async-web.ts"
},
"./wasm-sync": {
"browser": "./src/entrypoint/wasm-sync-web.ts",
"node": "./src/entrypoint/wasm-sync-node.ts",
"default": "./src/entrypoint/wasm-async-web.ts"
}
},
"files": [
"binaries/**",
Expand All @@ -36,11 +52,7 @@
"lint": "just lint",
"lint:fix": "just lint --fix",
"prepack": "just prepack",
"test": "just test",
"test:asmjs-async": "just test:asmjs-async",
"test:asmjs-sync": "just test:asmjs-sync",
"test:wasm-async": "just test:wasm-async",
"test:wasm-sync": "just test:wasm-sync"
"test": "just test"
},
"devDependencies": {
"@babel/cli": "^7.20.7",
Expand Down
26 changes: 26 additions & 0 deletions javascript/src/entrypoint/asmjs-async-node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

import wrapAssembly from '../wrapAssembly';
import type {Yoga} from '../wrapAssembly';

export * from '../generated/YGEnums';
export type {
Config,
DirtiedFunction,
MeasureFunction,
Node,
Yoga,
} from '../wrapAssembly';

const loadAssembly = require('../../binaries/asmjs-async-node');

export async function loadYoga(): Promise<Yoga> {
return wrapAssembly(await loadAssembly());
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export type {
Yoga,
} from '../wrapAssembly';

const loadAssembly = require('../../binaries/wasm-async');
const loadAssembly = require('../../binaries/asmjs-async-web');

export async function loadYoga(): Promise<Yoga> {
return wrapAssembly(await loadAssembly());
Expand Down
23 changes: 23 additions & 0 deletions javascript/src/entrypoint/asmjs-sync-node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

import wrapAssembly from '../wrapAssembly';

export * from '../generated/YGEnums';
export type {
Config,
DirtiedFunction,
MeasureFunction,
Node,
Yoga,
} from '../wrapAssembly';

const loadAssembly = require('../../binaries/asmjs-sync-node');
const Yoga = wrapAssembly(loadAssembly());
export default Yoga;
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ export type {
Yoga,
} from '../wrapAssembly';

const loadAssembly = require('../../binaries/wasm-sync');
const loadAssembly = require('../../binaries/asmjs-sync-web');
const Yoga = wrapAssembly(loadAssembly());
export default Yoga;
26 changes: 26 additions & 0 deletions javascript/src/entrypoint/wasm-async-node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

import wrapAssembly from '../wrapAssembly';
import type {Yoga} from '../wrapAssembly';

export * from '../generated/YGEnums';
export type {
Config,
DirtiedFunction,
MeasureFunction,
Node,
Yoga,
} from '../wrapAssembly';

const loadAssembly = require('../../binaries/wasm-async-node');

export async function loadYoga(): Promise<Yoga> {
return wrapAssembly(await loadAssembly());
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export type {
Yoga,
} from '../wrapAssembly';

const loadAssembly = require('../../binaries/asmjs-async');
const loadAssembly = require('../../binaries/wasm-async-web');

export async function loadYoga(): Promise<Yoga> {
return wrapAssembly(await loadAssembly());
Expand Down
23 changes: 23 additions & 0 deletions javascript/src/entrypoint/wasm-sync-node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

import wrapAssembly from '../wrapAssembly';

export * from '../generated/YGEnums';
export type {
Config,
DirtiedFunction,
MeasureFunction,
Node,
Yoga,
} from '../wrapAssembly';

const loadAssembly = require('../../binaries/wasm-sync-node');
const Yoga = wrapAssembly(loadAssembly());
export default Yoga;
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ export type {
Yoga,
} from '../wrapAssembly';

const loadAssembly = require('../../binaries/asmjs-sync');
const loadAssembly = require('../../binaries/wasm-sync-web');
const Yoga = wrapAssembly(loadAssembly());
export default Yoga;

0 comments on commit 7032679

Please sign in to comment.