fastled 1.1.39__py2.py3-none-any.whl → 1.1.61__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fastled/__init__.py +2 -5
- fastled/client_server.py +6 -0
- fastled/parse_args.py +172 -172
- fastled/project_init.py +12 -2
- {fastled-1.1.39.dist-info → fastled-1.1.61.dist-info}/METADATA +33 -22
- {fastled-1.1.39.dist-info → fastled-1.1.61.dist-info}/RECORD +10 -10
- {fastled-1.1.39.dist-info → fastled-1.1.61.dist-info}/WHEEL +1 -1
- {fastled-1.1.39.dist-info → fastled-1.1.61.dist-info}/LICENSE +0 -0
- {fastled-1.1.39.dist-info → fastled-1.1.61.dist-info}/entry_points.txt +0 -0
- {fastled-1.1.39.dist-info → fastled-1.1.61.dist-info}/top_level.txt +0 -0
fastled/__init__.py
CHANGED
@@ -9,7 +9,7 @@ from .compile_server import CompileServer
|
|
9
9
|
from .live_client import LiveClient
|
10
10
|
from .types import BuildMode, CompileResult, CompileServerError
|
11
11
|
|
12
|
-
__version__ = "1.1.
|
12
|
+
__version__ = "1.1.61"
|
13
13
|
|
14
14
|
|
15
15
|
class Api:
|
@@ -69,7 +69,6 @@ class Api:
|
|
69
69
|
|
70
70
|
@staticmethod
|
71
71
|
def spawn_server(
|
72
|
-
sketch_directory: Path | None = None,
|
73
72
|
interactive=False,
|
74
73
|
auto_updates=None,
|
75
74
|
auto_start=True,
|
@@ -81,7 +80,7 @@ class Api:
|
|
81
80
|
container_name=container_name,
|
82
81
|
interactive=interactive,
|
83
82
|
auto_updates=auto_updates,
|
84
|
-
mapped_dir=
|
83
|
+
mapped_dir=None,
|
85
84
|
auto_start=auto_start,
|
86
85
|
)
|
87
86
|
return out
|
@@ -89,14 +88,12 @@ class Api:
|
|
89
88
|
@staticmethod
|
90
89
|
@contextmanager
|
91
90
|
def server(
|
92
|
-
sketch_directory: Path | None = None,
|
93
91
|
interactive=False,
|
94
92
|
auto_updates=None,
|
95
93
|
auto_start=True,
|
96
94
|
container_name: str | None = None,
|
97
95
|
) -> Generator[CompileServer, None, None]:
|
98
96
|
server = Api.spawn_server(
|
99
|
-
sketch_directory=sketch_directory,
|
100
97
|
interactive=interactive,
|
101
98
|
auto_updates=auto_updates,
|
102
99
|
auto_start=auto_start,
|
fastled/client_server.py
CHANGED
@@ -22,6 +22,11 @@ from fastled.web_compile import (
|
|
22
22
|
)
|
23
23
|
|
24
24
|
|
25
|
+
# Override this function in your own code to run tests before compilation
|
26
|
+
def TEST_BEFORE_COMPILE(url) -> None:
|
27
|
+
pass
|
28
|
+
|
29
|
+
|
25
30
|
def _run_web_compiler(
|
26
31
|
directory: Path,
|
27
32
|
host: str,
|
@@ -153,6 +158,7 @@ def run_client(
|
|
153
158
|
profile: bool = profile,
|
154
159
|
last_hash_value: str | None = None,
|
155
160
|
) -> CompileResult:
|
161
|
+
TEST_BEFORE_COMPILE(url)
|
156
162
|
return _run_web_compiler(
|
157
163
|
directory,
|
158
164
|
host=url,
|
fastled/parse_args.py
CHANGED
@@ -1,172 +1,172 @@
|
|
1
|
-
import argparse
|
2
|
-
import os
|
3
|
-
import sys
|
4
|
-
from pathlib import Path
|
5
|
-
|
6
|
-
from fastled import __version__
|
7
|
-
from fastled.docker_manager import DockerManager
|
8
|
-
from fastled.project_init import project_init
|
9
|
-
from fastled.select_sketch_directory import select_sketch_directory
|
10
|
-
from fastled.settings import DEFAULT_URL
|
11
|
-
from fastled.sketch import (
|
12
|
-
find_sketch_directories,
|
13
|
-
looks_like_fastled_repo,
|
14
|
-
looks_like_sketch_directory,
|
15
|
-
)
|
16
|
-
|
17
|
-
|
18
|
-
def parse_args() -> argparse.Namespace:
|
19
|
-
"""Parse command-line arguments."""
|
20
|
-
parser = argparse.ArgumentParser(description=f"FastLED WASM Compiler {__version__}")
|
21
|
-
parser.add_argument(
|
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
|
-
build_mode =
|
92
|
-
build_mode.add_argument(
|
93
|
-
|
94
|
-
"
|
95
|
-
|
96
|
-
default
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
args.directory = project_init()
|
109
|
-
print("\nInitialized FastLED project in", args.directory)
|
110
|
-
print(f"Use 'fastled {args.directory}' to compile the project.")
|
111
|
-
sys.exit(0)
|
112
|
-
|
113
|
-
if not args.update:
|
114
|
-
if args.no_auto_updates:
|
115
|
-
args.auto_update = False
|
116
|
-
else:
|
117
|
-
args.auto_update = None
|
118
|
-
|
119
|
-
if (
|
120
|
-
not cwd_is_fastled
|
121
|
-
and not args.localhost
|
122
|
-
and not args.web
|
123
|
-
and not args.server
|
124
|
-
):
|
125
|
-
if DockerManager.is_docker_installed():
|
126
|
-
if not DockerManager.ensure_linux_containers_for_windows():
|
127
|
-
print(
|
128
|
-
f"Windows must be in linux containers mode, but is in Windows container mode, Using web compiler at {DEFAULT_URL}."
|
129
|
-
)
|
130
|
-
args.web = DEFAULT_URL
|
131
|
-
else:
|
132
|
-
print(
|
133
|
-
"Docker is installed. Defaulting to --local mode, use --web to override and use the web compiler instead."
|
134
|
-
)
|
135
|
-
args.localhost = True
|
136
|
-
else:
|
137
|
-
print(f"Docker is not installed. Using web compiler at {DEFAULT_URL}.")
|
138
|
-
args.web = DEFAULT_URL
|
139
|
-
if cwd_is_fastled and not args.web and not args.server:
|
140
|
-
print("Forcing --local mode because we are in the FastLED repo")
|
141
|
-
args.localhost = True
|
142
|
-
if args.localhost:
|
143
|
-
args.web = "localhost"
|
144
|
-
if args.interactive and not args.server:
|
145
|
-
print("--interactive forces --server mode")
|
146
|
-
args.server = True
|
147
|
-
if args.directory is None and not args.server:
|
148
|
-
# does current directory look like a sketch?
|
149
|
-
maybe_sketch_dir = Path(os.getcwd())
|
150
|
-
if looks_like_sketch_directory(maybe_sketch_dir):
|
151
|
-
args.directory = str(maybe_sketch_dir)
|
152
|
-
else:
|
153
|
-
print("Searching for sketch directories...")
|
154
|
-
sketch_directories = find_sketch_directories(maybe_sketch_dir)
|
155
|
-
selected_dir = select_sketch_directory(
|
156
|
-
sketch_directories, cwd_is_fastled
|
157
|
-
)
|
158
|
-
if selected_dir:
|
159
|
-
print(f"Using sketch directory: {selected_dir}")
|
160
|
-
args.directory = selected_dir
|
161
|
-
else:
|
162
|
-
print(
|
163
|
-
"\nYou either need to specify a sketch directory or run in --server mode."
|
164
|
-
)
|
165
|
-
sys.exit(1)
|
166
|
-
elif args.directory is not None and os.path.isfile(args.directory):
|
167
|
-
dir_path = Path(args.directory).parent
|
168
|
-
if looks_like_sketch_directory(dir_path):
|
169
|
-
print(f"Using sketch directory: {dir_path}")
|
170
|
-
args.directory = str(dir_path)
|
171
|
-
|
172
|
-
return args
|
1
|
+
import argparse
|
2
|
+
import os
|
3
|
+
import sys
|
4
|
+
from pathlib import Path
|
5
|
+
|
6
|
+
from fastled import __version__
|
7
|
+
from fastled.docker_manager import DockerManager
|
8
|
+
from fastled.project_init import project_init
|
9
|
+
from fastled.select_sketch_directory import select_sketch_directory
|
10
|
+
from fastled.settings import DEFAULT_URL
|
11
|
+
from fastled.sketch import (
|
12
|
+
find_sketch_directories,
|
13
|
+
looks_like_fastled_repo,
|
14
|
+
looks_like_sketch_directory,
|
15
|
+
)
|
16
|
+
|
17
|
+
|
18
|
+
def parse_args() -> argparse.Namespace:
|
19
|
+
"""Parse command-line arguments."""
|
20
|
+
parser = argparse.ArgumentParser(description=f"FastLED WASM Compiler {__version__}")
|
21
|
+
parser.add_argument("--version", action="version", version=f"{__version__}")
|
22
|
+
parser.add_argument(
|
23
|
+
"directory",
|
24
|
+
type=str,
|
25
|
+
nargs="?",
|
26
|
+
default=None,
|
27
|
+
help="Directory containing the FastLED sketch to compile",
|
28
|
+
)
|
29
|
+
parser.add_argument(
|
30
|
+
"--init",
|
31
|
+
nargs="?",
|
32
|
+
const=True,
|
33
|
+
help="Initialize the FastLED sketch in the current directory. Optional name can be provided",
|
34
|
+
)
|
35
|
+
parser.add_argument(
|
36
|
+
"--just-compile",
|
37
|
+
action="store_true",
|
38
|
+
help="Just compile, skip opening the browser and watching for changes.",
|
39
|
+
)
|
40
|
+
parser.add_argument(
|
41
|
+
"--web",
|
42
|
+
"-w",
|
43
|
+
type=str,
|
44
|
+
nargs="?",
|
45
|
+
# const does not seem to be working as expected
|
46
|
+
const=DEFAULT_URL, # Default value when --web is specified without value
|
47
|
+
help="Use web compiler. Optional URL can be provided (default: https://fastled.onrender.com)",
|
48
|
+
)
|
49
|
+
parser.add_argument(
|
50
|
+
"-i",
|
51
|
+
"--interactive",
|
52
|
+
action="store_true",
|
53
|
+
help="Run in interactive mode (Not available with --web)",
|
54
|
+
)
|
55
|
+
parser.add_argument(
|
56
|
+
"--profile",
|
57
|
+
action="store_true",
|
58
|
+
help="Enable profiling for web compilation",
|
59
|
+
)
|
60
|
+
parser.add_argument(
|
61
|
+
"--force-compile",
|
62
|
+
action="store_true",
|
63
|
+
help="Skips the test to see if the current directory is a valid FastLED sketch directory",
|
64
|
+
)
|
65
|
+
parser.add_argument(
|
66
|
+
"--no-auto-updates",
|
67
|
+
action="store_true",
|
68
|
+
help="Disable automatic updates of the wasm compiler image when using docker.",
|
69
|
+
)
|
70
|
+
parser.add_argument(
|
71
|
+
"--update",
|
72
|
+
"--upgrade",
|
73
|
+
action="store_true",
|
74
|
+
help="Update the wasm compiler (if necessary) before running",
|
75
|
+
)
|
76
|
+
parser.add_argument(
|
77
|
+
"--localhost",
|
78
|
+
"--local",
|
79
|
+
"-l",
|
80
|
+
action="store_true",
|
81
|
+
help="Use localhost for web compilation from an instance of fastled --server, creating it if necessary",
|
82
|
+
)
|
83
|
+
parser.add_argument(
|
84
|
+
"--server",
|
85
|
+
"-s",
|
86
|
+
action="store_true",
|
87
|
+
help="Run the server in the current directory, volume mapping fastled if we are in the repo",
|
88
|
+
)
|
89
|
+
|
90
|
+
build_mode = parser.add_mutually_exclusive_group()
|
91
|
+
build_mode.add_argument("--debug", action="store_true", help="Build in debug mode")
|
92
|
+
build_mode.add_argument(
|
93
|
+
"--quick",
|
94
|
+
action="store_true",
|
95
|
+
default=True,
|
96
|
+
help="Build in quick mode (default)",
|
97
|
+
)
|
98
|
+
build_mode.add_argument(
|
99
|
+
"--release", action="store_true", help="Build in release mode"
|
100
|
+
)
|
101
|
+
|
102
|
+
cwd_is_fastled = looks_like_fastled_repo(Path(os.getcwd()))
|
103
|
+
|
104
|
+
args = parser.parse_args()
|
105
|
+
|
106
|
+
if args.init:
|
107
|
+
example = args.init if args.init is not True else None
|
108
|
+
args.directory = project_init(example)
|
109
|
+
print("\nInitialized FastLED project in", args.directory)
|
110
|
+
print(f"Use 'fastled {args.directory}' to compile the project.")
|
111
|
+
sys.exit(0)
|
112
|
+
|
113
|
+
if not args.update:
|
114
|
+
if args.no_auto_updates:
|
115
|
+
args.auto_update = False
|
116
|
+
else:
|
117
|
+
args.auto_update = None
|
118
|
+
|
119
|
+
if (
|
120
|
+
not cwd_is_fastled
|
121
|
+
and not args.localhost
|
122
|
+
and not args.web
|
123
|
+
and not args.server
|
124
|
+
):
|
125
|
+
if DockerManager.is_docker_installed():
|
126
|
+
if not DockerManager.ensure_linux_containers_for_windows():
|
127
|
+
print(
|
128
|
+
f"Windows must be in linux containers mode, but is in Windows container mode, Using web compiler at {DEFAULT_URL}."
|
129
|
+
)
|
130
|
+
args.web = DEFAULT_URL
|
131
|
+
else:
|
132
|
+
print(
|
133
|
+
"Docker is installed. Defaulting to --local mode, use --web to override and use the web compiler instead."
|
134
|
+
)
|
135
|
+
args.localhost = True
|
136
|
+
else:
|
137
|
+
print(f"Docker is not installed. Using web compiler at {DEFAULT_URL}.")
|
138
|
+
args.web = DEFAULT_URL
|
139
|
+
if cwd_is_fastled and not args.web and not args.server:
|
140
|
+
print("Forcing --local mode because we are in the FastLED repo")
|
141
|
+
args.localhost = True
|
142
|
+
if args.localhost:
|
143
|
+
args.web = "localhost"
|
144
|
+
if args.interactive and not args.server:
|
145
|
+
print("--interactive forces --server mode")
|
146
|
+
args.server = True
|
147
|
+
if args.directory is None and not args.server:
|
148
|
+
# does current directory look like a sketch?
|
149
|
+
maybe_sketch_dir = Path(os.getcwd())
|
150
|
+
if looks_like_sketch_directory(maybe_sketch_dir):
|
151
|
+
args.directory = str(maybe_sketch_dir)
|
152
|
+
else:
|
153
|
+
print("Searching for sketch directories...")
|
154
|
+
sketch_directories = find_sketch_directories(maybe_sketch_dir)
|
155
|
+
selected_dir = select_sketch_directory(
|
156
|
+
sketch_directories, cwd_is_fastled
|
157
|
+
)
|
158
|
+
if selected_dir:
|
159
|
+
print(f"Using sketch directory: {selected_dir}")
|
160
|
+
args.directory = selected_dir
|
161
|
+
else:
|
162
|
+
print(
|
163
|
+
"\nYou either need to specify a sketch directory or run in --server mode."
|
164
|
+
)
|
165
|
+
sys.exit(1)
|
166
|
+
elif args.directory is not None and os.path.isfile(args.directory):
|
167
|
+
dir_path = Path(args.directory).parent
|
168
|
+
if looks_like_sketch_directory(dir_path):
|
169
|
+
print(f"Using sketch directory: {dir_path}")
|
170
|
+
args.directory = str(dir_path)
|
171
|
+
|
172
|
+
return args
|
fastled/project_init.py
CHANGED
@@ -9,11 +9,19 @@ ENDPOINT_PROJECT_INIT = f"{DEFAULT_URL}/project/init"
|
|
9
9
|
ENDPOINT_INFO = f"{DEFAULT_URL}/info"
|
10
10
|
DEFAULT_EXAMPLE = "wasm"
|
11
11
|
|
12
|
+
_EXCLUDED_EXAMPLES = [
|
13
|
+
"Pintest",
|
14
|
+
"OctoWS2811",
|
15
|
+
]
|
16
|
+
|
12
17
|
|
13
18
|
def get_examples() -> list[str]:
|
14
19
|
response = httpx.get(ENDPOINT_INFO, timeout=4)
|
15
20
|
response.raise_for_status()
|
16
|
-
|
21
|
+
examples: list[str] = response.json()["examples"]
|
22
|
+
# filter out excluded examples
|
23
|
+
examples = [example for example in examples if example not in _EXCLUDED_EXAMPLES]
|
24
|
+
return sorted(examples)
|
17
25
|
|
18
26
|
|
19
27
|
def _prompt_for_example() -> str:
|
@@ -62,7 +70,9 @@ def project_init(
|
|
62
70
|
with zipfile.ZipFile(tmpzip, "r") as zip_ref:
|
63
71
|
zip_ref.extractall(outputdir)
|
64
72
|
tmpzip.unlink()
|
65
|
-
|
73
|
+
out = outputdir / example
|
74
|
+
assert out.exists()
|
75
|
+
return out
|
66
76
|
|
67
77
|
|
68
78
|
def unit_test() -> None:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fastled
|
3
|
-
Version: 1.1.
|
3
|
+
Version: 1.1.61
|
4
4
|
Summary: FastLED Wasm Compiler
|
5
5
|
Home-page: https://github.com/zackees/fastled-wasm
|
6
6
|
Maintainer: Zachary Vorhies
|
@@ -27,11 +27,13 @@ Compiles an Arduino/Platformio sketch into a wasm binary that can be run directl
|
|
27
27
|
|
28
28
|
|
29
29
|
[](https://github.com/zackees/fastled-wasm/actions/workflows/lint.yml)
|
30
|
-
[](https://github.com/zackees/fastled-wasm/actions/workflows/build_multi_docker_image.yml)
|
31
30
|
[](https://github.com/zackees/fastled-wasm/actions/workflows/test_macos.yml)
|
32
31
|
[](https://github.com/zackees/fastled-wasm/actions/workflows/test_ubuntu.yml)
|
33
32
|
[](https://github.com/zackees/fastled-wasm/actions/workflows/test_win.yml)
|
34
33
|
|
34
|
+
[](https://github.com/zackees/fastled-wasm/actions/workflows/build_multi_docker_image.yml)
|
35
|
+
[](https://github.com/zackees/fastled-wasm/actions/workflows/test_build_exe.yml)
|
36
|
+
[](https://github.com/zackees/fastled-wasm/actions/workflows/publish_release.yml)
|
35
37
|
|
36
38
|
|
37
39
|
# About
|
@@ -85,7 +87,7 @@ You can also spawn a server in one process and then access it in another, like t
|
|
85
87
|
```bash
|
86
88
|
fastled --server # server will now run in the background.
|
87
89
|
# now launch the client
|
88
|
-
fastled examples/wasm --local # local will find the local server use it do the compile.
|
90
|
+
fastled examples/wasm --local # local will find the local server and use it to do the compile.
|
89
91
|
```
|
90
92
|
|
91
93
|
After compilation a web browser windows will pop up. Changes to the sketch will automatically trigger a recompilation.
|
@@ -181,7 +183,7 @@ with Api.server() as server:
|
|
181
183
|
|
182
184
|
## Hot reload by default
|
183
185
|
|
184
|
-
Once launched, the compiler will remain open, listening to changes and recompiling as necessary
|
186
|
+
Once launched, the compiler will remain open, listening to changes and recompiling as necessary, hot-reloading the sketch into the current browser.
|
185
187
|
|
186
188
|
This style of development should be familiar to those doing web development.
|
187
189
|
|
@@ -190,19 +192,19 @@ This style of development should be familiar to those doing web development.
|
|
190
192
|
If you launch `fastled` in the FastLED repo then this tool will automatically detect this and map the src directory into the
|
191
193
|
host container. Whenever there are changes in the source code from the mapped directory, then these will be re-compiled
|
192
194
|
on the next change or if you hit the space bar when prompted. Unlike a sketch folder, a re-compile on the FastLED src
|
193
|
-
can be much longer, for example if you modify a header file.
|
195
|
+
can be much longer, for example, if you modify a header file.
|
194
196
|
|
195
197
|
## Big Data in `/data` directory won't be round-tripped
|
196
198
|
|
197
199
|
Huge blobs of data like video will absolutely kill the compile performance as these blobs would normally have to be shuffled
|
198
200
|
back and forth. Therefore a special directory `data/` is implicitly used to hold this blob data. Any data in this directory
|
199
|
-
will be replaced with a stub containing the size and hash of the file during upload. On download these stubs are swapped back
|
201
|
+
will be replaced with a stub containing the size and hash of the file during upload. On download, these stubs are swapped back
|
200
202
|
with their originals during decompression.
|
201
203
|
|
202
|
-
The wasm compiler will recognize all files in the `data/` directory and generate a `files.json` manifest
|
204
|
+
The wasm compiler will recognize all files in the `data/` directory and generate a `files.json` manifest which can be used
|
203
205
|
in your wasm sketch using an emulated SD card system mounted at `/data/` on the SD Card. In order to increase load speed, these
|
204
|
-
files will be
|
205
|
-
immediately injected in the app before setup() is called and can be used
|
206
|
+
files will be asynchronously streamed into the running sketch instance during runtime. Files named with *.json, *.csv, *.txt will be
|
207
|
+
immediately injected in the app before setup() is called and can be used immediately in setup() in their entirety.
|
206
208
|
|
207
209
|
All other files will be streamed in. The `Video` element in FastLED is designed to gracefully handle missing data streamed in through
|
208
210
|
the file system.
|
@@ -211,30 +213,30 @@ For an example of how to use this see `examples/SdCard` which is fully wasm comp
|
|
211
213
|
|
212
214
|
## Compile Speed
|
213
215
|
|
214
|
-
|
216
|
+
There are three compile settings available to the user. The default is `--quick`. Aggressive optimizations are done with `--release` which will optimize for size, although the speed difference between `--release` and `--quick` seems negligible. But `--release` will produce a ~1/3 smaller binary. There is also `--debug`, which will include symbols necessary for debugging and getting the C++ function symbols working correctly in the browser during step-through debugging. In my personal tests it works better than expected, but don't expect to have gdb or msvc debugger level of the debugging experience.
|
215
217
|
|
216
|
-
We use `ccache` to cache object files. This seems actually help a lot and is better than
|
218
|
+
We use `ccache` to cache object files. This seems actually help a lot and is better than Platformio's method of tracking what needs to be rebuilt. This works as a two-tier cache system. What Platformio misses will be covered by ccache's more advanced file changing system.
|
217
219
|
|
218
|
-
The compilation to wasm will happen under a lock. Removing this lock requires removing the
|
220
|
+
The compilation to wasm will happen under a lock. Removing this lock requires removing the Platformio toolchain as the compiler backend which enforces its own internal lock preventing parallel use.
|
219
221
|
|
220
222
|
## Sketch Cache
|
221
223
|
|
222
|
-
|
223
|
-
printing while the actual source files are sent to compiler to preserve line numbers and file names.
|
224
|
+
Sketches are aggressively fingerprinted and stored in a cache. White space, comments, and other superficial data will be stripped out during pre-processing and minimization for fingerprinting. This source file decimation is only used for finger
|
225
|
+
printing while the actual source files are sent to the compiler to preserve line numbers and file names.
|
224
226
|
|
225
|
-
This pre-processing done is done via gcc and special regex's and will happen without a lock. This will allow you to have extremely quick recompiles for whitespace and changes in comments
|
227
|
+
This pre-processing done is done via gcc and special regex's and will happen without a lock. This will allow you to have extremely quick recompiles for whitespace and changes in comments.
|
226
228
|
|
227
229
|
## Local compiles
|
228
230
|
|
229
|
-
If the web
|
231
|
+
If the web compiler gets congested then it's recommended that you run the compiler locally. This requires docker and will be invoked whenever you pass in `--local`. This will first pull the most recent Docker image of the Fastled compiler, launch a webserver, and then connect to it with the client once it's been up.
|
230
232
|
|
231
233
|
## Auto updates
|
232
234
|
|
233
|
-
In server mode the git repository will be cloned as a side repo and then periodically updated and rsync'd to the src directory. This allows a long
|
235
|
+
In server mode, the git repository will be cloned as a side repo and then periodically updated and rsync'd to the src directory. This allows a long-running instance to stay updated.
|
234
236
|
|
235
|
-
## Compatibility with Arduino
|
237
|
+
## Compatibility with Arduino sketches
|
236
238
|
|
237
|
-
The compatibility is
|
239
|
+
The compatibility is pretty good. Most simple sketches should compile out of the box. Even some of the AVR platforms are stubbed out to make it work. For Arduino, the familiar `digitalWrite()`, `Serial.println()`, and other common functions work. Although `digitalRead()` will always return 0 and `analogRead()` will return random numbers.
|
238
240
|
|
239
241
|
### Faqs
|
240
242
|
|
@@ -242,20 +244,29 @@ Q: How often is the docker image updated?
|
|
242
244
|
A: It's scheduled for rebuild once a day at 3am Pacific time, and also on every change to this repo.
|
243
245
|
|
244
246
|
Q: How can I run my own cloud instance of the FastLED wasm compiler?
|
245
|
-
A: Render.com (which fastled is hosted on) or DigialOcean can accept a
|
247
|
+
A: Render.com (which fastled is hosted on) or DigialOcean can accept a GitHub repo and auto-build the docker image.
|
246
248
|
|
247
249
|
Q: Why does FastLED tend to become choppy when the browser is in the background?
|
248
250
|
A: FastLED Wasm currently runs on the main thread and therefor Chrome will begin throttling the event loop when the browser is not in the foreground. The solution to this is to move FastLED to a web worker where it will get a background thread that Chrome / Firefox won't throttle.
|
249
251
|
|
250
252
|
Q: Why does a long `delay()` cause the browser to freeze and become sluggish?
|
251
|
-
A: `delay()` will block `loop()` which blocks the main thread of the browser. The solution is a webworker which will not affect main thread performance of the browser.
|
253
|
+
A: `delay()` will block `loop()` which blocks the main thread of the browser. The solution is a webworker which will not affect the main thread performance of the browser.
|
252
254
|
|
253
255
|
|
254
256
|
Q: How can I get the compiled size of my FastLED sketch smaller?
|
255
|
-
A: A big chunk of space is being used by unnecessary javascript `emscripten`
|
257
|
+
A: A big chunk of space is being used by unnecessary javascript `emscripten` bundling. The wasm_compiler_settings.py file in the FastLED repo can tweak this.
|
256
258
|
|
257
259
|
# Revisions
|
258
260
|
|
261
|
+
* 1.1.61 - Excluded non compiling examples from the Test object as part of the api - no sense in having them if they won't compile.
|
262
|
+
* 1.1.60 - Platform executables (macos-arm/macos-x86/windows/linux-x86) now auto building with each release. Add tests.
|
263
|
+
* 1.1.52 - Add linux-arm
|
264
|
+
* 1.1.49 - Try again.
|
265
|
+
* 1.1.46 - Add mac x86 exe
|
266
|
+
* 1.1.45 - Another try for web publishing from github.
|
267
|
+
* 1.1.42 - Second test for web publishing from github.
|
268
|
+
* 1.1.41 - Platform executable (through pyinstaller) now enabled.
|
269
|
+
* 1.1.40 - Remove `sketch_directory` from Api object. This was only needed before we had a client/server architecture.
|
259
270
|
* 1.1.39 - Added `LiveClient`, `fastled.Api.live_server()` will spawn it. Allows user to have a live compiling client that re-triggers a compile on file changes.
|
260
271
|
* 1.1.38 - Cleanup the `fastled.Api` object and streamline for general use.
|
261
272
|
* 1.1.37 - `Test.test_examples()` is now unit tested to work correctly.
|
@@ -1,7 +1,7 @@
|
|
1
|
-
fastled/__init__.py,sha256=
|
1
|
+
fastled/__init__.py,sha256=LTl4OpLHw08Iw3_c7cyBcVMWnfZsVMtpF5ls5acV4gQ,3462
|
2
2
|
fastled/app.py,sha256=3xg7oVD-UYnKPU8SAY-Cs5UnAYdwpdpuEFRR2N8P1Tg,1787
|
3
3
|
fastled/cli.py,sha256=CNR_pQR0sNVPNuv8e_nmm-0PI8sU-eUBUgnWgWkzW9c,237
|
4
|
-
fastled/client_server.py,sha256=
|
4
|
+
fastled/client_server.py,sha256=MGE4rg40EA2ty6nKExVxkjUbPbif1Bbx0vDjwNcDOD8,12563
|
5
5
|
fastled/compile_server.py,sha256=Z7rHFs3M6QPbSCsbgHAQDk6GTVAJMMPCXtD4Y0mu8RM,2659
|
6
6
|
fastled/compile_server_impl.py,sha256=ClBLtFHB0ucaT8tAJfI6o3bJ-LRnXc4Pxy7bVKnFiww,8803
|
7
7
|
fastled/docker_manager.py,sha256=zBCFGk2P3_bS7_SUQ5j2lpsOS3RvIzXYkrJXC6xP69k,25383
|
@@ -9,9 +9,9 @@ fastled/filewatcher.py,sha256=LwEQJkqADsArZyY499RLAer6JjJyDwaQBcAvT7xmp3c,6708
|
|
9
9
|
fastled/keyboard.py,sha256=Zz_ggxOUTX2XQEy6K6kAoorVlUev4wEk9Awpvv9aStA,3241
|
10
10
|
fastled/live_client.py,sha256=_KvqmyUyyGpoYET1Z9CdeUVoIbFjIUWwPcTp5XCQuxY,2075
|
11
11
|
fastled/open_browser.py,sha256=vzMBcpDNY0f-Bx9KmEILKDANZ6gvsywCVwn1FRhPXh4,1770
|
12
|
-
fastled/parse_args.py,sha256=
|
12
|
+
fastled/parse_args.py,sha256=bvIaK_VdFRq6Pd3cOXbP0oculTWMWUkLdhbBR1sdLsc,6410
|
13
13
|
fastled/paths.py,sha256=VsPmgu0lNSCFOoEC0BsTYzDygXqy15AHUfN-tTuzDZA,99
|
14
|
-
fastled/project_init.py,sha256=
|
14
|
+
fastled/project_init.py,sha256=FH8LtrFwBVijGOzM4UczIdEET7XhXDtf0LkPUMNBVCs,2367
|
15
15
|
fastled/select_sketch_directory.py,sha256=TZdCjl1D7YMKjodMTvDRurPcpAmN3x0TcJxffER2NfM,1314
|
16
16
|
fastled/settings.py,sha256=3eMKv0tLXgIQ0CFDboIp_l5_71rzIIyWg353YjnYJnc,323
|
17
17
|
fastled/sketch.py,sha256=483TrrIdZJfo1MIu5FkD-V5OGmOfHmsZ2f6VvNsJBJM,3299
|
@@ -22,9 +22,9 @@ fastled/util.py,sha256=t4M3NFMhnCzfYbLvIyJi0RdFssZqbTN_vVIaej1WV-U,265
|
|
22
22
|
fastled/web_compile.py,sha256=05PeLJ77QQC6PUKjDhsntBmyBola6QQIfF2k-zjYNE4,10261
|
23
23
|
fastled/assets/example.txt,sha256=lTBovRjiz0_TgtAtbA1C5hNi2ffbqnNPqkKg6UiKCT8,54
|
24
24
|
fastled/test/examples.py,sha256=EDXb6KastKOOWzew99zrpmcNcXTcAtYi8eud6F1pnWA,980
|
25
|
-
fastled-1.1.
|
26
|
-
fastled-1.1.
|
27
|
-
fastled-1.1.
|
28
|
-
fastled-1.1.
|
29
|
-
fastled-1.1.
|
30
|
-
fastled-1.1.
|
25
|
+
fastled-1.1.61.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
|
26
|
+
fastled-1.1.61.dist-info/METADATA,sha256=kAnJHjNz0p1C5mu2SXi126MwM-TAXDg9MgJvnW3wANM,18806
|
27
|
+
fastled-1.1.61.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
|
28
|
+
fastled-1.1.61.dist-info/entry_points.txt,sha256=RCwmzCSOS4-C2i9EziANq7Z2Zb4KFnEMR1FQC0bBwAw,101
|
29
|
+
fastled-1.1.61.dist-info/top_level.txt,sha256=Bbv5kpJpZhWNCvDF4K0VcvtBSDMa8B7PTOrZa9CezHY,8
|
30
|
+
fastled-1.1.61.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|