Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 31 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,22 @@ CFLAGS_DEBUG=$(CFLAGS) -O0
CFLAGS_SMALL=$(CFLAGS) -Os
CFLAGS_OPT=$(CFLAGS) -O2
CFLAGS_NOLTO:=$(CFLAGS_OPT)
# Host flags for cross-compilation (avoid target-specific flags like -mcpu)
ifdef CFLAGS_FOR_BUILD
HOST_CFLAGS:=$(CFLAGS_FOR_BUILD) $(DEFINES) -O2
else ifdef CC_FOR_BUILD
# Cross-compiling but no CFLAGS_FOR_BUILD - use minimal safe flags
HOST_CFLAGS:=-g -Wall -O2 -fwrapv $(DEFINES)
else
HOST_CFLAGS:=$(CFLAGS_OPT)
endif
ifdef LDFLAGS_FOR_BUILD
HOST_LDFLAGS:=$(LDFLAGS_FOR_BUILD)
else ifdef CC_FOR_BUILD
HOST_LDFLAGS:=-g
else
HOST_LDFLAGS:=$(LDFLAGS)
endif
ifdef CONFIG_COSMO
LDFLAGS+=-s # better to strip by default
else
Expand Down Expand Up @@ -208,10 +224,18 @@ endif

PROGS=qjs$(EXE) qjsc$(EXE) run-test262$(EXE)

# Cross-compilation support:
# - CROSS_PREFIX: traditional approach (e.g., CROSS_PREFIX=arm-linux-gnueabihf-)
# - CC_FOR_BUILD: build machine compiler when CC targets a different architecture
ifneq ($(CROSS_PREFIX),)
QJSC_CC=gcc
QJSC=./host-qjsc
PROGS+=$(QJSC)
else ifdef CC_FOR_BUILD
QJSC_CC=$(CC)
QJSC=./host-qjsc
PROGS+=$(QJSC)
HOST_CC:=$(CC_FOR_BUILD)
else
QJSC_CC=$(CC)
QJSC=./qjsc$(EXE)
Expand All @@ -221,8 +245,8 @@ ifdef CONFIG_LTO
PROGS+=libquickjs.lto.a
endif

# examples
ifeq ($(CROSS_PREFIX),)
# examples (skip when cross-compiling via CROSS_PREFIX or CC_FOR_BUILD)
ifeq ($(CROSS_PREFIX)$(CC_FOR_BUILD),)
ifndef CONFIG_ASAN
ifndef CONFIG_MSAN
ifndef CONFIG_UBSAN
Expand Down Expand Up @@ -277,13 +301,14 @@ fuzz_regexp: $(OBJDIR)/fuzz_regexp.o $(OBJDIR)/libregexp.fuzz.o $(OBJDIR)/cutils

libfuzzer: fuzz_eval fuzz_compile fuzz_regexp

ifneq ($(CROSS_PREFIX),)
# Build host-qjsc for cross-compilation (either via CROSS_PREFIX or CC_FOR_BUILD)
ifneq ($(CROSS_PREFIX)$(CC_FOR_BUILD),)

$(QJSC): $(OBJDIR)/qjsc.host.o \
$(patsubst %.o, %.host.o, $(QJS_LIB_OBJS))
$(HOST_CC) $(LDFLAGS) -o $@ $^ $(HOST_LIBS)
$(HOST_CC) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LIBS)

endif #CROSS_PREFIX
endif #CROSS_PREFIX or CC_FOR_BUILD

QJSC_DEFINES:=-DCONFIG_CC=\"$(QJSC_CC)\" -DCONFIG_PREFIX=\"$(PREFIX)\"
ifdef CONFIG_LTO
Expand Down Expand Up @@ -336,7 +361,7 @@ $(OBJDIR)/fuzz_%.o: fuzz/fuzz_%.c | $(OBJDIR)
$(CC) $(CFLAGS_OPT) -c -I. -o $@ $<

$(OBJDIR)/%.host.o: %.c | $(OBJDIR)
$(HOST_CC) $(CFLAGS_OPT) -c -o $@ $<
$(HOST_CC) $(HOST_CFLAGS) -c -o $@ $<

$(OBJDIR)/%.pic.o: %.c | $(OBJDIR)
$(CC) $(CFLAGS_OPT) -fPIC -DJS_SHARED_LIBRARY -c -o $@ $<
Expand Down