X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/931d547fccc65c7f2e5c6208c168f7e659d10aaf..ca5fca38a56c90308636efa65657c83402de59cf:/tools/gras/stub_generator.c diff --git a/tools/gras/stub_generator.c b/tools/gras/stub_generator.c index 3d14c01325..6d565ef56c 100644 --- a/tools/gras/stub_generator.c +++ b/tools/gras/stub_generator.c @@ -17,15 +17,19 @@ 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; @@ -129,8 +133,8 @@ static void generate_sim(char *project) 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); @@ -168,8 +172,8 @@ static void generate_rl(char *project) 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); @@ -182,7 +186,7 @@ static void generate_rl(char *project) } } -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; @@ -190,8 +194,8 @@ static void generate_makefile(char *project, char *deployment) 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); @@ -207,29 +211,29 @@ static void generate_makefile(char *project, char *deployment) } 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"); @@ -237,12 +241,181 @@ static void generate_makefile(char *project, char *deployment) 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) @@ -288,7 +461,8 @@ int main(int argc, char *argv[]) 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;