Skip to content

Commit 1884d1b

Browse files
committed
Add support for building MorphOS libraries
1 parent 060bcd3 commit 1884d1b

1 file changed

Lines changed: 94 additions & 9 deletions

File tree

buildsys.mk.in

Lines changed: 94 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,20 +104,21 @@ OBJS11 = ${OBJS10:.S=.o}
104104
OBJS += ${OBJS11:.xpm=.o}
105105

106106
LIB_OBJS = ${OBJS:.o=.lib.o}
107+
MORPHOS_LIB_OBJS = ${OBJS:.o=.moslib.o}
107108
PLUGIN_OBJS = ${OBJS:.o=.plugin.o}
108109

109110
MO_FILES = ${LOCALES:.po=.mo}
110111

111112
.SILENT:
112113
.SUFFIXES:
113-
.SUFFIXES: .beam .c .c.dep .cc .cc.dep .class .cxx .cxx.dep .d .erl .lib.o .java .mo .m .m.dep .mm .mm.dep .o .plugin.o .po .py .pyc .rc .S .S.dep .xpm
114+
.SUFFIXES: .beam .c .c.dep .cc .cc.dep .class .cxx .cxx.dep .d .erl .lib.o .java .mo .m .m.dep .mm .mm.dep .moslib.o .o .plugin.o .po .py .pyc .rc .S .S.dep .xpm
114115
.PHONY: all subdirs subdirs-after pre-depend depend install install-extra uninstall uninstall-extra clean distclean locales ${SUBDIRS} ${SUBDIRS_AFTER}
115116

116117
all:
117118
${MAKE} pre-all
118119
${MAKE} subdirs
119120
${MAKE} depend
120-
${MAKE} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST} ${SHARED_LIB} ${SHARED_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${PROG} ${PROG_NOINST} ${JARFILE} locales
121+
${MAKE} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST} ${SHARED_LIB} ${SHARED_LIB_NOINST} ${MORPHOS_LIB} ${MORPHOS_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${PROG} ${PROG_NOINST} ${JARFILE} locales
121122
${MAKE} subdirs-after
122123
${MAKE} post-all
123124

@@ -187,27 +188,27 @@ depend: pre-depend ${SRCS}
187188

188189
.c.c.dep:
189190
${CPP} ${CPPFLAGS} ${CFLAGS} -M $< | \
190-
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
191+
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.moslib.o \1.plugin.o:/' >$@ || \
191192
{ rm -f $@; false; }
192193

193194
.cc.cc.dep .cxx.cxx.dep:
194195
${CPP} ${CPPFLAGS} ${CXXFLAGS} -M $< | \
195-
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
196+
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.moslib.o \1.plugin.o:/' >$@ || \
196197
{ rm -f $@; false; }
197198

198199
.m.m.dep:
199200
${CPP} ${CPPFLAGS} ${OBJCFLAGS} -M $< | \
200-
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
201+
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.moslib.o \1.plugin.o:/' >$@ || \
201202
{ rm -f $@; false; }
202203

203204
.mm.mm.dep:
204-
${CPP} ${CPPFLAGS} ${OBJCXXFLAGS} -M $< | \
205-
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
205+
${CPP} ${CPPFLAGS} ${OBJCPPFLAGS} -M $< | \
206+
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.moslib.o \1.plugin.o:/' >$@ || \
206207
{ rm -f $@; false; }
207208

208209
.S.S.dep:
209210
${CPP} ${CPPFLAGS} ${ASFLAGS} -M $< | \
210-
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
211+
sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.moslib.o \1.plugin.o:/' >$@ || \
211212
{ rm -f $@; false; }
212213

213214
pre-depend:
@@ -273,6 +274,42 @@ ${SHARED_LIB} ${SHARED_LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS} ${LIB_OBJS_EXTRA}
273274
rm -fr $$dir; \
274275
done
275276

277+
${MORPHOS_LIB} ${MORPHOS_LIB_NOINST}: ${EXT_DEPS} ${MORPHOS_LIB_OBJS} ${MORPHOS_LIB_OBJS_EXTRA}
278+
${LINK_STATUS}
279+
out="$@"; \
280+
objs=""; \
281+
ars=""; \
282+
for i in ${MORPHOS_LIB_OBJS} ${MORPHOS_LIB_OBJS_EXTRA}; do \
283+
case $$i in \
284+
*.a) \
285+
ars="$$ars $$i" \
286+
;; \
287+
*.o) \
288+
objs="$$objs $$i" \
289+
;; \
290+
esac \
291+
done; \
292+
for i in $$ars; do \
293+
dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
294+
rm -fr $$dir; \
295+
mkdir -p $$dir; \
296+
cd $$dir; \
297+
${AR} x ../$$i; \
298+
for j in *.o; do \
299+
objs="$$objs $$dir/$$j"; \
300+
done; \
301+
cd ..; \
302+
done; \
303+
if ${LD} -o $@ $$objs -nostartfiles ${LDFLAGS} ${LIBS}; then \
304+
${LINK_OK}; \
305+
else \
306+
${LINK_FAILED}; \
307+
fi; \
308+
for i in $$ars; do \
309+
dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
310+
rm -fr $$dir; \
311+
done
312+
276313
${PLUGIN} ${PLUGIN_NOINST}: ${EXT_DEPS} ${PLUGIN_OBJS}
277314
${LINK_STATUS}
278315
out="$@"; \
@@ -405,6 +442,15 @@ locales: ${MO_FILES}
405442
else \
406443
${COMPILE_LIB_FAILED}; \
407444
fi
445+
.c.moslib.o:
446+
${COMPILE_MOSLIB_STATUS}
447+
in="$<"; \
448+
out="$@"; \
449+
if ${CC} -mbaserel32 ${CFLAGS} ${CPPFLAGS} ${CFLAGS_$@} -c -o $@ $<; then \
450+
${COMPILE_MOSLIB_OK}; \
451+
else \
452+
${COMPILE_MOSLIB_FAILED}; \
453+
fi
408454
.c.plugin.o:
409455
${COMPILE_PLUGIN_STATUS}
410456
in="$<"; \
@@ -433,6 +479,15 @@ locales: ${MO_FILES}
433479
else \
434480
${COMPILE_LIB_FAILED}; \
435481
fi
482+
.cc.moslib.o .cxx.moslib.o:
483+
${COMPILE_MOSLIB_STATUS}
484+
in="$<"; \
485+
out="$@"; \
486+
if ${CXX} -mbaserel32 ${CXXFLAGS} ${CPPFLAGS} ${CXXFLAGS_$@} -c -o $@ $<; then \
487+
${COMPILE_MOSLIB_OK}; \
488+
else \
489+
${COMPILE_MOSLIB_FAILED}; \
490+
fi
436491
.cc.plugin.o .cxx.plugin.o:
437492
${COMPILE_PLUGIN_STATUS}
438493
in="$<"; \
@@ -499,6 +554,15 @@ locales: ${MO_FILES}
499554
else \
500555
${COMPILE_LIB_FAILED}; \
501556
fi
557+
.m.moslib.o:
558+
${COMPILE_MOSLIB_STATUS}
559+
in="$<"; \
560+
out="$@"; \
561+
if ${OBJC} -mbaserel32 ${OBJCFLAGS} ${CPPFLAGS} ${OBJCFLAGS_$@} -c -o $@ $<; then \
562+
${COMPILE_MOSLIB_OK}; \
563+
else \
564+
${COMPILE_MOSLIB_FAILED}; \
565+
fi
502566
.m.plugin.o:
503567
${COMPILE_PLUGIN_STATUS}
504568
in="$<"; \
@@ -527,6 +591,15 @@ locales: ${MO_FILES}
527591
else \
528592
${COMPILE_LIB_FAILED}; \
529593
fi
594+
.mm.moslib.o:
595+
${COMPILE_MOSLIB_STATUS}
596+
in="$<"; \
597+
out="$@"; \
598+
if ${OBJCXX} -mbaserel32 ${OBJCXXFLAGS} ${CPPFLAGS} ${OBJCXXFLAGS_$@} -c -o $@ $<; then \
599+
${COMPILE_MOSLIB_OK}; \
600+
else \
601+
${COMPILE_MOSLIB_FAILED}; \
602+
fi
530603
.mm.plugin.o:
531604
${COMPILE_PLUGIN_STATUS}
532605
in="$<"; \
@@ -567,7 +640,7 @@ locales: ${MO_FILES}
567640
${COMPILE_FAILED}; \
568641
fi
569642

