Browse Source

Clean fortran90 build

Now I understand why subdir-objects was failing :)

Building directly from include/*.f90 would create the .o file there, and
the .mod file locally. We try to build it in various places, but then the
.o file would be built only once, in include/, and the .mod file built only
once, and not available for everybody.

Instead, use LN_S to link over the source file, so as to let normal
rules build local objects.

We can then clean out rules, and only keep the .mod dependencies that
automake does not know about.
Samuel Thibault 5 years ago
parent
commit
96d650403b
3 changed files with 76 additions and 103 deletions
  1. 44 67
      examples/Makefile.am
  2. 23 27
      mpi/examples/Makefile.am
  3. 9 9
      tests/Makefile.am

+ 44 - 67
examples/Makefile.am

@@ -451,7 +451,7 @@ endif
 if STARPU_HAVE_FC
 fortran90_f90_example_SOURCES =	\
 	fortran90/mod_types.f90		\
-	$(top_srcdir)/include/starpu_mod.f90	\
+	fortran90/starpu_mod.f90	\
 	fortran90/mod_interface.f90	\
 	fortran90/mod_compute.f90	\
 	fortran90/marshalling.c		\
@@ -459,38 +459,38 @@ fortran90_f90_example_SOURCES =	\
 
 native_fortran_nf_vector_SOURCES =	\
 	native_fortran/nf_codelets.f90		\
-	$(top_srcdir)/include/fstarpu_mod.f90	\
+	native_fortran/fstarpu_mod.f90	\
 	native_fortran/nf_vector.f90
 
 native_fortran_nf_matrix_SOURCES =	\
 	native_fortran/nf_codelets.f90		\
-	$(top_srcdir)/include/fstarpu_mod.f90	\
+	native_fortran/fstarpu_mod.f90	\
 	native_fortran/nf_matrix.f90
 
 native_fortran_nf_example_SOURCES =	\
 	native_fortran/nf_types.f90		\
 	native_fortran/nf_compute.f90		\
-	$(top_srcdir)/include/fstarpu_mod.f90	\
+	native_fortran/fstarpu_mod.f90	\
 	native_fortran/nf_example.f90
 
 native_fortran_nf_dynbuf_SOURCES =	\
 	native_fortran/nf_dynbuf_cl.f90		\
-	$(top_srcdir)/include/fstarpu_mod.f90	\
+	native_fortran/fstarpu_mod.f90	\
 	native_fortran/nf_dynbuf.f90
 
 native_fortran_nf_varbuf_SOURCES =	\
 	native_fortran/nf_varbuf_cl.f90		\
-	$(top_srcdir)/include/fstarpu_mod.f90	\
+	native_fortran/fstarpu_mod.f90	\
 	native_fortran/nf_varbuf.f90
 
 native_fortran_nf_sched_ctx_SOURCES =	\
 	native_fortran/nf_sched_ctx_cl.f90		\
-	$(top_srcdir)/include/fstarpu_mod.f90	\
+	native_fortran/fstarpu_mod.f90	\
 	native_fortran/nf_sched_ctx.f90
 
 native_fortran_nf_partition_SOURCES =	\
 	native_fortran/nf_partition_cl.f90		\
-	$(top_srcdir)/include/fstarpu_mod.f90	\
+	native_fortran/fstarpu_mod.f90	\
 	native_fortran/nf_partition.f90
 endif
 
@@ -1117,76 +1117,53 @@ endif
 
 if STARPU_HAVE_FC
 # Fortran90 example
-# - list explicit dependences to control proper module files generation
-# - the overriding rule fully disables the corresponing default rule, thus
-#   the default rule body must be copied entirely
+
+# - link over source file to build our own object
+fortran90/starpu_mod.f90:
+	@$(MKDIR_P) $(dir $@)
+	$(LN_S) $(top_srcdir)/include/$(notdir $@) $@
+
+# - express the creation of .mod along .o
+starpu_mod.mod: fortran90/starpu_mod.o
 mod_types.mod: fortran90/mod_types.o
 mod_compute.mod: fortran90/mod_compute.o
 mod_interface.mod: fortran90/mod_interface.o
-starpu_mod.mod: fortran90/starpu_mod.o
 
-fortran90/starpu_mod.o: $(top_srcdir)/include/starpu_mod.f90
-	$(AM_V_FC)$(FC) $(fortran90_f90_example_FCFLAGS) $(FCFLAGS) -c -o $@ '$(top_srcdir)/'include/starpu_mod.f90
+# - list explicit dependences to control proper module files dependencies
+fortran90/mod_compute.o: mod_types.mod mod_interface.mod starpu_mod.mod
+fortran90/f90_example.o: mod_types.mod mod_interface.mod mod_compute.mod starpu_mod.mod
 
-fortran90/mod_compute.o: $(top_srcdir)/examples/fortran90/mod_compute.f90 mod_types.mod mod_interface.mod starpu_mod.mod
-	$(AM_V_FC)$(FC) $(fortran90_f90_example_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'fortran90/mod_compute.f90' || echo '$(srcdir)/'`fortran90/mod_compute.f90
-
-fortran90/f90_example.o: $(top_srcdir)/examples/fortran90/f90_example.f90 $(top_srcdir)/examples/fortran90/marshalling.c mod_types.mod mod_interface.mod mod_compute.mod starpu_mod.mod
-	$(AM_V_FC)$(FC) $(fortran90_f90_example_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'fortran90/f90_example.f90' || echo '$(srcdir)/'`fortran90/f90_example.f90
 
 # Native Fortran example
-# - list explicit dependences to control proper module files generation
-# - the overriding rule fully disables the corresponing default rule, thus
-#   the default rule body must be copied entirely
-nf_types.mod: native_fortran/nf_types.o
-nf_compute.mod: native_fortran/nf_compute.o
+
+# - link over source file to build our own object
+native_fortran/fstarpu_mod.f90:
+	@$(MKDIR_P) $(dir $@)
+	$(LN_S) $(top_srcdir)/include/$(notdir $@) $@
 fstarpu_mod.mod: native_fortran/fstarpu_mod.o
+
+# - express the creation of .mod along .o
 nf_codelets.mod: native_fortran/nf_codelets.o
+nf_compute.mod: native_fortran/nf_compute.o
 nf_dynbuf_cl.mod: native_fortran/nf_dynbuf_cl.o
-nf_varbuf_cl.mod: native_fortran/nf_varbuf_cl.o
-nf_sched_ctx_cl.mod: native_fortran/nf_sched_ctx_cl.o
 nf_partition_cl.mod: native_fortran/nf_partition_cl.o
+nf_sched_ctx_cl.mod: native_fortran/nf_sched_ctx_cl.o
+nf_types.mod: native_fortran/nf_types.o
+nf_varbuf_cl.mod: native_fortran/nf_varbuf_cl.o
 
-native_fortran/fstarpu_mod.o: $(top_srcdir)/include/fstarpu_mod.f90
-	$(AM_V_FC)$(FC) $(native_fortran_nf_vector_FCFLAGS) $(FCFLAGS) -c -o $@ '$(top_srcdir)/'include/fstarpu_mod.f90
-
-native_fortran/nf_codelets.o: $(top_srcdir)/examples/native_fortran/nf_codelets.f90 fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_vector_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_codelets.f90' || echo '$(srcdir)/'`native_fortran/nf_codelets.f90
-
-native_fortran/nf_vector.o: $(top_srcdir)/examples/native_fortran/nf_vector.f90 nf_codelets.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_vector_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_vector.f90' || echo '$(srcdir)/'`native_fortran/nf_vector.f90
-
-native_fortran/nf_matrix.o: $(top_srcdir)/examples/native_fortran/nf_matrix.f90 nf_codelets.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_matrix_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_matrix.f90' || echo '$(srcdir)/'`native_fortran/nf_matrix.f90
-
-native_fortran/nf_compute.o: $(top_srcdir)/examples/native_fortran/nf_compute.f90 nf_types.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_example_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_compute.f90' || echo '$(srcdir)/'`native_fortran/nf_compute.f90
-
-native_fortran/nf_example.o: $(top_srcdir)/examples/native_fortran/nf_example.f90 nf_types.mod nf_compute.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_example_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_example.f90' || echo '$(srcdir)/'`native_fortran/nf_example.f90
-
-native_fortran/nf_dynbuf_cl.o: $(top_srcdir)/examples/native_fortran/nf_dynbuf_cl.f90 nf_types.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_dynbuf_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_dynbuf_cl.f90' || echo '$(srcdir)/'`native_fortran/nf_dynbuf_cl.f90
-
-native_fortran/nf_dynbuf.o: $(top_srcdir)/examples/native_fortran/nf_dynbuf.f90 nf_types.mod nf_dynbuf_cl.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_dynbuf_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_dynbuf.f90' || echo '$(srcdir)/'`native_fortran/nf_dynbuf.f90
-
-native_fortran/nf_varbuf_cl.o: $(top_srcdir)/examples/native_fortran/nf_varbuf_cl.f90 nf_types.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_varbuf_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_varbuf_cl.f90' || echo '$(srcdir)/'`native_fortran/nf_varbuf_cl.f90
-
-native_fortran/nf_varbuf.o: $(top_srcdir)/examples/native_fortran/nf_varbuf.f90 nf_types.mod nf_varbuf_cl.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_varbuf_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_varbuf.f90' || echo '$(srcdir)/'`native_fortran/nf_varbuf.f90
-
-native_fortran/nf_sched_ctx_cl.o: $(top_srcdir)/examples/native_fortran/nf_sched_ctx_cl.f90 nf_types.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_sched_ctx_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_sched_ctx_cl.f90' || echo '$(srcdir)/'`native_fortran/nf_sched_ctx_cl.f90
-
-native_fortran/nf_sched_ctx.o: $(top_srcdir)/examples/native_fortran/nf_sched_ctx.f90 nf_types.mod nf_sched_ctx_cl.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_sched_ctx_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_sched_ctx.f90' || echo '$(srcdir)/'`native_fortran/nf_sched_ctx.f90
-
-native_fortran/nf_partition_cl.o: $(top_srcdir)/examples/native_fortran/nf_partition_cl.f90 nf_types.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_partition_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_partition_cl.f90' || echo '$(srcdir)/'`native_fortran/nf_partition_cl.f90
-
-native_fortran/nf_partition.o: $(top_srcdir)/examples/native_fortran/nf_partition.f90 nf_types.mod nf_partition_cl.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_partition_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_partition.f90' || echo '$(srcdir)/'`native_fortran/nf_partition.f90
+# - list explicit dependences to control proper module files dependencies
+native_fortran/nf_codelets.o: fstarpu_mod.mod
+native_fortran/nf_compute.o: nf_types.mod fstarpu_mod.mod
+native_fortran/nf_dynbuf_cl.o: fstarpu_mod.mod
+native_fortran/nf_dynbuf.o: nf_dynbuf_cl.mod fstarpu_mod.mod
+native_fortran/nf_example.o: nf_types.mod nf_compute.mod fstarpu_mod.mod
+native_fortran/nf_matrix.o: nf_codelets.mod fstarpu_mod.mod
+native_fortran/nf_partition_cl.o: fstarpu_mod.mod
+native_fortran/nf_partition.o: nf_partition_cl.mod fstarpu_mod.mod
+native_fortran/nf_sched_ctx_cl.o: fstarpu_mod.mod
+native_fortran/nf_sched_ctx.o: nf_sched_ctx_cl.mod fstarpu_mod.mod
+native_fortran/nf_varbuf_cl.o: fstarpu_mod.mod
+native_fortran/nf_varbuf.o: nf_varbuf_cl.mod fstarpu_mod.mod
+native_fortran/nf_vector.o: nf_codelets.mod fstarpu_mod.mod
 
 endif

+ 23 - 27
mpi/examples/Makefile.am

@@ -288,8 +288,8 @@ examplebin_PROGRAMS +=		\
 
 native_fortran_nf_mm_SOURCES	=			\
 	native_fortran/nf_mm_cl.f90			\
-	$(top_srcdir)/mpi/include/fstarpu_mpi_mod.f90	\
-	$(top_srcdir)/include/fstarpu_mod.f90		\
+	native_fortran/fstarpu_mpi_mod.f90	\
+	native_fortran/fstarpu_mod.f90		\
 	native_fortran/nf_mm.f90
 
 native_fortran_nf_mm_LDADD =					\
@@ -297,16 +297,16 @@ native_fortran_nf_mm_LDADD =					\
 
 native_fortran_nf_mm_task_build_SOURCES	=			\
 	native_fortran/nf_mm_cl.f90			\
-	$(top_srcdir)/mpi/include/fstarpu_mpi_mod.f90	\
-	$(top_srcdir)/include/fstarpu_mod.f90		\
+	native_fortran/fstarpu_mpi_mod.f90	\
+	native_fortran/fstarpu_mod.f90		\
 	native_fortran/nf_mm_task_build.f90
 
 native_fortran_nf_mm_task_build_LDADD =					\
 	-lm
 
 native_fortran_nf_basic_ring_SOURCES	=			\
-	$(top_srcdir)/mpi/include/fstarpu_mpi_mod.f90	\
-	$(top_srcdir)/include/fstarpu_mod.f90		\
+	native_fortran/fstarpu_mpi_mod.f90	\
+	native_fortran/fstarpu_mod.f90		\
 	native_fortran/nf_basic_ring.f90
 
 native_fortran_nf_basic_ring_LDADD =					\
@@ -390,30 +390,26 @@ if STARPU_HAVE_MPIFORT
 if BUILD_EXAMPLES
 if !STARPU_SANITIZE
 # Native Fortran example
-# - list explicit dependences to control proper module files generation
-# - the overriding rule fully disables the corresponing default rule, thus
-#   the default rule body must be copied entirely
-fstarpu_mod.mod: fstarpu_mod.o
-fstarpu_mpi_mod.mod: native_fortran/fstarpu_mpi_mod.o
-nf_mm_cl.mod: native_fortran/nf_mm_cl.o
-
-fstarpu_mod.o: $(top_srcdir)/include/fstarpu_mod.f90
-	$(AM_V_FC)$(FC) $(native_fortran_nf_mm_FCFLAGS) $(FCFLAGS) -c -o $@ '$(top_srcdir)/'include/fstarpu_mod.f90
-
-native_fortran/fstarpu_mpi_mod.o: $(top_srcdir)/mpi/include/fstarpu_mpi_mod.f90 fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_mm_FCFLAGS) $(FCFLAGS) -c -o $@ '$(top_srcdir)/'mpi/include/fstarpu_mpi_mod.f90
 
-native_fortran/nf_mm_cl.o: $(top_srcdir)/mpi/examples/native_fortran/nf_mm_cl.f90 fstarpu_mpi_mod.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_mm_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_mm_cl.f90' || echo '$(srcdir)/'`native_fortran/nf_mm_cl.f90
+# - link over source file to build our own object
+native_fortran/fstarpu_mod.f90:
+	@$(MKDIR_P) $(dir $@)
+	$(LN_S) $(top_srcdir)/include/$(notdir $@) $@
+native_fortran/fstarpu_mpi_mod.f90:
+	@$(MKDIR_P) $(dir $@)
+	$(LN_S) $(top_srcdir)/mpi/include/$(notdir $@) $@
 
-native_fortran/nf_mm.o: $(top_srcdir)/mpi/examples/native_fortran/nf_mm.f90 nf_mm_cl.mod fstarpu_mpi_mod.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_mm_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_mm.f90' || echo '$(srcdir)/'`native_fortran/nf_mm.f90
-
-native_fortran/nf_mm_task_build.o: $(top_srcdir)/mpi/examples/native_fortran/nf_mm_task_build.f90 nf_mm_cl.mod fstarpu_mpi_mod.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_mm__task_build_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_mm_task_build.f90' || echo '$(srcdir)/'`native_fortran/nf_mm_task_build.f90
+# - express the creation of .mod along .o
+fstarpu_mod.mod: native_fortran/fstarpu_mod.o
+fstarpu_mpi_mod.mod: native_fortran/fstarpu_mpi_mod.o
+nf_mm_cl.mod: native_fortran/nf_mm_cl.o
 
-native_fortran/nf_basic_ring.o: $(top_srcdir)/mpi/examples/native_fortran/nf_basic_ring.f90 fstarpu_mpi_mod.mod fstarpu_mod.mod
-	$(AM_V_FC)$(FC) $(native_fortran_nf_basic_ring_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'native_fortran/nf_basic_ring.f90' || echo '$(srcdir)/'`native_fortran/nf_basic_ring.f90
+# - list explicit dependences to control proper module files dependencies
+native_fortran/fstarpu_mpi_mod.o: fstarpu_mod.mod
+native_fortran/nf_mm_cl.o: fstarpu_mod.mod
+native_fortran/nf_mm.o: nf_mm_cl.mod fstarpu_mpi_mod.mod fstarpu_mod.mod
+native_fortran/nf_mm_task_build.o: nf_mm_cl.mod fstarpu_mpi_mod.mod fstarpu_mod.mod
+native_fortran/nf_basic_ring.o: fstarpu_mpi_mod.mod fstarpu_mod.mod
 endif
 endif
 endif

+ 9 - 9
tests/Makefile.am

@@ -768,7 +768,7 @@ openmp_cuda_task_01_SOURCES = 	\
 
 if STARPU_HAVE_FC
 fortran90_init_01_SOURCES =	\
-	$(top_srcdir)/include/starpu_mod.f90	\
+	fortran90/starpu_mod.f90	\
 	fortran90/init_01.f90
 endif
 
@@ -1004,14 +1004,14 @@ sched_policies_execute_all_tasks_LDFLAGS = $(AM_LDFLAGS) -lm
 
 if STARPU_HAVE_FC
 # Fortran90 tests
-# - list explicit dependences to control proper module files generation
-# - the overriding rule fully disables the corresponing default rule, thus
-#   the default rule body must be copied entirely
-starpu_mod.mod: starpu_mod.o
+# - link over source file to build our own object
+fortran90/starpu_mod.f90:
+	@$(MKDIR_P) $(dir $@)
+	$(LN_S) $(top_srcdir)/include/$(notdir $@) $@
 
-starpu_mod.o: $(top_srcdir)/include/starpu_mod.f90
-	$(AM_V_FC)$(FC) $(fortran90_init_01_FCFLAGS) $(FCFLAGS) -c -o $@ '$(top_srcdir)/'include/starpu_mod.f90
+# - express the creation of .mod along .o
+starpu_mod.mod: fortran90/starpu_mod.o
 
-fortran90/init_01.o: $(top_srcdir)/tests/fortran90/init_01.f90 starpu_mod.mod
-	$(AM_V_FC)$(FC) $(fortran90_init_01_FCFLAGS) $(FCFLAGS) -c -o $@ `test -f 'fortran90/init_01.f90' || echo '$(srcdir)/'`fortran90/init_01.f90
+# - list explicit dependences to control proper module files dependencies
+fortran90/init_01.o: starpu_mod.mod
 endif