mirror of
https://github.com/pybricks/pybricks-code.git
synced 2026-09-12 01:23:52 +00:00
update to @pybricks/mpy-cross-4 v2
v2 allows us to pass the mpy-cross options from the firmware to the mpy-cross compiler.
This commit is contained in:
+1
-1
@@ -3,7 +3,7 @@
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@pybricks/mpy-cross-4": "^1.0.2",
|
||||
"@pybricks/mpy-cross-4": "^2.0.0",
|
||||
"@testing-library/jest-dom": "^4.2.4",
|
||||
"@testing-library/react": "^9.3.2",
|
||||
"@testing-library/user-event": "^7.1.2",
|
||||
|
||||
+14
-9
@@ -1,8 +1,6 @@
|
||||
import MpyCross from '@pybricks/mpy-cross-4';
|
||||
import { compile as mpyCrossCompile } from '@pybricks/mpy-cross-4';
|
||||
import { Action } from 'redux';
|
||||
|
||||
// this starts the mpy-cross wasm runtime and leaves it running in the background
|
||||
const mpy = MpyCross({ arguments: ['-mno-unicode'] });
|
||||
import { ThunkAction } from 'redux-thunk';
|
||||
|
||||
export enum MpyActionType {
|
||||
Compiled = 'mpy.action.compile',
|
||||
@@ -12,11 +10,18 @@ export interface MpyCompiledAction extends Action<MpyActionType.Compiled> {
|
||||
/**
|
||||
* The compiled .mpy data.
|
||||
*/
|
||||
data: Uint8Array;
|
||||
data?: Uint8Array;
|
||||
/**
|
||||
* Error output.
|
||||
*/
|
||||
err?: string;
|
||||
}
|
||||
|
||||
export function compile(script: string): MpyCompiledAction {
|
||||
// TODO: figure out how to capture stderr and emit error action on failure
|
||||
const data = mpy.compile(script);
|
||||
return { type: MpyActionType.Compiled, data };
|
||||
type MpyCompileAction = ThunkAction<Promise<MpyCompiledAction>, {}, {}, Action>;
|
||||
|
||||
export function compile(script: string, options?: string[]): MpyCompileAction {
|
||||
return async function (): Promise<MpyCompiledAction> {
|
||||
const result = await mpyCrossCompile('main.py', script, options);
|
||||
return { type: MpyActionType.Compiled, data: result.mpy, err: result.err };
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { Ace } from 'ace-builds';
|
||||
import { batch, connect } from 'react-redux';
|
||||
import { connect } from 'react-redux';
|
||||
import { AnyAction } from 'redux';
|
||||
import { ThunkDispatch } from 'redux-thunk';
|
||||
import { downloadAndRun } from '../actions/hub';
|
||||
import { compile } from '../actions/mpy';
|
||||
import * as notification from '../actions/notification';
|
||||
import { RootState } from '../reducers';
|
||||
import { HubRuntimeState } from '../reducers/hub';
|
||||
import ActionButton, { ActionButtonProps } from './ActionButton';
|
||||
@@ -27,11 +28,19 @@ const mapDispatchToProps = (dispatch: Dispatch): DispatchProps => ({
|
||||
console.error('No current editor');
|
||||
return;
|
||||
}
|
||||
batch(() => {
|
||||
const script = c.getValue();
|
||||
const mpy = dispatch(compile(script));
|
||||
dispatch(downloadAndRun(mpy.data));
|
||||
});
|
||||
const script = c.getValue();
|
||||
// TODO: need to get options from hub because they depend on firmware compile options
|
||||
dispatch(compile(script, ['-mno-unicode']))
|
||||
.then((mpy) => {
|
||||
if (mpy.data) {
|
||||
dispatch(downloadAndRun(mpy.data));
|
||||
} else {
|
||||
dispatch(
|
||||
notification.add('error', mpy.err || 'Unknown compiler error.'),
|
||||
);
|
||||
}
|
||||
})
|
||||
.catch((err) => console.error(err));
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
delay,
|
||||
fork,
|
||||
put,
|
||||
putResolve,
|
||||
race,
|
||||
take,
|
||||
takeEvery,
|
||||
@@ -177,7 +178,7 @@ interface FirmwareMetadata {
|
||||
'device-id': HubType;
|
||||
'checksum-type': 'sum' | 'crc32';
|
||||
'mpy-abi-version': number;
|
||||
'mpy-cross-options': Array<string>;
|
||||
'mpy-cross-options': string[];
|
||||
'user-mpy-offset': number;
|
||||
'max-firmware-size': number;
|
||||
}
|
||||
@@ -213,8 +214,13 @@ function* flashFirmware(action: BootloaderFlashFirmwareAction): Generator {
|
||||
);
|
||||
}
|
||||
|
||||
// TODO: pass metadata["mpy-cross-options"] to compiler
|
||||
const mpy = (yield put(compile(main))) as MpyCompiledAction;
|
||||
const mpy = (yield putResolve(
|
||||
(compile(main, metadata['mpy-cross-options']) as unknown) as Action,
|
||||
)) as MpyCompiledAction;
|
||||
|
||||
if (!mpy.data) {
|
||||
throw Error(mpy.err);
|
||||
}
|
||||
|
||||
// compute offset for checksum - must be aligned to 4-byte boundary
|
||||
const checksumOffset =
|
||||
|
||||
@@ -1254,12 +1254,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.4.0.tgz#0e1bdf8d021e7ea58affade33d9d607e11365915"
|
||||
integrity sha512-NMrDy6EWh9TPdSRiHmHH2ye1v5U0gBD7pRYwSwJvomx7Bm4GG04vu63dYiVzebLOx2obPpJugew06xVP0Nk7hA==
|
||||
|
||||
"@pybricks/mpy-cross-4@^1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://npm.pkg.github.com/download/@pybricks/mpy-cross-4/1.0.2/0d1c1c7789469794795680f14930bc66922dbe55caf59b3e58df8cb8c70365df#441d5ff59498d2d5c78adc74d0a70a6575e8c426"
|
||||
integrity sha512-iy6nVtIDRqU2SJ/aGKizfjPIk9PZQSSkOTTI7L7+HNPeF4zY/uhQSOI+ZFFaYSNoxFOrMIu9qn1Jsh3w08HO+A==
|
||||
dependencies:
|
||||
"@types/emscripten" "^1.39.3"
|
||||
"@pybricks/mpy-cross-4@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://npm.pkg.github.com/download/@pybricks/mpy-cross-4/2.0.0/ee1d8da09629b14ea43bc6ac7a685b48fe191404958215e3b267478c6d750aa8#4bdf4c397652ca69ecf7ecb0749d76afc928f39b"
|
||||
integrity sha512-qSUDm8WMCq/ZH0wdWpgnR9fHDBnLsTQ+6CNc1ARX4orD0Wezpp/N34ya45G2RGyy6dFB/YAqYcK/daGhb6Ka8Q==
|
||||
|
||||
"@redux-saga/core@^1.1.3":
|
||||
version "1.1.3"
|
||||
@@ -1506,11 +1504,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
|
||||
integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
|
||||
|
||||
"@types/emscripten@^1.39.3":
|
||||
version "1.39.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.3.tgz#cac2f24b4739c344c42f928a4c1af1aab245364e"
|
||||
integrity sha512-F+LPHVwVWp6bkhRq7sMdW0JsQMXd5ZuPbjwU/X6HaAtvIjRmYL2z4BCIopnBRcrzZLorVFf8gxY/GR7szLuPEw==
|
||||
|
||||
"@types/eslint-visitor-keys@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
|
||||
|
||||
Reference in New Issue
Block a user