570-
.S.o:
643+
.S.o .S.moslib.o:
571644
${COMPILE_STATUS}
572645
in="$<"; \
573646
out="$@"; \
@@ -613,6 +686,15 @@ locales: ${MO_FILES}
613686
else \
614687
${COMPILE_LIB_FAILED}; \
615688
fi
689+
.xpm.moslib.o:
690+
${COMPILE_MOSLIB_STATUS}
691+
in="$<"; \
692+
out="$@"; \
693+
if ${CC} -mbasel32 ${CFLAGS} ${CPPFLAGS} ${CFLAGS_$@} -x c -c -o $@ $<; then \
694+
${COMPILE_MOSLIB_OK}; \
695+
else \
696+
${COMPILE_MOSLIB_FAILED}; \
697+
fi
616698
.xpm.plugin.o:
617699
${COMPILE_PLUGIN_STATUS}
618700
in="$<"; \
@@ -876,6 +958,9 @@ COMPILE_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_
876958
COMPILE_LIB_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF3@ (lib)...@TERM_SGR0@\r" "$<"
877959
COMPILE_LIB_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF2@ (lib).@TERM_SGR0@\n" "$<"
878960
COMPILE_LIB_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF1@ (lib)!@TERM_SGR0@\n" "$<"; exit $$err
961+
COMPILE_MOSLIB_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF3@ (moslib)...@TERM_SGR0@\r" "$<"
962+
COMPILE_MOSLIB_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF2@ (moslib).@TERM_SGR0@\n" "$<"
963+
COMPILE_MOSLIB_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF1@ (moslib)!@TERM_SGR0@\n" "$<"; exit $$err
879964
COMPILE_PLUGIN_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF3@ (plugin)...@TERM_SGR0@\r" "$<"
880965
COMPILE_PLUGIN_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF2@ (plugin).@TERM_SGR0@\n" "$<"
881966
COMPILE_PLUGIN_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF1@ (plugin)!@TERM_SGR0@\n" "$<"; exit $$err

0 commit comments

Comments
 (0)