From bf2fc194d5e73214f52f753c9ae92d2cd1497617 Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Sun, 4 Jan 2026 09:07:49 +0100 Subject: [PATCH 1/3] Compilation fixes for DJGPP I just want a library only, so changes to the library code. It is the first step. I compiled library by these commands: mkdir build cd build cmake .. make clean /usr/bin/i586-pc-msdosdjgpp-gcc -D_GNU_SOURCE -I/home/git/GIT/quickjs -O3 -DNDEBUG -std=gnu11 -Wall -Wextra -Wformat=2 -Wno-implicit-fallthrough -Wno-sign-compare -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-result -Wno-stringop-truncation -Wno-array-bounds -funsigned-char -MD -MT CMakeFiles/qjs.dir/cutils.c.o -MF CMakeFiles/qjs.dir/cutils.c.o.d -o CMakeFiles/qjs.dir/cutils.c.o -c /home/git/GIT/quickjs/cutils.c /usr/bin/i586-pc-msdosdjgpp-gcc -D_GNU_SOURCE -I/home/git/GIT/quickjs -O3 -DNDEBUG -std=gnu11 -Wall -Wextra -Wformat=2 -Wno-implicit-fallthrough -Wno-sign-compare -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-result -Wno-stringop-truncation -Wno-array-bounds -funsigned-char -MD -MT CMakeFiles/qjs.dir/dtoa.c.o -MF CMakeFiles/qjs.dir/dtoa.c.o.d -o CMakeFiles/qjs.dir/dtoa.c.o -c /home/git/GIT/quickjs/dtoa.c /usr/bin/i586-pc-msdosdjgpp-gcc -D_GNU_SOURCE -I/home/git/GIT/quickjs -O3 -DNDEBUG -std=gnu11 -Wall -Wextra -Wformat=2 -Wno-implicit-fallthrough -Wno-sign-compare -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-result -Wno-stringop-truncation -Wno-array-bounds -funsigned-char -MD -MT CMakeFiles/qjs.dir/libregexp.c.o -MF CMakeFiles/qjs.dir/libregexp.c.o.d -o CMakeFiles/qjs.dir/libregexp.c.o -c /home/git/GIT/quickjs/libregexp.c /usr/bin/i586-pc-msdosdjgpp-gcc -D_GNU_SOURCE -I/home/git/GIT/quickjs -O3 -DNDEBUG -std=gnu11 -Wall -Wextra -Wformat=2 -Wno-implicit-fallthrough -Wno-sign-compare -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-result -Wno-stringop-truncation -Wno-array-bounds -funsigned-char -MD -MT CMakeFiles/qjs.dir/libunicode.c.o -MF CMakeFiles/qjs.dir/libunicode.c.o.d -o CMakeFiles/qjs.dir/libunicode.c.o -c /home/git/GIT/quickjs/libunicode.c /usr/bin/i586-pc-msdosdjgpp-gcc -D_GNU_SOURCE -I/home/git/GIT/quickjs -O3 -DNDEBUG -std=gnu11 -Wall -Wextra -Wformat=2 -Wno-implicit-fallthrough -Wno-sign-compare -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-result -Wno-stringop-truncation -Wno-array-bounds -funsigned-char -MD -MT CMakeFiles/qjs.dir/quickjs.c.o -MF CMakeFiles/qjs.dir/quickjs.c.o.d -o CMakeFiles/qjs.dir/quickjs.c.o -c /home/git/GIT/quickjs/quickjs.c /usr/bin/i586-pc-msdosdjgpp-ar qc libqjs.a CMakeFiles/qjs.dir/cutils.c.o CMakeFiles/qjs.dir/dtoa.c.o CMakeFiles/qjs.dir/libregexp.c.o CMakeFiles/qjs.dir/libunicode.c.o CMakeFiles/qjs.dir/quickjs.c.o /usr/bin/ranlib libqjs.a --- cutils.c | 7 +++++++ cutils.h | 4 ++-- quickjs.c | 4 +++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cutils.c b/cutils.c index 7d36ddfdb..7816910b6 100644 --- a/cutils.c +++ b/cutils.c @@ -937,12 +937,19 @@ uint64_t js__hrtime_ns(void) { } #else uint64_t js__hrtime_ns(void) { +#ifdef __DJGPP + struct timeval tv; + if (gettimeofday(&tv, NULL)) + abort(); + return ((uint64_t)tv.tv_sec * NANOSEC) + tv.tv_usec * 1000; +#else struct timespec t; if (clock_gettime(CLOCK_MONOTONIC, &t)) abort(); return t.tv_sec * NANOSEC + t.tv_nsec; +#endif } #endif diff --git a/cutils.h b/cutils.h index eaf339842..aa561ce1c 100644 --- a/cutils.h +++ b/cutils.h @@ -50,7 +50,7 @@ extern "C" { #elif defined(_WIN32) #include #endif -#if !defined(_WIN32) && !defined(EMSCRIPTEN) && !defined(__wasi__) +#if !defined(_WIN32) && !defined(EMSCRIPTEN) && !defined(__wasi__) && !defined(__DJGPP) #include #include #endif @@ -578,7 +578,7 @@ int js_exepath(char* buffer, size_t* size); /* Cross-platform threading APIs. */ -#if defined(EMSCRIPTEN) || defined(__wasi__) +#if defined(EMSCRIPTEN) || defined(__wasi__) || defined(__DJGPP) #define JS_HAVE_THREADS 0 diff --git a/quickjs.c b/quickjs.c index 740f07f52..6865b8b8a 100644 --- a/quickjs.c +++ b/quickjs.c @@ -40,7 +40,9 @@ #include #endif #include +#ifndef __DJGPP #include +#endif #include #include "cutils.h" @@ -68,7 +70,7 @@ // atomic_store etc. are completely busted in recent versions of tcc; // somehow the compiler forgets to load |ptr| into %rdi when calling // the __atomic_*() helpers in its lib/stdatomic.c and lib/atomic.S -#if !defined(__TINYC__) && !defined(EMSCRIPTEN) && !defined(__wasi__) && !__STDC_NO_ATOMICS__ +#if !defined(__TINYC__) && !defined(EMSCRIPTEN) && !defined(__wasi__) && !__STDC_NO_ATOMICS__ && !defined(__DJGPP) #include "quickjs-c-atomics.h" #define CONFIG_ATOMICS #endif From e1e7717b001bf4ed176434381578a3619a52cd77 Mon Sep 17 00:00:00 2001 From: rkd77 Date: Sun, 4 Jan 2026 12:22:44 +0100 Subject: [PATCH 2/3] Update cutils.c no need for cast Co-authored-by: Ben Noordhuis --- cutils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cutils.c b/cutils.c index 7816910b6..487fb2b09 100644 --- a/cutils.c +++ b/cutils.c @@ -941,7 +941,7 @@ uint64_t js__hrtime_ns(void) { struct timeval tv; if (gettimeofday(&tv, NULL)) abort(); - return ((uint64_t)tv.tv_sec * NANOSEC) + tv.tv_usec * 1000; + return tv.tv_sec * NANOSEC + tv.tv_usec * 1000; #else struct timespec t; From 9fd16b1bf8c92a9aced29fda3935452893b942a1 Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Sun, 4 Jan 2026 12:32:10 +0100 Subject: [PATCH 3/3] Removed include fenv.h --- quickjs.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/quickjs.c b/quickjs.c index 6865b8b8a..34480196e 100644 --- a/quickjs.c +++ b/quickjs.c @@ -40,9 +40,6 @@ #include #endif #include -#ifndef __DJGPP -#include -#endif #include #include "cutils.h"