From: Andre Noll Date: Sat, 21 Jan 2017 15:18:44 +0000 (+0100) Subject: build: Create .dep files only during compilation. X-Git-Tag: v0.6.0~2^2~6 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=dd7675ad75d88dfebaf56cb0cab2f6c3171d5c85 build: Create .dep files only during compilation. It is unnecessary to run a dedicated command to create the dependency files because: * If the object file does not exist, we have to run the compiler anyway, which creates the dependency on the fly. * If the object file exists, the dependency file also exists, so the build system notices if the object file needs to be rebuilt, for example because an included header file was modified. The only thing we must guarantee is that all included header files exist. We do this by introducing an order-only dependency: all object files depend on all .lsg.h files but we impose this specific ordering without forcing the targets to be updated. This speeds up the build a lot and also simplifies Makefile.real. --- diff --git a/Makefile.real b/Makefile.real index 15abf14f..669a469f 100644 --- a/Makefile.real +++ b/Makefile.real @@ -56,6 +56,7 @@ write_objs += write_cmd.lsg.o write.lsg.o cmd_suites := $(addsuffix _cmd, audiod server play recv filter write) suites := $(addprefix $(lls_suite_dir)/, $(cmd_suites) $(executables)) m4_lls_deps := $(addsuffix .m4d, $(suites)) +lsg_h := $(addsuffix .lsg.h, $(suites)) # now prefix all objects with object dir recv_objs := $(addprefix $(object_dir)/, $(recv_objs)) @@ -172,84 +173,76 @@ $(man_dir)/para_%.1: $(lls_suite_dir)/%.lsg.man \ $(object_dir)/%.o: %.c | $(object_dir) -$(object_dir)/opus%.o $(dep_dir)/opus%.d: CPPFLAGS += $(opus_cppflags) -$(object_dir)/gui.o $(object_dir)/gui%.o $(dep_dir)/gui%.d \ +$(object_dir)/opus%.o: CPPFLAGS += $(opus_cppflags) +$(object_dir)/gui.o $(object_dir)/gui%.o \ : CPPFLAGS += $(curses_cppflags) -$(object_dir)/spx%.o $(dep_dir)/spx%.d: CPPFLAGS += $(speex_cppflags) -$(object_dir)/flac%.o $(dep_dir)/flac%.d: CPPFLAGS += $(flac_cppflags) +$(object_dir)/spx%.o: CPPFLAGS += $(speex_cppflags) +$(object_dir)/flac%.o: CPPFLAGS += $(flac_cppflags) -$(object_dir)/mp3_afh.o $(dep_dir)/mp3_afh.d: CPPFLAGS += $(id3tag_cppflags) -$(object_dir)/crypt.o $(dep_dir)/crypt.d: CPPFLAGS += $(openssl_cppflags) -$(object_dir)/gcrypt.o $(dep_dir)/gcrypt.d: CPPFLAGS += $(gcrypt_cppflags) -$(object_dir)/ao_write.o $(dep_dir)/ao_write.d: CPPFLAGS += $(ao_cppflags) -$(object_dir)/aac_afh.o $(dep_dir)/aac_afh.d: CPPFLAGS += $(mp4v2_cppflags) -$(object_dir)/alsa%.o $(dep_dir)/alsa%.d: CPPFLAGS += $(alsa_cppflags) +$(object_dir)/mp3_afh.o: CPPFLAGS += $(id3tag_cppflags) +$(object_dir)/crypt.o: CPPFLAGS += $(openssl_cppflags) +$(object_dir)/gcrypt.o: CPPFLAGS += $(gcrypt_cppflags) +$(object_dir)/ao_write.o: CPPFLAGS += $(ao_cppflags) +$(object_dir)/aac_afh.o: CPPFLAGS += $(mp4v2_cppflags) +$(object_dir)/alsa%.o: CPPFLAGS += $(alsa_cppflags) -$(object_dir)/interactive.o $(dep_dir)/interactive.d \ +$(object_dir)/interactive.o \ : CPPFLAGS += $(readline_cppflags) -$(object_dir)/resample_filter.o $(dep_dir)/resample_filter.d \ +$(object_dir)/resample_filter.o \ : CPPFLAGS += $(samplerate_cppflags) -$(object_dir)/oss_write.o $(dep_dir)/oss_write.d \ +$(object_dir)/oss_write.o \ : CPPFLAGS += $(oss_cppflags) -$(object_dir)/ao_write.o $(dep_dir)/ao_write.d \ +$(object_dir)/ao_write.o \ : CPPFLAGS += $(ao_cppflags) $(pthread_cppflags) -$(object_dir)/mp3dec_filter.o $(dep_dir)/mp3dec_filter.d \ +$(object_dir)/mp3dec_filter.o \ : CPPFLAGS += $(mad_cppflags) -$(object_dir)/aacdec_filter.o $(dep_dir)/aacdec_filter.d \ -$(object_dir)/aac_common.o $(dep_dir)/aac_common.d \ -$(object_dir)/aac_afh.o $(dep_dir)/aac_afh.d \ +$(object_dir)/aacdec_filter.o \ +$(object_dir)/aac_common.o \ +$(object_dir)/aac_afh.o \ : CPPFLAGS += $(faad_cppflags) -$(object_dir)/ogg_afh.o $(dep_dir)/ogg_afh.d \ -$(object_dir)/oggdec_filter.o $(dep_dir)/oggdec_filter.d \ +$(object_dir)/ogg_afh.o \ +$(object_dir)/oggdec_filter.o \ : CPPFLAGS += $(vorbis_cppflags) -$(object_dir)/spx_common.o $(dep_dir)/spx_common.d \ -$(object_dir)/spxdec_filter.o $(dep_dir)/spxdec_filter.d \ -$(object_dir)/spx_afh.o $(dep_dir)/spx_afh.d \ -$(object_dir)/oggdec_filter.o $(dep_dir)/oggdec_filter.d \ -$(object_dir)/ogg_afh.o $(dep_dir)/ogg_afh.d \ -$(object_dir)/ogg_afh_common.o $(dep_dir)/ogg_afh_common.d \ -$(object_dir)/opus%.o $(dep_dir)/opus%.d \ +$(object_dir)/spx_common.o \ +$(object_dir)/spxdec_filter.o \ +$(object_dir)/spx_afh.o \ +$(object_dir)/oggdec_filter.o \ +$(object_dir)/ogg_afh.o \ +$(object_dir)/ogg_afh_common.o \ +$(object_dir)/opus%.o \ : CPPFLAGS += $(ogg_cppflags) -$(object_dir)/afs.o $(dep_dir)/afs.d \ -$(object_dir)/aft.o $(dep_dir)/aft.d \ -$(object_dir)/attribute.o $(dep_dir)/attribute.d \ -$(object_dir)/blob.o $(dep_dir)/blob.d \ -$(object_dir)/mood.o $(dep_dir)/mood.d \ -$(object_dir)/playlist.o $(dep_dir)/playlist.d \ -$(object_dir)/score.o $(dep_dir)/score.d \ -$(object_dir)/server.o $(dep_dir)/server.d \ -$(object_dir)/vss.o $(dep_dir)/vss.d \ -$(object_dir)/command.o $(dep_dir)/command.d \ -$(object_dir)/http_send.o $(dep_dir)/http_send.d \ -$(object_dir)/dccp_send.o $(dep_dir)/dccp_send.d \ -$(object_dir)/udp_send.o $(dep_dir)/udp_send.d \ -$(object_dir)/send_common.o $(dep_dir)/send_common.d \ -$(object_dir)/mm.o $(dep_dir)/mm.d \ +$(object_dir)/afs.o \ +$(object_dir)/aft.o \ +$(object_dir)/attribute.o \ +$(object_dir)/blob.o \ +$(object_dir)/mood.o \ +$(object_dir)/playlist.o \ +$(object_dir)/score.o \ +$(object_dir)/server.o \ +$(object_dir)/vss.o \ +$(object_dir)/command.o \ +$(object_dir)/http_send.o \ +$(object_dir)/dccp_send.o \ +$(object_dir)/udp_send.o \ +$(object_dir)/send_common.o \ +$(object_dir)/mm.o \ : CPPFLAGS += $(osl_cppflags) $(object_dir)/compress_filter.o: CFLAGS += -O3 -$(object_dir)/%.o: %.c | $(object_dir) +$(object_dir)/%.o: %.c | $(object_dir) $(dep_dir) $(lsg_h) @[ -z "$(Q)" ] || echo 'CC $<' $(Q) $(CC) -c -o $@ -MMD -MF $(dep_dir)/$(*F).d -MT $@ $(CPPFLAGS) \ $(STRICT_CFLAGS) $(CFLAGS) $< -# The compiler outputs dependencies either as foo.h or as some_directory/foo.h, -# depending on whether the latter file exists. Since make needs the directory -# part we prefix the dependency as appropriate. -$(dep_dir)/%.d: %.c | $(dep_dir) - @[ -z "$(Q)" ] || echo 'DEP $<' - $(Q) $(CC) $(CPPFLAGS) -MM -MG -MT $(object_dir)/$(*F).o $< \ - | sed -e "s@ \([a-zA-Z0-9_]\{1,\}.lsg.h\)@ $(lls_suite_dir)/\1@g" > $@ - para_recv para_afh para_play para_server: LDFLAGS += $(id3tag_ldflags) para_write para_play para_audiod \ : LDFLAGS += $(ao_ldflags) $(pthread_ldflags) $(core_audio_ldflags) diff --git a/m4/lls/makefile b/m4/lls/makefile index 4d641196..cf3965e6 100644 --- a/m4/lls/makefile +++ b/m4/lls/makefile @@ -1,4 +1,4 @@ -.PRECIOUS: $(lls_suite_dir)/%.suite +.PRECIOUS: $(lls_suite_dir)/%.suite $(lsg_h) lls_m4_include_dir := $(lls_m4_dir)/include $(lls_suite_dir)/%.m4d: $(lls_m4_dir)/%.suite.m4 | $(lls_suite_dir)