sim: modules.c: move generation to top-level
authorMike Frysinger <vapier@gentoo.org>
Sun, 6 Nov 2022 09:56:39 +0000 (16:56 +0700)
committerMike Frysinger <vapier@gentoo.org>
Tue, 10 Jan 2023 06:15:26 +0000 (01:15 -0500)
Now that all arches create libsim.a from the top-level, we have full
access to their inputs, and can move the actual generation from the
subdir up to the top-level.  This avoids recursive makes and will
help simplify state passing between the two.

sim/Makefile.in
sim/common/Make-common.in
sim/common/local.mk

index 0a2f4a991eed6fc70aa2737b1084dcf8da61ff26..839e6e17e273276eb69cc1131ed9d60130fb3a9d 100644 (file)
@@ -1853,8 +1853,9 @@ common_HW_CONFIG_H_TARGETS = $(patsubst %,%/hw-config.h,$(SIM_ENABLED_ARCHES))
 am_arch_d = $(subst -,_,$(@D))
 GEN_MODULES_C_SRCS = \
        $(wildcard \
-               $(patsubst %.o,$(abs_srcdir)/%.c,$($(am_arch_d)_libsim_a_OBJECTS) $($(am_arch_d)_libsim_a_LIBADD)) \
-               $(filter-out %.o,$(patsubst $(@D)/%.o,$(abs_srcdir)/common/%.c,$($(am_arch_d)_libsim_a_LIBADD))))
+               $(patsubst %,$(srcdir)/%,$($(am_arch_d)_libsim_a_SOURCES)) \
+               $(patsubst %.o,$(srcdir)/%.c,$($(am_arch_d)_libsim_a_OBJECTS) $($(am_arch_d)_libsim_a_LIBADD)) \
+               $(filter-out %.o,$(patsubst $(@D)/%.o,$(srcdir)/common/%.c,$($(am_arch_d)_libsim_a_LIBADD))))
 
 common_GEN_MODULES_C_TARGETS = $(patsubst %,%/modules.c,$(filter-out ppc,$(SIM_ENABLED_ARCHES)))
 LIBIBERTY_LIB = ../libiberty/libiberty.a
@@ -4539,8 +4540,27 @@ common/version.c-stamp: $(srcroot)/gdb/version.in $(srcroot)/bfd/version.h $(src
        $(SHELL) $(srcroot)/move-if-change $@.tmp $(@D)/hw-config.h; \
        touch $@
 .PRECIOUS: %/stamp-hw
-%/modules.c:
-       $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) GEN_MODULES_C_SRCS="$(GEN_MODULES_C_SRCS)" -C $(@D) $(@F)
+%/modules.c: %/stamp-modules ; @true
+%/stamp-modules: Makefile
+       $(AM_V_GEN)set -e; \
+       LANG=C ; export LANG; \
+       LC_ALL=C ; export LC_ALL; \
+       sed -n -e '/^sim_install_/{s/^\(sim_install_[a-z_0-9A-Z]*\).*/\1/;p}' $(GEN_MODULES_C_SRCS) | sort >$@.l-tmp; \
+       ( \
+       echo '/* Do not modify this file.  */'; \
+       echo '/* It is created automatically by the Makefile.  */'; \
+       echo '#include "libiberty.h"'; \
+       echo '#include "sim-module.h"'; \
+       sed -e 's:\(.*\):extern MODULE_INIT_FN \1;:' $@.l-tmp; \
+       echo 'MODULE_INSTALL_FN * const sim_modules_detected[] = {'; \
+       sed -e 's:\(.*\):  \1,:' $@.l-tmp; \
+       echo '};'; \
+       echo 'const int sim_modules_detected_len = ARRAY_SIZE (sim_modules_detected);'; \
+       ) >$@.tmp; \
+       $(SHELL) $(srcroot)/move-if-change $@.tmp $(@D)/modules.c; \
+       rm -f $@.l-tmp; \
+       touch $@
+.PRECIOUS: %/stamp-modules
 
 # Alias for developers.
 @SIM_ENABLE_IGEN_TRUE@igen: $(IGEN)
index f9f6ed1984c45f90a98bbe311ba128cbdf36df01..15242c6126476a86a560a18f8b5d1d01ca2d3d4f 100644 (file)
@@ -159,28 +159,6 @@ test-hw-events: $(srccom)/hw-events.c libsim.a
                $(CC) $(ALL_CFLAGS) -DMAIN -o test-hw-events$(EXEEXT) \
                $(srccom)/hw-events.c libsim.a $(EXTRA_LIBS)
 
-# See sim_pre_argv_init and sim_module_install in sim-module.c for more details.
-modules.c: stamp-modules ; @true
-stamp-modules: Makefile
-       $(ECHO_STAMP) modules.c
-       $(SILENCE) LANG=C ; export LANG ; \
-       LC_ALL=C ; export LC_ALL ; \
-       sed -n -e '/^sim_install_/{s/^\(sim_install_[a-z_0-9A-Z]*\).*/\1/;p}' $^ $(GEN_MODULES_C_SRCS) | sort >$@.l-tmp
-       @set -e; (\
-       echo '/* Do not modify this file.  */'; \
-       echo '/* It is created automatically by the Makefile.  */'; \
-       echo '#include "libiberty.h"'; \
-       echo '#include "sim-module.h"'; \
-       sed -e 's:\(.*\):extern MODULE_INIT_FN \1;:' $@.l-tmp; \
-       echo 'MODULE_INSTALL_FN * const sim_modules_detected[] = {'; \
-       sed -e 's:\(.*\):  \1,:' $@.l-tmp; \
-       echo '};'; \
-       echo 'const int sim_modules_detected_len = ARRAY_SIZE (sim_modules_detected);'; \
-       ) >$@.tmp
-       $(SILENCE) $(SHELL) $(srcroot)/move-if-change $@.tmp modules.c
-       $(SILENCE) rm -f $@.l-tmp $@.tmp
-       $(SILENCE) touch $@
-
 # Support targets.
 
 install:
@@ -214,8 +192,7 @@ TAGS: force
                *.[ch] ../common/*.[ch]
 
 mostlyclean clean: $(SIM_EXTRA_CLEAN)
-       rm -f *.[oa] *~ core \
-               modules.c stamp-modules
+       rm -f *.[oa] *~ core
 
 distclean maintainer-clean realclean: clean
        rm -f TAGS Makefile
index 128b770dbe1050518703ef569d9b9d9d5677830e..debb55da933ba2d8aaa2d6f26ca5c0e9369b63b6 100644 (file)
@@ -135,10 +135,30 @@ SIM_ALL_RECURSIVE_DEPS += $(%C%_HW_CONFIG_H_TARGETS)
 am_arch_d = $(subst -,_,$(@D))
 GEN_MODULES_C_SRCS = \
        $(wildcard \
-               $(patsubst %.o,$(abs_srcdir)/%.c,$($(am_arch_d)_libsim_a_OBJECTS) $($(am_arch_d)_libsim_a_LIBADD)) \
-               $(filter-out %.o,$(patsubst $(@D)/%.o,$(abs_srcdir)/common/%.c,$($(am_arch_d)_libsim_a_LIBADD))))
-%/modules.c:
-       $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) GEN_MODULES_C_SRCS="$(GEN_MODULES_C_SRCS)" -C $(@D) $(@F)
+               $(patsubst %,$(srcdir)/%,$($(am_arch_d)_libsim_a_SOURCES)) \
+               $(patsubst %.o,$(srcdir)/%.c,$($(am_arch_d)_libsim_a_OBJECTS) $($(am_arch_d)_libsim_a_LIBADD)) \
+               $(filter-out %.o,$(patsubst $(@D)/%.o,$(srcdir)/common/%.c,$($(am_arch_d)_libsim_a_LIBADD))))
+%/modules.c: %/stamp-modules ; @true
+%/stamp-modules: Makefile
+       $(AM_V_GEN)set -e; \
+       LANG=C ; export LANG; \
+       LC_ALL=C ; export LC_ALL; \
+       sed -n -e '/^sim_install_/{s/^\(sim_install_[a-z_0-9A-Z]*\).*/\1/;p}' $(GEN_MODULES_C_SRCS) | sort >$@.l-tmp; \
+       ( \
+       echo '/* Do not modify this file.  */'; \
+       echo '/* It is created automatically by the Makefile.  */'; \
+       echo '#include "libiberty.h"'; \
+       echo '#include "sim-module.h"'; \
+       sed -e 's:\(.*\):extern MODULE_INIT_FN \1;:' $@.l-tmp; \
+       echo 'MODULE_INSTALL_FN * const sim_modules_detected[] = {'; \
+       sed -e 's:\(.*\):  \1,:' $@.l-tmp; \
+       echo '};'; \
+       echo 'const int sim_modules_detected_len = ARRAY_SIZE (sim_modules_detected);'; \
+       ) >$@.tmp; \
+       $(SHELL) $(srcroot)/move-if-change $@.tmp $(@D)/modules.c; \
+       rm -f $@.l-tmp; \
+       touch $@
+.PRECIOUS: %/stamp-modules
 
 ## NB: The ppc port doesn't currently utilize the modules API, so skip it.
 %C%_GEN_MODULES_C_TARGETS = $(patsubst %,%/modules.c,$(filter-out ppc,$(SIM_ENABLED_ARCHES)))