31
31
CONFIG_LTO =y
32
32
# consider warnings as errors (for development)
33
33
# CONFIG_WERROR=y
34
-
35
- ifndef CONFIG_WIN32
36
34
# force 32 bit build for some utilities
37
- CONFIG_M32 =y
38
- endif
35
+ # CONFIG_M32=y
36
+
39
37
ifdef CONFIG_DARWIN
40
38
# use clang instead of gcc
41
39
CONFIG_CLANG =y
60
58
EXE =
61
59
endif
62
60
ifdef CONFIG_CLANG
61
+ HOST_CC =clang
63
62
CC =$(CROSS_PREFIX ) clang
64
63
CFLAGS =-g -Wall -MMD -MF $(OBJDIR ) /$(@F ) .d
65
64
CFLAGS += -Wextra
@@ -80,15 +79,17 @@ ifdef CONFIG_CLANG
80
79
endif
81
80
endif
82
81
else
82
+ HOST_CC =gcc
83
83
CC =$(CROSS_PREFIX ) gcc
84
84
CFLAGS =-g -Wall -MMD -MF $(OBJDIR ) /$(@F ) .d
85
- CFLAGS += -Wno-array-bounds
85
+ CFLAGS += -Wno-array-bounds -Wno-format-truncation
86
86
ifdef CONFIG_LTO
87
87
AR =$(CROSS_PREFIX ) gcc-ar
88
88
else
89
89
AR =$(CROSS_PREFIX ) ar
90
90
endif
91
91
endif
92
+ STRIP =$(CROSS_PREFIX ) strip
92
93
ifdef CONFIG_WERROR
93
94
CFLAGS+ =-Werror
94
95
endif
@@ -118,7 +119,17 @@ else
118
119
LDEXPORT =-rdynamic
119
120
endif
120
121
121
- PROGS =qjs$(EXE ) qjsbn$(EXE ) qjsc qjsbnc run-test262 run-test262-bn
122
+ PROGS =qjs$(EXE ) qjsbn$(EXE ) qjsc$(EXE ) qjsbnc$(EXE ) run-test262 run-test262-bn
123
+ ifneq ($(CROSS_PREFIX ) ,)
124
+ QJSC_CC =gcc
125
+ QJSC =./host-qjsc
126
+ QJSBNC =./host-qjsbnc
127
+ PROGS+ =$(QJSC ) $(QJSBNC )
128
+ else
129
+ QJSC_CC =$(CC )
130
+ QJSC =./qjsc$(EXE )
131
+ QJSBNC =./qjsbnc$(EXE )
132
+ endif
122
133
ifndef CONFIG_WIN32
123
134
PROGS+ =qjscalc
124
135
endif
@@ -129,14 +140,15 @@ PROGS+=libquickjs.a libquickjs.bn.a
129
140
ifdef CONFIG_LTO
130
141
PROGS+ =libquickjs.lto.a libquickjs.bn.lto.a
131
142
endif
143
+
132
144
# examples
145
+ ifeq ($(CROSS_PREFIX ) ,)
133
146
ifdef CONFIG_ASAN
134
147
PROGS+ =
135
- else ifdef CONFIG_WIN32
136
- PROGS+ =
137
148
else
138
149
PROGS+ =examples/hello examples/hello_module examples/c_module
139
150
endif
151
+ endif
140
152
141
153
all : $(OBJDIR ) $(OBJDIR ) /quickjs.check.o $(OBJDIR ) /qjs.check.o $(PROGS )
142
154
@@ -162,20 +174,32 @@ qjs$(EXE): $(QJS_OBJS)
162
174
qjs-debug$(EXE ) : $(patsubst % .o, % .debug.o, $(QJS_OBJS ) )
163
175
$(CC ) $(LDFLAGS ) -o $@ $^ $(LIBS )
164
176
165
- qjsc : $(OBJDIR ) /qjsc.o $(QJS_LIB_OBJS )
177
+ qjsc$( EXE ) : $(OBJDIR ) /qjsc.o $(QJS_LIB_OBJS )
166
178
$(CC ) $(LDFLAGS ) -o $@ $^ $(LIBS )
167
179
168
- qjsbnc : $(OBJDIR ) /qjsc.bn.o $(QJSBN_LIB_OBJS )
180
+ qjsbnc$( EXE ) : $(OBJDIR ) /qjsc.bn.o $(QJSBN_LIB_OBJS )
169
181
$(CC ) $(LDFLAGS ) -o $@ $^ $(LIBS )
170
182
183
+ ifneq ($(CROSS_PREFIX ) ,)
184
+
185
+ $(QJSC ) : $(OBJDIR ) /qjsc.host.o \
186
+ $(patsubst %.o, %.host.o, $(QJS_LIB_OBJS))
187
+ $(HOST_CC) $(LDFLAGS) -o $@ $^ $(LIBS)
188
+
189
+ $(QJSBNC ) : $(OBJDIR ) /qjsc.bn.host.o \
190
+ $(patsubst %.o, %.host.o, $(QJSBN_LIB_OBJS))
191
+ $(HOST_CC) $(LDFLAGS) -o $@ $^ $(LIBS)
192
+
193
+ endif # CROSS_PREFIX
171
194
172
- QJSC_DEFINES:=-DCONFIG_CC =\"$(CC ) \"
195
+ QJSC_DEFINES:=-DCONFIG_CC =\"$(QJSC_CC ) \" -DCONFIG_PREFIX=\" $( prefix ) \"
173
196
ifdef CONFIG_LTO
174
197
QJSC_DEFINES+ =-DCONFIG_LTO
175
198
endif
176
- QJSC_DEFINES+= -DCONFIG_PREFIX =\"$(prefix ) \"
199
+ QJSC_HOST_DEFINES:=-DCONFIG_CC =\" $( HOST_CC ) \" -DCONFIG_PREFIX=\"$(prefix ) \"
177
200
178
201
$(OBJDIR ) /qjsc.o $(OBJDIR ) /qjsc.bn.o : CFLAGS+=$(QJSC_DEFINES )
202
+ $(OBJDIR ) /qjsc.host.o $(OBJDIR ) /qjsc.bn.host.o : CFLAGS+=$(QJSC_HOST_DEFINES )
179
203
180
204
qjs32 : $(patsubst % .o, % .m32.o, $(QJS_OBJS ) )
181
205
$(CC ) -m32 $(LDFLAGS ) $(LDEXPORT ) -o $@ $^ $(LIBS )
@@ -216,14 +240,14 @@ libquickjs.bn.a: $(patsubst %.o, %.nolto.o, $(QJSBN_LIB_OBJS))
216
240
$(AR ) rcs $@ $^
217
241
endif # CONFIG_LTO
218
242
219
- repl.c : qjsc repl.js
220
- ./qjsc -c -o $@ -m repl.js
243
+ repl.c : $( QJSC ) repl.js
244
+ $( QJSC ) -c -o $@ -m repl.js
221
245
222
- repl-bn.c : qjsbnc repl.js
223
- ./qjsbnc -c -o $@ -m repl.js
246
+ repl-bn.c : $( QJSBNC ) repl.js
247
+ $( QJSBNC ) -c -o $@ -m repl.js
224
248
225
- qjscalc.c : qjsbnc qjscalc.js
226
- ./qjsbnc -c -o $@ qjscalc.js
249
+ qjscalc.c : $( QJSBNC ) qjscalc.js
250
+ $( QJSBNC ) -c -o $@ qjscalc.js
227
251
228
252
ifneq ($(wildcard unicode/UnicodeData.txt) ,)
229
253
$(OBJDIR)/libunicode.o $(OBJDIR)/libunicode.m32.o $(OBJDIR)/libunicode.m32s.o $(OBJDIR)/libunicode.bn.o $(OBJDIR)/libunicode.bn.m32.o \
@@ -253,12 +277,18 @@ run-test262-bn32: $(patsubst %.o, %.m32.o, $(OBJDIR)/run-test262.bn.o $(QJSBN_LI
253
277
$(OBJDIR ) /% .o : % .c | $(OBJDIR )
254
278
$(CC ) $(CFLAGS_OPT ) -c -o $@ $<
255
279
280
+ $(OBJDIR ) /% .host.o : % .c | $(OBJDIR )
281
+ $(HOST_CC ) $(CFLAGS_OPT ) -c -o $@ $<
282
+
256
283
$(OBJDIR ) /% .pic.o : % .c | $(OBJDIR )
257
284
$(CC ) $(CFLAGS_OPT ) -fPIC -DJS_SHARED_LIBRARY -c -o $@ $<
258
285
259
286
$(OBJDIR ) /% .bn.o : % .c | $(OBJDIR )
260
287
$(CC ) $(CFLAGS_OPT ) -DCONFIG_BIGNUM -c -o $@ $<
261
288
289
+ $(OBJDIR ) /% .bn.host.o : % .c | $(OBJDIR )
290
+ $(HOST_CC ) $(CFLAGS_OPT ) -DCONFIG_BIGNUM -c -o $@ $<
291
+
262
292
$(OBJDIR ) /% .nolto.o : % .c | $(OBJDIR )
263
293
$(CC ) $(CFLAGS_NOLTO ) -c -o $@ $<
264
294
@@ -289,8 +319,8 @@ regexp_test: libregexp.c libunicode.c cutils.c
289
319
jscompress : jscompress.c
290
320
$(CC ) $(LDFLAGS ) $(CFLAGS ) -o $@ jscompress.c
291
321
292
- unicode_gen : unicode_gen.c cutils.c libunicode.c unicode_gen_def.h
293
- $(CC ) $(LDFLAGS ) $(CFLAGS ) -o $@ unicode_gen.c cutils.c
322
+ unicode_gen : $( OBJDIR ) / unicode_gen.host.o $( OBJDIR ) / cutils.host.o libunicode.c unicode_gen_def.h
323
+ $(HOST_CC ) $(LDFLAGS ) $(CFLAGS ) -o $@ $( OBJDIR ) / unicode_gen.host.o $( OBJDIR ) / cutils.host.o
294
324
295
325
clean :
296
326
rm -f repl.c repl-bn.c qjscalc.c out.c
@@ -300,17 +330,17 @@ clean:
300
330
rm -rf run-test262-debug run-test262-32 run-test262-bn32
301
331
302
332
install : all
303
- mkdir -p " $( prefix) /bin"
304
- install -m755 -s qjs qjsc qjsbn qjsbnc " $( prefix) /bin"
305
- ln -sf qjsbn " $( prefix) /bin/qjscalc"
306
- mkdir -p " $( prefix) /lib/quickjs"
307
- install -m755 libquickjs.a libquickjs.bn.a " $( prefix) /lib/quickjs"
333
+ mkdir -p " $( DESTDIR) $( prefix) /bin"
334
+ $(STRIP ) qjs qjsbn qjsc qjsbnc
335
+ install -m755 qjs qjsbn qjsc qjsbnc " $( DESTDIR) $( prefix) /bin"
336
+ ln -sf qjsbn " $( DESTDIR) $( prefix) /bin/qjscalc"
337
+ mkdir -p " $( DESTDIR) $( prefix) /lib/quickjs"
338
+ install -m644 libquickjs.a libquickjs.bn.a " $( DESTDIR) $( prefix) /lib/quickjs"
308
339
ifdef CONFIG_LTO
309
- install -m755 libquickjs.lto.a libquickjs.bn.lto.a "$(prefix)/lib/quickjs"
340
+ install -m644 libquickjs.lto.a libquickjs.bn.lto.a "$(DESTDIR) $(prefix)/lib/quickjs"
310
341
endif
311
- mkdir -p "$(prefix)/include/quickjs"
312
- install -m755 quickjs.h quickjs-libc.h "$(prefix)/include/quickjs"
313
-
342
+ mkdir -p "$(DESTDIR)$(prefix)/include/quickjs"
343
+ install -m644 quickjs.h quickjs-libc.h "$(DESTDIR)$(prefix)/include/quickjs"
314
344
315
345
# ##############################################################################
316
346
# examples
@@ -319,10 +349,10 @@ endif
319
349
HELLO_SRCS =examples/hello.js
320
350
HELLO_OPTS =-fno-string-normalize -fno-map -fno-promise -fno-typedarray \
321
351
-fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
322
- -fno-date
352
+ -fno-date -fno-module-loader
323
353
324
- hello.c : qjsc $(HELLO_SRCS )
325
- ./qjsc -e $(HELLO_OPTS ) -o $@ $(HELLO_SRCS )
354
+ hello.c : $( QJSC ) $(HELLO_SRCS )
355
+ $( QJSC ) -e $(HELLO_OPTS ) -o $@ $(HELLO_SRCS )
326
356
327
357
ifdef CONFIG_M32
328
358
examples/hello : $(OBJDIR ) /hello.m32s.o $(patsubst % .o, % .m32s.o, $(QJS_LIB_OBJS ) )
@@ -337,13 +367,13 @@ HELLO_MODULE_SRCS=examples/hello_module.js
337
367
HELLO_MODULE_OPTS =-fno-string-normalize -fno-map -fno-promise -fno-typedarray \
338
368
-fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
339
369
-fno-date -m
340
- examples/hello_module : qjsc libquickjs$(LTOEXT ) .a $(HELLO_MODULE_SRCS )
341
- ./qjsc $(HELLO_MODULE_OPTS ) -o $@ $(HELLO_MODULE_SRCS )
370
+ examples/hello_module : $( QJSC ) libquickjs$(LTOEXT ) .a $(HELLO_MODULE_SRCS )
371
+ $( QJSC ) $(HELLO_MODULE_OPTS ) -o $@ $(HELLO_MODULE_SRCS )
342
372
343
373
# use of an external C module (static compilation)
344
374
345
- c_module.c : qjsc examples/c_module.js
346
- ./qjsc -e -M examples/fib.so,fib -m -o $@ examples/c_module.js
375
+ c_module.c : $( QJSC ) examples/c_module.js
376
+ $( QJSC ) -e -M examples/fib.so,fib -m -o $@ examples/c_module.js
347
377
348
378
examples/c_module : $(OBJDIR ) /c_module.o $(OBJDIR ) /fib.o libquickjs$(LTOEXT ) .a
349
379
$(CC ) $(LDFLAGS ) -o $@ $^ $(LIBS )
0 commit comments