XBT_LOG_NEW_DEFAULT_SUBCATEGORY(stubgen,gras,"Stub generator");
#define WARN "/***********\n * DO NOT EDIT! THIS FILE HAS BEEN AUTOMATICALLY GENERATED FROM %s BY gras_stub_generator\n ***********/\n"
-#define SIM_FILENAME "_%s_simulator.c"
+#define SIM_SOURCENAME "_%s_simulator.c"
+#define SIM_OBJNAME "_%s_simulator.o"
#define SIM_BINARYNAME "%s_simulator"
-#define SIM_FILENAME_LDADD "%s_simulator_LDADD"
-#define SIM_FILENAME_SOURCES "%s_simulator_SOURCES"
-#define RL_FILENAME "_%s_%s.c"
+#define SIM_SOURCENAME_LDADD "%s_simulator_LDADD"
+#define SIM_SOURCENAME_SOURCES "%s_simulator_SOURCES"
+#define RL_SOURCENAME "_%s_%s.c"
+#define RL_OBJNAME "_%s_%s.o"
#define RL_BINARYNAME "%s_%s"
-#define RL_FILENAME_LDADD "%s_%s_LDADD"
-#define RL_FILENAME_SOURCES "%s_%s_SOURCES"
-#define MAKEFILE_FILENAME "%s.Makefile.am"
+#define RL_SOURCENAME_LDADD "%s_%s_LDADD"
+#define RL_SOURCENAME_SOURCES "%s_%s_SOURCES"
+#define MAKEFILE_FILENAME_AM "%s.Makefile.am"
+#define MAKEFILE_FILENAME_LOCAL "%s.Makefile.local"
+#define MAKEFILE_FILENAME_REMOTE "%s.Makefile.remote"
char *warning = NULL;
void *data = NULL;
char *filename = NULL;
FILE *OUT = NULL;
- filename = xbt_new(char,strlen(project) + strlen(SIM_FILENAME));
- sprintf(filename,SIM_FILENAME,project);
+ filename = xbt_new(char,strlen(project) + strlen(SIM_SOURCENAME));
+ sprintf(filename,SIM_SOURCENAME,project);
OUT=fopen(filename,"w");
xbt_assert1(OUT, "Unable to open %s for writing",filename);
FILE *OUT = NULL;
xbt_dict_foreach(process_function_set,cursor,key,data) {
- filename = xbt_new(char,strlen(project) + strlen(RL_FILENAME) + strlen(key));
- sprintf(filename,RL_FILENAME,project,key);
+ filename = xbt_new(char,strlen(project) + strlen(RL_SOURCENAME) + strlen(key));
+ sprintf(filename,RL_SOURCENAME,project,key);
OUT=fopen(filename,"w");
xbt_assert1(OUT, "Unable to open %s for writing",filename);
}
}
-static void generate_makefile(char *project, char *deployment)
+static void generate_makefile_am(char *project, char *deployment)
{
xbt_dict_cursor_t cursor=NULL;
char *key = NULL;
char *filename = NULL;
FILE *OUT = NULL;
- filename = xbt_new(char,strlen(project) + strlen(MAKEFILE_FILENAME));
- sprintf(filename,MAKEFILE_FILENAME, project);
+ filename = xbt_new(char,strlen(project) + strlen(MAKEFILE_FILENAME_AM));
+ sprintf(filename,MAKEFILE_FILENAME_AM, project);
OUT=fopen(filename,"w");
xbt_assert1(OUT, "Unable to open %s for writing",filename);
}
fprintf(OUT, "\n\n");
- fprintf(OUT, SIM_FILENAME_SOURCES,project);
+ fprintf(OUT, SIM_SOURCENAME_SOURCES,project);
fprintf(OUT, "=\t");
- fprintf(OUT, SIM_FILENAME,project);
+ fprintf(OUT, SIM_SOURCENAME,project);
fprintf(OUT, " %s.c\n", project);
- fprintf(OUT, SIM_FILENAME_LDADD, project);
+ fprintf(OUT, SIM_SOURCENAME_LDADD, project);
fprintf(OUT, "=\tpath/to/libsimgrid.a\n\n");
xbt_dict_foreach(process_function_set,cursor,key,data) {
- fprintf(OUT, RL_FILENAME_SOURCES, project,key);
+ fprintf(OUT, RL_SOURCENAME_SOURCES, project,key);
fprintf(OUT, "=\t");
- fprintf(OUT, RL_FILENAME, project,key);
+ fprintf(OUT, RL_SOURCENAME, project,key);
fprintf(OUT, " %s.c\n", project);
- fprintf(OUT, RL_FILENAME_LDADD, project, key);
+ fprintf(OUT, RL_SOURCENAME_LDADD, project, key);
fprintf(OUT, "=\tpath/to/libgras.a\n\n");
}
fprintf(OUT, "\n# cleanup temps\n");
fprintf(OUT, "CLEANFILES= ");
- fprintf(OUT, SIM_FILENAME, project);
+ fprintf(OUT, SIM_SOURCENAME, project);
xbt_dict_foreach(process_function_set,cursor,key,data) {
fprintf(OUT, " ");
- fprintf(OUT, RL_FILENAME, project,key);
+ fprintf(OUT, RL_SOURCENAME, project,key);
}
fprintf(OUT, "\n");
fprintf(OUT, "\n# A rule to generate the source file each time the deployment file changes\n");
xbt_dict_foreach(process_function_set,cursor,key,data) {
- fprintf(OUT, RL_FILENAME, project,key);
+ fprintf(OUT, RL_SOURCENAME, project,key);
fprintf(OUT, " ");
}
- fprintf(OUT, SIM_FILENAME, project);
+ fprintf(OUT, SIM_SOURCENAME, project);
fprintf(OUT, ": %s\n", deployment);
fprintf(OUT, "\tstub_generator %s %s >/dev/null\n", project, deployment);
+ fclose(OUT);
+}
+
+
+static void generate_makefile_local(char *project, char *deployment)
+{
+ xbt_dict_cursor_t cursor=NULL;
+ char *key = NULL;
+ void *data = NULL;
+ char *filename = NULL;
+ FILE *OUT = NULL;
+
+ filename = xbt_new(char,strlen(project) + strlen(MAKEFILE_FILENAME_LOCAL));
+ sprintf(filename,MAKEFILE_FILENAME_LOCAL, project);
+
+ OUT=fopen(filename,"w");
+ xbt_assert1(OUT, "Unable to open %s for writing",filename);
+
+ fprintf(OUT, "############ PROJECT COMPILING AND ARCHIVING #########\n");
+ fprintf(OUT, "PROJECT_NAME=%s\n",project);
+ fprintf(OUT,
+ "DISTDIR=gras-$(PROJECT_NAME)\n\n"
+ "SIMGRID_INSTALL_PATH?= $(shell echo \"\\\"<<<< SIMGRID_INSTALL_PATH undefined !!! >>>>\\\"\")\n"
+ "CFLAGS = -O3 -w\n"
+ "INCLUDES = -I$(SIMGRID_INSTALL_PATH)/include\n"
+ "LIBS = -lm -L$(SIMGRID_INSTALL_PATH)/lib/ -lsimgrid\n"
+ "\n");
+
+ fprintf(OUT, "C_FILES = ");
+ fprintf(OUT, SIM_SOURCENAME" ",project);
+ xbt_dict_foreach(process_function_set,cursor,key,data) {
+ fprintf(OUT, RL_SOURCENAME " ",project, key);
+ }
+ fprintf(OUT, "%s.c\n", project);
+
+ fprintf(OUT,"OBJ_FILES = \n");
+
+ fprintf(OUT, "BIN_FILES = ");
+
+ fprintf(OUT, SIM_BINARYNAME " ",project);
+ xbt_dict_foreach(process_function_set,cursor,key,data) {
+ fprintf(OUT, RL_BINARYNAME " ", project, key);
+ }
+ fprintf(OUT, "\n");
+
+ fprintf(OUT,
+ "\n"
+ "all: $(BIN_FILES)\n"
+ "\n");
+ fprintf(OUT, SIM_BINARYNAME ": " SIM_OBJNAME " %s.c\n",project, project, project);
+ xbt_dict_foreach(process_function_set,cursor,key,data) {
+ fprintf(OUT, RL_BINARYNAME " : " RL_OBJNAME " %s.c\n", project, key, project, key, project);
+ }
+ fprintf(OUT,
+ "\n"
+ "%%: %%.o\n"
+ "\t$(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@ \n"
+ "\n"
+ "%%.o: %%.c\n"
+ "\t$(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $<\n"
+ "\n"
+ "DIST_FILES= $(C_FILES) "MAKEFILE_FILENAME_LOCAL" "MAKEFILE_FILENAME_REMOTE"\n"
+ "distdir: $(DIST_FILES)\n"
+ "\trm -rf $(DISTDIR)\n"
+ "\tmkdir -p $(DISTDIR)\n"
+ "\tcp $^ $(DISTDIR)\n"
+ "\n"
+ "dist: clean distdir\n"
+ "\ttar c $(DISTDIR) | gzip -c > $(DISTDIR).tar.gz\n"
+ "\n"
+ "clean:\n"
+ "\trm -f $(BIN_FILES) $(OBJ_FILES) *~\n"
+ "\trm -rf $(DISTDIR)\n"
+ "\n"
+ ".SUFFIXES:\n"
+ ".PHONY : clean\n"
+ "\n", project, project);
+
+ fprintf(OUT, "############ REMOTE COMPILING #########\n");
+ fprintf(OUT,
+ "MACHINES ?= varekai.ucsd.edu sideshow.ucsd.edu dralion.ucsd.edu\n"
+ "INSTALL_PATH ?='$$HOME/tmp/src' ### Has to be an absolute path !!! \n"
+ "SRCDIR ?= ./\n"
+ "SIMGRID_VERSION ?=2.91\n"
+ "GRAS_PROJECT ?= %s\n"
+ "GRAS_PROJECT_URL ?= http://www-id.imag.fr/Laboratoire/Membres/Legrand_Arnaud/gras_test/\n"
+ "\n"
+ "remote:\n"
+ "\t@echo;echo \"----[ Compile the package on remote hosts ]----\"\n"
+ "\t@test -e $(SRCDIR)/buildlogs/ || mkdir -p $(SRCDIR)/buildlogs/\n"
+ "\t for site in $(MACHINES) ; do \\\n"
+ "\t machine=`echo $$site |sed 's/^\\([^%%]*\\)%%.*$$/\\1/'`;\\\n"
+ "\t machine2=`echo $$site |sed 's/^\\([^%%]*\\)%%\\(.*\\)$$/\\2/'`;\\\n"
+ "\t cmd_mkdir=\"\\\"sh -c 'env INSTALL_PATH=$(INSTALL_PATH) SIMGRID_INSTALL_PATH=$(INSTALL_PATH) \\\n"
+ "\t SIMGRID_VERSION=$(SIMGRID_VERSION) GRAS_PROJECT=$(GRAS_PROJECT) \\\n"
+ "\t GRAS_PROJECT_URL=$(GRAS_PROJECT_URL) mkdir -p $(INSTALL_PATH) 2>&1'\\\"\";\\\n"
+ "\t cmd_make=\"\\\"sh -c 'env INSTALL_PATH=$(INSTALL_PATH) SIMGRID_INSTALL_PATH=$(INSTALL_PATH) \\\n"
+ "\t SIMGRID_VERSION=$(SIMGRID_VERSION) GRAS_PROJECT=$(GRAS_PROJECT) \\\n"
+ "\t GRAS_PROJECT_URL=$(GRAS_PROJECT_URL) make -C $(INSTALL_PATH) -f "MAKEFILE_FILENAME_REMOTE" $(ACTION) 2>&1'\\\"\";\\\n"
+ "\t if echo $$site | grep '%%' >/dev/null ; then \\\n"
+ "\t echo \"----[ Compile on $$machine2 (behind $$machine) ]----\";\\\n"
+ "\t else \\\n"
+ "\t machine=$$site;\\\n"
+ "\t echo \"----[ Compile on $$machine ]----\";\\\n"
+ "\t fi;\\\n"
+ "\t if echo $$site | grep '%%' >/dev/null ; then \\\n"
+ "\t if ssh $$machine \"ssh -A $$machine2 $$cmd_mkdir\" 2>&1 > $(SRCDIR)/buildlogs/$$site.log;\\\n"
+ "\t then true; else failed=1;echo \"Failed (check $(SRCDIR)/buildlogs/$$site.log)\"; fi;\\\n"
+ "\t else \\\n"
+ "\t if ssh $$machine \"eval $$cmd_mkdir\" 2>&1 > $(SRCDIR)/buildlogs/$$site.log ;\\\n"
+ "\t then true; else failed=1;echo \"Failed (check $(SRCDIR)/buildlogs/$$site.log)\"; fi; \\\n"
+ "\t fi;\\\n"
+ "\t echo \"-- Copy the data over\"; \\\n"
+ "\t scp "MAKEFILE_FILENAME_REMOTE" $$site:$(INSTALL_PATH) ;\\\n"
+ "\t echo \"-- Compiling... (the output gets into $(SRCDIR)/buildlogs/$$site.log)\"; \\\n"
+ "\t if echo $$site | grep '%%' >/dev/null ; then \\\n"
+ "\t if ssh $$machine \"ssh -A $$machine2 $$cmd_make\" 2>&1 >> $(SRCDIR)/buildlogs/$$site.log;\\\n"
+ "\t then echo \"Sucessful\"; else failed=1;echo \"Failed (check $(SRCDIR)/buildlogs/$$site.log)\"; fi;echo; \\\n"
+ "\t else \\\n"
+ "\t if ssh $$machine \"eval $$cmd_make\" 2>&1 >> $(SRCDIR)/buildlogs/$$site.log ;\\\n"
+ "\t then echo \"Sucessful\"; else failed=1;echo \"Failed (check $(SRCDIR)/buildlogs/$$site.log)\"; fi;echo; \\\n"
+ "\t fi;\\\n"
+ "\t done;\n",project,project,project);
+
+ fclose(OUT);
+}
+
+static void generate_makefile_remote(char *project, char *deployment)
+{
+ xbt_dict_cursor_t cursor=NULL;
+ char *key = NULL;
+ void *data = NULL;
+ char *filename = NULL;
+ FILE *OUT = NULL;
+
+ filename = xbt_new(char,strlen(project) + strlen(MAKEFILE_FILENAME_REMOTE));
+ sprintf(filename,MAKEFILE_FILENAME_REMOTE, project);
+
+ OUT=fopen(filename,"w");
+ xbt_assert1(OUT, "Unable to open %s for writing",filename);
+
+ fprintf(OUT,
+ "INSTALL_PATH ?= $(shell pwd)\n"
+ "\n"
+ "simgrid-$(SIMGRID_VERSION).tar.gz:\n"
+ "\twget -N http://gcl.ucsd.edu/simgrid/dl/simgrid-$(SIMGRID_VERSION).tar.gz\n"
+ "simgrid-$(SIMGRID_VERSION)/: simgrid-$(SIMGRID_VERSION).tar.gz\n"
+ "\ttar zxf $<\n"
+ "\tcd simgrid-$(SIMGRID_VERSION)/; \\\n"
+ "\t ./configure --prefix=$(INSTALL_PATH) ; \\\n"
+ "\t make all install\n"
+ "compile-simgrid: simgrid-$(SIMGRID_VERSION)\n"
+ "\n"
+ "gras-$(GRAS_PROJECT).tar.gz:\n"
+ "\twget -N $(GRAS_PROJECT_URL)/gras-$(GRAS_PROJECT).tar.gz\n"
+ "gras-$(GRAS_PROJECT)/: gras-$(GRAS_PROJECT).tar.gz\n"
+ "\ttar zxf $<\n"
+ "\tmake -C gras-$(GRAS_PROJECT)/ -f $(GRAS_PROJECT).Makefile.local all\n"
+ "compile-gras compile-gras-$(GRAS_PROJECT): gras-$(GRAS_PROJECT) compile-simgrid\n"
+ "\n"
+ "clean-simgrid:\n"
+ "\trm -rf simgrid-$(SIMGRID_VERSION)*\n"
+ "clean-gras clean-gras-$(GRAS_PROJECT):\n"
+ "\trm -rf gras-$(GRAS_PROJECT)*\n"
+ "clean: clean-simgrid clean-gras-$(GRAS_PROJECT)\n"
+ "\n"
+ ".PHONY: clean clean-simgrid clean-gras-$(GRAS_PROJECT) compile-simgrid compile-gras-$(GRAS_PROJECT)\n"
+ "\n");
+ fclose(OUT);
}
static void print(void *p)
generate_sim(project_name);
generate_rl(project_name);
- generate_makefile(project_name, deployment_file);
+ generate_makefile_local(project_name, deployment_file);
+ generate_makefile_remote(project_name, deployment_file);
free(warning);
return 0;