mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 07:33:01 +00:00 
			
		
		
		
	Don't use generated headers for embedded janet
code, use object files.
This commit is contained in:
		
							
								
								
									
										49
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								Makefile
									
									
									
									
									
								
							| @@ -49,43 +49,16 @@ else | ||||
| endif | ||||
|  | ||||
| # Source headers | ||||
| JANET_GENERATED_HEADERS= \ | ||||
| 	src/include/generated/core.h \ | ||||
|  	src/include/generated/init.h | ||||
| JANET_HEADERS=$(sort $(wildcard src/include/janet/*.h)) | ||||
| JANET_LOCAL_HEADERS=$(sort $(wildcard src/*/*.h)) | ||||
|  | ||||
| # Source files | ||||
| JANET_CORE_SOURCES=$(sort $(wildcard src/core/*.c)) | ||||
| JANET_MAINCLIENT_SOURCES=$(sort $(wildcard src/mainclient/*.c)) | ||||
| JANET_WEBCLIENT_SOURCES=$(sort $(wildcard src/webclient/*.c)) | ||||
| JANET_CORE_SOURCES=$(sort $(wildcard src/core/*.c)) src/core/core.gen.c | ||||
| JANET_MAINCLIENT_SOURCES=$(sort $(wildcard src/mainclient/*.c)) src/mainclient/init.gen.c | ||||
| JANET_WEBCLIENT_SOURCES=$(sort $(wildcard src/webclient/*.c)) src/webclient/webinit.gen.c | ||||
|  | ||||
| all: $(JANET_TARGET) $(JANET_LIBRARY) | ||||
|  | ||||
| ################################### | ||||
| ##### The code generator tool ##### | ||||
| ################################### | ||||
|  | ||||
| xxd: src/tools/xxd.c | ||||
| 	$(CC) $< -o $@ | ||||
|  | ||||
| ############################# | ||||
| ##### Generated Headers ##### | ||||
| ############################# | ||||
|  | ||||
| src/include/generated/init.h: src/mainclient/init.janet xxd | ||||
| 	./xxd $< $@ janet_gen_init  | ||||
|  | ||||
| src/include/generated/webinit.h: src/webclient/webinit.janet xxd | ||||
| 	./xxd $< $@ janet_gen_webinit  | ||||
|  | ||||
| src/include/generated/core.h: src/core/core.janet xxd | ||||
| 	./xxd $< $@ janet_gen_core | ||||
|  | ||||
| # Only a few files depend on the generated headers | ||||
| src/core/corelib.o: src/include/generated/core.h | ||||
| src/mainclient/main.o: src/include/generated/init.h | ||||
|  | ||||
| ########################################################## | ||||
| ##### The main interpreter program and shared object ##### | ||||
| ########################################################## | ||||
| @@ -119,16 +92,22 @@ JANET_EMTARGET=janet.js | ||||
| JANET_WEB_SOURCES=$(JANET_CORE_SOURCES) $(JANET_WEBCLIENT_SOURCES) | ||||
| JANET_EMOBJECTS=$(patsubst %.c,%.bc,$(JANET_WEB_SOURCES)) | ||||
|  | ||||
| # Only a few files depend on generated headers | ||||
| src/core/corelib.bc: src/include/generated/core.h | ||||
| src/webclient/main.bc: src/include/generated/webinit.h | ||||
|  | ||||
| %.bc: %.c $(JANET_HEADERS) $(JANET_LOCAL_HEADERS) | ||||
| 	$(EMCC) $(EMCCFLAGS) -o $@ -c $< | ||||
|  | ||||
| $(JANET_EMTARGET): $(JANET_EMOBJECTS) | ||||
| 	$(EMCC) $(EMCCFLAGS) -shared -o $@ $^ | ||||
|  | ||||
| ############################# | ||||
| ##### Generated C files ##### | ||||
| ############################# | ||||
|  | ||||
| xxd: src/tools/xxd.c | ||||
| 	$(CC) $< -o $@ | ||||
|  | ||||
| %.gen.c: %.janet xxd | ||||
| 	./xxd $< $@ janet_gen_$(*F) | ||||
|  | ||||
| ################### | ||||
| ##### Testing ##### | ||||
| ################### | ||||
| @@ -184,7 +163,7 @@ clean: | ||||
| 	-rm $(JANET_LIBRARY) | ||||
| 	-rm ctest/*.o ctest/*.out | ||||
| 	-rm src/**/*.o src/**/*.bc vgcore.* *.js *.wasm *.html | ||||
| 	-rm $(JANET_GENERATED_HEADERS) | ||||
| 	-rm src/**/*.gen.c | ||||
|  | ||||
| install: $(JANET_TARGET) | ||||
| 	mkdir -p $(BINDIR) | ||||
|   | ||||
| @@ -28,10 +28,16 @@ mkdir build\mainclient | ||||
| @link /nologo /out:build\xxd.exe build\xxd.obj | ||||
| @if errorlevel 1 goto :BUILDFAIL | ||||
|  | ||||
| @rem Generate the headers | ||||
| @build\xxd.exe src\core\core.janet src\include\generated\core.h janet_gen_core | ||||
| @rem Generate the embedded sources | ||||
| @build\xxd.exe src\core\core.janet build\core\core.gen.c janet_gen_core | ||||
| @if errorlevel 1 goto :BUILDFAIL | ||||
| @build\xxd.exe src\mainclient\init.janet src\include\generated\init.h janet_gen_init | ||||
| @build\xxd.exe src\mainclient\init.janet build\mainclient\init.gen.c janet_gen_init | ||||
| @if errorlevel 1 goto :BUILDFAIL | ||||
|  | ||||
| @rem Build the generated sources | ||||
| @%JANET_COMPILE% /Fobuild\core\core.gen.obj build\core\core.gen.c | ||||
| @if errorlevel 1 goto :BUILDFAIL | ||||
| @%JANET_COMPILE% /Fobuild\mainclient\init.gen.obj build\mainclient\init.gen.c | ||||
| @if errorlevel 1 goto :BUILDFAIL | ||||
|  | ||||
| @rem Build the sources | ||||
|   | ||||
| @@ -728,7 +728,7 @@ static int cfun(JanetArgs args) { | ||||
|  | ||||
| static const JanetReg cfuns[] = { | ||||
|     {"compile", cfun, | ||||
|         "(compile ast)\n\n" | ||||
|         "(compile ast env [, source])\n\n" | ||||
|         "Compiles an Abstract Sytnax Tree (ast) into a janet function. " | ||||
|         "Pair the compile function with parsing functionality to implement " | ||||
|         "eval. Returns a janet function and does not modify ast. Throws an " | ||||
|   | ||||
| @@ -25,8 +25,9 @@ | ||||
| #include "state.h" | ||||
| #include "util.h" | ||||
|  | ||||
| /* Generated header */ | ||||
| #include <generated/core.h> | ||||
| /* Generated bytes */ | ||||
| extern const unsigned char *janet_gen_core; | ||||
| extern size_t janet_gen_core_size; | ||||
|  | ||||
| /* Use LoadLibrary on windows or dlopen on posix to load dynamic libaries | ||||
|  * with native code. */ | ||||
| @@ -809,7 +810,7 @@ JanetTable *janet_core_env(void) { | ||||
|     janet_def(env, "_env", ret, "The environment table for the current scope."); | ||||
|  | ||||
|     /* Run bootstrap source */ | ||||
|     janet_dobytes(env, janet_gen_core, sizeof(janet_gen_core), "core.janet", NULL); | ||||
|     janet_dobytes(env, janet_gen_core, janet_gen_core_size, "core.janet", NULL); | ||||
|  | ||||
|     return env; | ||||
| } | ||||
|   | ||||
| @@ -21,10 +21,11 @@ | ||||
| */ | ||||
|  | ||||
| #include <janet/janet.h> | ||||
|  | ||||
| #include <generated/init.h> | ||||
| #include "line.h" | ||||
|  | ||||
| extern const unsigned char *janet_gen_init; | ||||
| extern size_t janet_gen_init_size; | ||||
|  | ||||
| int main(int argc, char **argv) { | ||||
|     int i, status; | ||||
|     JanetArray *args; | ||||
| @@ -46,7 +47,7 @@ int main(int argc, char **argv) { | ||||
|     janet_line_init(); | ||||
|  | ||||
|     /* Run startup script */ | ||||
|     status = janet_dobytes(env, janet_gen_init, sizeof(janet_gen_init), "init.janet", NULL); | ||||
|     status = janet_dobytes(env, janet_gen_init, janet_gen_init_size, "init.janet", NULL); | ||||
|  | ||||
|     /* Deinitialize vm */ | ||||
|     janet_deinit(); | ||||
|   | ||||
| @@ -36,6 +36,7 @@ int main(int argc, const char **argv) { | ||||
| 	static const char hex[] = "0123456789ABCDEF"; | ||||
| 	char buf[BUFSIZE]; | ||||
| 	size_t bytesRead = 0; | ||||
| 	size_t totalRead = 0; | ||||
| 	int lineIndex = 0; | ||||
| 	int line = 0; | ||||
|  | ||||
| @@ -58,12 +59,13 @@ int main(int argc, const char **argv) { | ||||
| 	} | ||||
|  | ||||
| 	/* Write the header */ | ||||
| 	fprintf(out, "/* Auto generated - DO NOT EDIT */\n\n"); | ||||
| 	fprintf(out, "static const unsigned char %s[] = {", argv[3]); | ||||
| 	fprintf(out, "/* Auto generated - DO NOT EDIT */\n\n#include <stddef.h>\n\n"); | ||||
| 	fprintf(out, "static const unsigned char bytes[] = {"); | ||||
|  | ||||
| 	/* Read in chunks from buffer */ | ||||
| 	while ((bytesRead = fread(buf, 1, sizeof(buf), in)) > 0) { | ||||
| 		size_t i; | ||||
| 		totalRead += bytesRead; | ||||
| 		for (i = 0; i < bytesRead; ++i) { | ||||
| 			int byte = ((uint8_t *)buf) [i]; | ||||
|  | ||||
| @@ -89,6 +91,11 @@ int main(int argc, const char **argv) { | ||||
|   	/* Write the tail */ | ||||
| 	fputs("\n};\n\n", out); | ||||
|  | ||||
| 	fprintf(out, "const unsigned char *%s = bytes;\n\n", argv[3]); | ||||
|  | ||||
|     /* Write chunk size */ | ||||
| 	fprintf(out, "size_t %s_size = %ld;\n", argv[3], totalRead); | ||||
|  | ||||
| 	/* Close the file handles */ | ||||
| 	fclose(in); | ||||
| 	fclose(out); | ||||
|   | ||||
| @@ -21,9 +21,11 @@ | ||||
| */ | ||||
|  | ||||
| #include <janet/janet.h> | ||||
| #include <generated/webinit.h> | ||||
| #include <emscripten.h> | ||||
|  | ||||
| extern const unsigned char *janet_gen_webinit; | ||||
| extern size_t janet_gen_webinit_size; | ||||
|  | ||||
| static JanetFiber *repl_fiber = NULL; | ||||
| static JanetBuffer *line_buffer = NULL; | ||||
| static const uint8_t *line_prompt = NULL; | ||||
| @@ -78,7 +80,7 @@ void repl_init(void) { | ||||
|  | ||||
|     /* Run startup script */ | ||||
|     Janet ret; | ||||
|     status = janet_dobytes(env, janet_gen_webinit, sizeof(janet_gen_webinit), "webinit.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(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose