Allow parallel builds: 1. First, modify make_voice_list script to accept the output file (defaulting to flite_voice_list.c as before). 2. Use a per-library subdirectory to build shared objecs from the .shared.a-counterparts -- using the same shared_os/ was causing conflicts, when multiple such libraries were built in parallel. 3. Use the new feature of make_voice_list (see 1.) to build separate voice-list files for each voice, thus avoiding the last sort of conflicts. This also removes linking unnecessary libraries into flite_VOICE executables -- only the library providing the particular voice is used now. -mi --- tools/make_voice_list 2009-04-08 09:18:42.000000000 -0400 +++ tools/make_voice_list 2014-12-01 19:39:40.000000000 -0500 @@ -36,26 +36,38 @@ ########################################################################### -rm -f flite_voice_list.c +case "$1" in +-o) + output=$2 + shift 2 + ;; +*) + output=flite_voice_list.c + ;; +esac + +rm -f $output +exec > $output + +cat << EOT +/* Generated automatically from make_voice_list */ + +#include "flite.h" + +EOT -echo "/* Generated automatically from make_voice_list */" >flite_voice_list.c -echo >>flite_voice_list.c -echo '#include "flite.h"' >>flite_voice_list.c -echo >>flite_voice_list.c for i in $* do - echo "cst_voice *register_"$i"(const char *voxdir);">>flite_voice_list.c + echo "cst_voice *register_"$i"(const char *voxdir);" done -echo >>flite_voice_list.c -echo "cst_val *flite_set_voice_list(void)" >>flite_voice_list.c -echo "{" >>flite_voice_list.c +echo +echo "cst_val *flite_set_voice_list(void)" +echo "{" for i in $* do - echo " flite_voice_list = cons_val(voice_val(register_"$i"(NULL)),flite_voice_list);" >>flite_voice_list.c + echo " flite_voice_list = cons_val(voice_val(register_"$i"(NULL)),flite_voice_list);" done - echo " flite_voice_list = val_reverse(flite_voice_list);" >>flite_voice_list.c - echo " return flite_voice_list;" >>flite_voice_list.c - -echo "}" >>flite_voice_list.c -echo >>flite_voice_list.c + echo " flite_voice_list = val_reverse(flite_voice_list);" + echo " return flite_voice_list;" +echo "}" --- config/common_make_rules 2009-07-30 10:52:56.000000000 -0400 +++ config/common_make_rules 2014-12-01 19:43:50.000000000 -0500 @@ -121,11 +121,11 @@ $(LIBDIR)/%.so: $(LIBDIR)/%.shared.a @ echo making $@ - @ rm -rf shared_os && mkdir shared_os + @ rm -rf shared_os.$* && mkdir shared_os.$* @ rm -f $@ $@.${PROJECT_VERSION} $@.${PROJECT_SHLIB_VERSION} - @ (cd shared_os && ar x ../$<) - @ (cd shared_os && $(CC) -shared -Wl,-soname,`basename $@`.${PROJECT_SHLIB_VERSION} -o ../$@.${PROJECT_VERSION} *.os) + @ (cd shared_os.$* && ar x ../$<) + @ (cd shared_os.$* && $(CC) -shared -Wl,-soname,`basename $@`.${PROJECT_SHLIB_VERSION} -o ../$@.${PROJECT_VERSION} *.os) @ (cd $(LIBDIR) && ln -s `basename $@.${PROJECT_VERSION}` `basename $@.${PROJECT_SHLIB_VERSION}` ) @ (cd $(LIBDIR) && ln -s `basename $@.${PROJECT_SHLIB_VERSION}` `basename $@` ) - @ rm -rf shared_os + @ rm -rf shared_os.$* $(OBJDIR)/.make_build_dirs: --- main/Makefile 2009-08-14 17:11:07.000000000 -0400 +++ main/Makefile 2014-12-01 21:07:35.000000000 -0500 @@ -40,5 +40,5 @@ ALL_DIRS= SRCS = flite_main.c flite_time_main.c t2p_main.c compile_regexes.c -OBJS = $(SRCS:.c=.o) flite_voice_list.o +OBJS = $(SRCS:.c=.o) FILES = Makefile $(SRCS) LOCAL_INCLUDES = @@ -47,8 +47,9 @@ $(BINDIR)/flite$(EXEEXT) \ $(BINDIR)/t2p$(EXEEXT) $(BINDIR)/compile_regexes$(EXEEXT) \ - flite_voice_list.c each $(EXTRABINS) + $(EXTRABINS) VOICES=$(VOXES) VOICELIBS=$(VOICES:%=flite_%) +VOICEEXES=$(VOICES:%=${BINDIR}/flite_%) flite_LIBS = $(VOICELIBS) $(LANGS:%=flite_%) $(LEXES:%=flite_%) flite @@ -76,5 +77,4 @@ ifdef SHFLAGS -flite_LIBS_flags += -Wl,-rpath $(LIBDIR) shared_libs: $(SHAREDLIBS) else @@ -82,9 +82,9 @@ endif -$(BINDIR)/flite$(EXEEXT): flite_main.o $(flite_LIBS_deps) +flite_voice_list.c: $(TOP)/tools/make_voice_list $(VOICES) - rm -f flite_voice_list.o - $(MAKE) flite_voice_list.o - $(CC) $(CFLAGS) -o $@ flite_main.o flite_voice_list.o $(flite_LIBS_flags) $(LDFLAGS) + +$(BINDIR)/flite$(EXEEXT): flite_main.o flite_voice_list.c $(flite_LIBS_deps) + $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ flite_main.o flite_voice_list.c $(flite_LIBS_flags) $(LDFLAGS) $(BINDIR)/flite_time$(EXEEXT): flite_time_main.o $(flite_time_LIBS_deps) @@ -98,15 +98,12 @@ $(CC) $(CFLAGS) -o $@ compile_regexes.o $(FLITELIBFLAGS) $(LDFLAGS) -each: - @ for i in $(VOICES) ; \ - do \ - $(MAKE) VOICE=$$i $(BINDIR)/flite_$$i ; \ - done +each: ${VOICEEXES} + +voice_list_%.c: $(TOP)/tools/make_voice_list + $(TOP)/tools/make_voice_list -o $@ -$(BINDIR)/flite_${VOICE}: flite_main.o $(flite_LIBS_deps) - $(TOP)/tools/make_voice_list $(VOICE) - rm -f flite_voice_list.o - $(MAKE) flite_voice_list.o - $(CC) $(CFLAGS) -o $@ flite_main.o flite_voice_list.o $(flite_LIBS_flags) $(LDFLAGS) +$(BINDIR)/flite_%: voice_list_%.c flite_main.o $(flite_LIBS_deps) + $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ flite_main.o voice_list_$*.c \ + $(filter-out -lflite_cmu_%,${flite_LIBS_flags}) -lflite_$* $(LDFLAGS) install: