mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-30 23:23:07 +00:00 
			
		
		
		
	Remove emscripten build.
Prefer using custom toolchain with amalgmated build.
This commit is contained in:
		| @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file. | |||||||
| - Let abstract types define a hash function and comparison/equality semantics. This lets | - Let abstract types define a hash function and comparison/equality semantics. This lets | ||||||
|   abstract types much better represent value types. This adds more fields to abstract types, which |   abstract types much better represent value types. This adds more fields to abstract types, which | ||||||
|   will generate warnings when compiled against other versions. |   will generate warnings when compiled against other versions. | ||||||
|  | - Remove Emscripten build. Instead, use the amalgamated source code with a custom toolchain. | ||||||
| - Update documentation. | - Update documentation. | ||||||
|  |  | ||||||
| ### 1.6.0 - 2019-12-22 | ### 1.6.0 - 2019-12-22 | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								Makefile
									
									
									
									
									
								
							| @@ -166,35 +166,6 @@ $(JANET_LIBRARY): $(JANET_CORE_OBJECTS) | |||||||
| $(JANET_STATIC_LIBRARY): $(JANET_CORE_OBJECTS) | $(JANET_STATIC_LIBRARY): $(JANET_CORE_OBJECTS) | ||||||
| 	$(AR) rcs $@ $^ | 	$(AR) rcs $@ $^ | ||||||
|  |  | ||||||
| ###################### |  | ||||||
| ##### Emscripten ##### |  | ||||||
| ###################### |  | ||||||
|  |  | ||||||
| EMCC=emcc |  | ||||||
| EMCFLAGS=-std=c99 -Wall -Wextra -Isrc/include -Isrc/conf -O2 \ |  | ||||||
| 		  -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap"]' \ |  | ||||||
| 		  -s ALLOW_MEMORY_GROWTH=1 \ |  | ||||||
| 		  -s AGGRESSIVE_VARIABLE_ELIMINATION=1 \ |  | ||||||
| 		  -DJANET_BUILD=$(JANET_BUILD) |  | ||||||
| JANET_EMTARGET=build/janet.js |  | ||||||
| JANET_WEB_SOURCES=$(JANET_CORE_SOURCES) $(JANET_WEBCLIENT_SOURCES) |  | ||||||
| JANET_EMOBJECTS=$(patsubst src/%.c,build/%.bc,$(JANET_WEB_SOURCES)) \ |  | ||||||
| 				build/webinit.gen.bc build/core_image.bc |  | ||||||
|  |  | ||||||
| %.gen.bc: %.gen.c |  | ||||||
| 	$(EMCC) $(EMCFLAGS) -o $@ -c $< |  | ||||||
|  |  | ||||||
| build/core_image.bc: build/core_image.c $(JANET_HEADERS) $(JANET_LOCAL_HEADERS) |  | ||||||
| 	$(EMCC) $(EMCFLAGS) -o $@ -c $< |  | ||||||
|  |  | ||||||
| build/%.bc: src/%.c $(JANET_HEADERS) $(JANET_LOCAL_HEADERS) |  | ||||||
| 	$(EMCC) $(EMCFLAGS) -o $@ -c $< |  | ||||||
|  |  | ||||||
| $(JANET_EMTARGET): $(JANET_EMOBJECTS) |  | ||||||
| 	$(EMCC) $(EMCFLAGS) -shared -o $@ $^ |  | ||||||
|  |  | ||||||
| emscripten: $(JANET_EMTARGET) |  | ||||||
|  |  | ||||||
| ############################# | ############################# | ||||||
| ##### Generated C files ##### | ##### Generated C files ##### | ||||||
| ############################# | ############################# | ||||||
|   | |||||||
| @@ -114,15 +114,6 @@ gmake repl | |||||||
| 3. Run `build_win` to compile janet. | 3. Run `build_win` to compile janet. | ||||||
| 4. Run `build_win test` to make sure everything is working. | 4. Run `build_win test` to make sure everything is working. | ||||||
|  |  | ||||||
| ### Emscripten |  | ||||||
|  |  | ||||||
| To build janet for the web via [Emscripten](https://kripken.github.io/emscripten-site/), make sure you |  | ||||||
| have `emcc` installed and on your path. On a linux or macOS system, use `make emscripten` to build |  | ||||||
| `janet.js` and `janet.wasm` - both are needed to run janet in a browser or in node. |  | ||||||
| The JavaScript build is what runs the repl on the main website, |  | ||||||
| but really serves mainly as a proof of concept. Janet will run slower in a browser. |  | ||||||
| Building with emscripten on windows is currently unsupported. |  | ||||||
|  |  | ||||||
| ### Meson | ### Meson | ||||||
|  |  | ||||||
| Janet also has a build file for [Meson](https://mesonbuild.com/), a cross platform build | Janet also has a build file for [Meson](https://mesonbuild.com/), a cross platform build | ||||||
|   | |||||||
| @@ -1,126 +0,0 @@ | |||||||
| /* |  | ||||||
| * Copyright (c) 2019 Calvin Rose |  | ||||||
| * |  | ||||||
| * Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| * of this software and associated documentation files (the "Software"), to |  | ||||||
| * deal in the Software without restriction, including without limitation the |  | ||||||
| * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |  | ||||||
| * sell copies of the Software, and to permit persons to whom the Software is |  | ||||||
| * furnished to do so, subject to the following conditions: |  | ||||||
| * |  | ||||||
| * The above copyright notice and this permission notice shall be included in |  | ||||||
| * all copies or substantial portions of the Software. |  | ||||||
| * |  | ||||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |  | ||||||
| * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |  | ||||||
| * IN THE SOFTWARE. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #include <janet.h> |  | ||||||
| #include <emscripten.h> |  | ||||||
|  |  | ||||||
| extern const unsigned char *janet_gen_webinit; |  | ||||||
| extern int32_t janet_gen_webinit_size; |  | ||||||
|  |  | ||||||
| static JanetFiber *repl_fiber = NULL; |  | ||||||
| static JanetBuffer *line_buffer = NULL; |  | ||||||
| static const uint8_t *line_prompt = NULL; |  | ||||||
|  |  | ||||||
| /* Yield to JS event loop from janet. Takes a repl prompt |  | ||||||
|  * and a buffer to fill with input data. */ |  | ||||||
| static Janet repl_yield(int32_t argc, Janet *argv) { |  | ||||||
|     janet_fixarity(argc, 2); |  | ||||||
|     line_prompt = janet_getstring(argv, 0); |  | ||||||
|     line_buffer = janet_getbuffer(argv, 1); |  | ||||||
|     return janet_wrap_nil(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Re-enter the loop */ |  | ||||||
| static int enter_loop(void) { |  | ||||||
|     Janet ret; |  | ||||||
|     JanetSignal status = janet_continue(repl_fiber, janet_wrap_nil(), &ret); |  | ||||||
|     if (status == JANET_SIGNAL_ERROR) { |  | ||||||
|         janet_stacktrace(repl_fiber, ret); |  | ||||||
|         janet_deinit(); |  | ||||||
|         repl_fiber = NULL; |  | ||||||
|         return 1; |  | ||||||
|     } |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Allow JS interoperation from within janet */ |  | ||||||
| static Janet cfun_js(int32_t argc, Janet *argv) { |  | ||||||
|     janet_fixarity(argc, 1); |  | ||||||
|     JanetByteView bytes = janet_getbytes(argv, 0); |  | ||||||
|     emscripten_run_script((const char *)bytes.bytes); |  | ||||||
|     return janet_wrap_nil(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Initialize the repl */ |  | ||||||
| EMSCRIPTEN_KEEPALIVE |  | ||||||
| void repl_init(void) { |  | ||||||
|     int status; |  | ||||||
|     JanetTable *env; |  | ||||||
|  |  | ||||||
|     /* Set up VM */ |  | ||||||
|     janet_init(); |  | ||||||
|     janet_register("repl-yield", repl_yield); |  | ||||||
|     janet_register("js", cfun_js); |  | ||||||
|     env = janet_core_env(NULL); |  | ||||||
|  |  | ||||||
|     janet_def(env, "repl-yield", janet_wrap_cfunction(repl_yield), NULL); |  | ||||||
|     janet_def(env, "js", janet_wrap_cfunction(cfun_js), NULL); |  | ||||||
|  |  | ||||||
|     /* Run startup script */ |  | ||||||
|     Janet ret; |  | ||||||
|     status = janet_dobytes(env, janet_gen_webinit, janet_gen_webinit_size, "webinit.janet", &ret); |  | ||||||
|     if (status == JANET_SIGNAL_ERROR) { |  | ||||||
|         printf("start up error.\n"); |  | ||||||
|         janet_deinit(); |  | ||||||
|         repl_fiber = NULL; |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
|     janet_gcroot(ret); |  | ||||||
|     repl_fiber = janet_unwrap_fiber(ret); |  | ||||||
|  |  | ||||||
|     /* Start repl */ |  | ||||||
|     if (enter_loop()) return; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Deinitialize the repl */ |  | ||||||
| EMSCRIPTEN_KEEPALIVE |  | ||||||
| void repl_deinit(void) { |  | ||||||
|     if (!repl_fiber) { |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
|     repl_fiber = NULL; |  | ||||||
|     line_buffer = NULL; |  | ||||||
|     janet_deinit(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Get the prompt to show in the repl */ |  | ||||||
| EMSCRIPTEN_KEEPALIVE |  | ||||||
| const char *repl_prompt(void) { |  | ||||||
|     return line_prompt ? ((const char *)line_prompt) : ""; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Restart the repl calling from JS. Pass in the input for the next line. */ |  | ||||||
| EMSCRIPTEN_KEEPALIVE |  | ||||||
| void repl_input(char *input) { |  | ||||||
|  |  | ||||||
|     /* Create the repl if we haven't yet */ |  | ||||||
|     if (!repl_fiber) { |  | ||||||
|         printf("initialize the repl first"); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /* Now fill the pending line_buffer and resume the repl loop */ |  | ||||||
|     if (line_buffer) { |  | ||||||
|         janet_buffer_push_cstring(line_buffer, input); |  | ||||||
|         line_buffer = NULL; |  | ||||||
|         enter_loop(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| # Copyright 2017-2019 (C) Calvin Rose |  | ||||||
|  |  | ||||||
| (print (string "Janet " janet/version "-" janet/build "  Copyright (C) 2017-2019 Calvin Rose")) |  | ||||||
|  |  | ||||||
| (fiber/new (fn webrepl [] |  | ||||||
|              (setdyn :pretty-format "%.20P") |  | ||||||
|              (repl (fn get-line [buf p] |  | ||||||
|                      (def [offset] (parser/where p)) |  | ||||||
|                      (def prompt (string "janet:" offset ":" (parser/state p :delimiters) "> ")) |  | ||||||
|                      (repl-yield prompt buf) |  | ||||||
|                      (yield) |  | ||||||
|                      buf)))) |  | ||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose