summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Justin Kerk <dopefishjustin@gmail.com>2015-01-31 23:13:50 -0800
committer Justin Kerk <dopefishjustin@gmail.com>2015-01-31 23:13:50 -0800
commit31bc7f4bbb8f805e1f05623d9d8d784750de92ad (patch)
tree8f415415d5a143366f5221f1aad5332a61f6fa9e
parent5dab7eb95c2177958e0543ab7c08db26c1d4bda7 (diff)
Work around Emscripten linking issues by avoiding ar altogether (nw)
See https://github.com/kripken/emscripten/issues/2619
-rw-r--r--makefile25
1 files changed, 20 insertions, 5 deletions
diff --git a/makefile b/makefile
index 9a762b8d259..c7922e99b90 100644
--- a/makefile
+++ b/makefile
@@ -650,9 +650,6 @@ ifeq ($(COMMAND_MODE),"legacy")
ARFLAGS = -crs
endif
endif
-ifeq ($(TARGETOS),emscripten)
-ARFLAGS = cr
-endif
#-------------------------------------------------
@@ -929,11 +926,19 @@ $(sort $(OBJDIRS)):
ifndef EXECUTABLE_DEFINED
-$(EMULATOR): $(EMUINFOOBJ) $(DRIVLISTOBJ) $(DRVLIBS) $(LIBOSD) $(LIBBUS) $(LIBOPTIONAL) $(LIBEMU) $(LIBDASM) $(LIBUTIL) $(EXPAT) $(SOFTFLOAT) $(JPEG_LIB) $(FLAC_LIB) $(7Z_LIB) $(FORMATS_LIB) $(LUA_LIB) $(SQLITE3_LIB) $(WEB_LIB) $(ZLIB) $(LIBOCORE) $(MIDI_LIB) $(RESFILE)
+EMULATOROBJLIST = $(EMUINFOOBJ) $(DRIVLISTOBJ) $(DRVLIBS) $(LIBOSD) $(LIBBUS) $(LIBOPTIONAL) $(LIBEMU) $(LIBDASM) $(LIBUTIL) $(EXPAT) $(SOFTFLOAT) $(JPEG_LIB) $(FLAC_LIB) $(7Z_LIB) $(FORMATS_LIB) $(LUA_LIB) $(SQLITE3_LIB) $(WEB_LIB) $(ZLIB) $(LIBOCORE) $(MIDI_LIB) $(RESFILE)
+
+ifeq ($(TARGETOS),emscripten)
+EMULATOROBJ = $(EMULATOROBJLIST:.a=.bc)
+else
+EMULATOROBJ = $(EMULATOROBJLIST)
+endif
+
+$(EMULATOR): $(EMULATOROBJ)
$(CC) $(CDEFS) $(CFLAGS) -c $(SRC)/version.c -o $(VERSIONOBJ)
@echo Linking $@...
ifeq ($(TARGETOS),emscripten)
-# Emscripten's linker seems to be stricter about the ordering of .a files
+# Emscripten's linker seems to be stricter about the ordering of files
$(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) -Wl,--start-group $^ -Wl,--end-group $(LIBS) -o $@
else
$(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) $^ $(LIBS) -o $@
@@ -1002,10 +1007,20 @@ $(DRIVLISTSRC): $(SRC)/$(TARGET)/$(SUBTARGET).lst $(MAKELIST_TARGET)
@echo Building driver list $<...
@$(MAKELIST) $< >$@
+ifeq ($(TARGETOS),emscripten)
+# Avoid using .a files with Emscripten, link to bitcode instead
+$(OBJ)/%.a:
+ @echo Linking $@...
+ $(RM) $@
+ $(LD) $^ -o $@
+$(OBJ)/%.bc: $(OBJ)/%.a
+ @cp $< $@
+else
$(OBJ)/%.a:
@echo Archiving $@...
$(RM) $@
$(AR) $(ARFLAGS) $@ $^
+endif
ifeq ($(TARGETOS),macosx)
$(OBJ)/%.o: $(SRC)/%.m | $(OSPREBUILD)