Exemple #1
0
void oextend(char *dir, char *word, char *new_dir, int platform, int optimize)
{
  char slash,*sl,*last_slash,ext[200],small_word[100],mk[200];
  if (platform==DOS) slash='\\'; else slash='/';
  new_dir[0]=0;
  if (dir && strcmp(dir,".") && strcmp(dir,".\\") && strcmp(dir,"./"))
    sprintf(new_dir,"%s%c%s",dir,slash,word);
  else strcpy(new_dir,word);

  for (sl=new_dir,last_slash=NULL;*sl;sl++)
    if (*sl=='\\' || *sl=='/')
      last_slash=sl;

  if (last_slash)
  {
    strcpy(small_word,last_slash+1);
    *(last_slash+1)=0;
  }
  else 
  {
    strcpy(small_word,new_dir);
    new_dir[0]=0;
  }
 
  if (dir && strcmp(dir,".") && strcmp(dir,".\\") && strcmp(dir,"./"))
    sprintf(mk,"%s%c%s",dir,slash,word);
  else 
    strcpy(mk,word);


  sprintf(mk,"%s%c%s",dir,slash,word);

  for (sl=mk;*sl;sl++);
  while (*sl!='/' && *sl!='\\') sl--;
  sl++; 
  if (optimize)
    sprintf(sl,"%s/%s",plat_name[platform],"opt");
  else
    sprintf(sl,"%s/%s",plat_name[platform],"debug");
  create_dir(mk);


  if (optimize)
    sprintf(ext,"%s/%s/%s%s",plat_name[platform],"opt",small_word,object_extension(platform));
  else
    sprintf(ext,"%s/%s/%s%s",plat_name[platform],"debug",small_word,object_extension(platform));

  strcat(new_dir,ext);
  if (platform==DOS)
  {    
    for (sl=new_dir;*sl;sl++)
      if (*sl=='/') *sl='\\';
  }
}
Exemple #2
0
void make_makefile(int platform)
{
  char tmp[100],*s,de[5]; 
  FILE *fp;
  if (platform==DOS)
    strcpy(de,".exe");
  else de[0]=0;
  
  if (!get_var("MAKEFILE_NAME",tmp))
  {
    if (platform==DOS)
      strcpy(tmp,"makefile.wat");
    else
      strcpy(tmp,"Makefile");
  }

  fp=fopen(tmp,"w");

  if (!fp)
  {
    printf("Unable to open %s for writing\n",tmp);
    exit(0);
  }
  
  fprintf(fp,"CC=%s\n",compiler(platform));

  write_flags(fp,platform,0);
  write_flags(fp,platform,1);



  list_o_files("IMLIB_OBJS",fp,imlib_objs,imlib_dir,object_extension(platform),platform,0);
  list_o_files("IMLIB_OBJS",fp,imlib_objs,imlib_dir,object_extension(platform),platform,1);
  list_o_files("PROG_OBJS",fp,ofiles,NULL,object_extension(platform),platform,0);
  list_o_files("PROG_OBJS",fp,ofiles,NULL,object_extension(platform),platform,1);
  

  if (platform==LINUX)        /* for linux make two versions of program,  X11 & SVGA */
  {
    sprintf(tmp,"%sx",basename);
    fprintf(fp,"all : %s %s\n\n",basename,tmp);
    
    make_program(fp,basename,"LINUX_SVGA",platform,0);
    make_program(fp,tmp,"LINUX_X",platform,0); 

    fprintf(fp,"opt : %so %so\n\n",basename,tmp);
    
    make_program(fp,basename,"LINUX_SVGA",platform,1);
    make_program(fp,tmp,"LINUX_X",platform,1); 
  }
  else 
  {
    fprintf(fp,"all : %s%s\n\n",basename,de);    
    make_program(fp,basename,plat_name[platform],platform,0);    

    fprintf(fp,"opt : %so%s\n\n",basename,de);
    make_program(fp,basename,plat_name[platform],platform,1);    
  }
  sprintf(tmp,"%s_FILES",plat_name[platform]);

  list_o_depends(fp,tmp,imlib_dir,platform,0);
  list_o_depends(fp,tmp,imlib_dir,platform,1);
  list_o_depends(fp,"IMLIB_OBJS",imlib_dir,platform,0);
  list_o_depends(fp,"IMLIB_OBJS",imlib_dir,platform,1);
  list_o_depends(fp,"O_FILES",NULL,platform,0);
  list_o_depends(fp,"O_FILES",NULL,platform,1);
  if (platform!=DOS)
  {
    fprintf(fp,"clean :\n\t"
	    "rm -f $(%s_FILES) $(IMLIB_OBJS) $(O_FILES)\n",
	    plat_name[platform]);
    fprintf(fp,"cleano :\n\t"
	    "rm -f $(%s_FILES_O) $(IMLIB_OBJS_O) $(O_FILES_O)\n",
	    plat_name[platform]);
  }
  if (plat_stuff)
    fprintf(fp,"%s",plat_stuff);   /* add any platform specific additions  */

  fclose(fp);
}
Exemple #3
0
void make_program(FILE *fp, char *name, char *plat_base, int platform, int optimize)
{
  FILE *lfp;
  char tmp[2000],tmp2[200],de[5],*oe,*oe2;
  sprintf(tmp2,"%s_FILES",plat_base);
  get_var(tmp2,tmp);
  list_o_files(tmp2,fp,tmp,imlib_dir,object_extension(platform),platform,optimize);  
  if (platform==DOS)
    strcpy(de,".exe");
  else
    de[0]=0;

  if (optimize) { oe="o"; oe2="_O";}  else { oe=""; oe2=""; }

  fprintf(fp,"%s%s%s : $(%s_FILES%s) $(IMLIB_OBJS%s) $(PROG_OBJS%s)\n",name,oe,de,plat_base,oe2,oe2,oe2);

  if (platform!=DOS)
  {
    if (optimize)
      fprintf(fp,"\t$(CC) -o %s%s $(%s_FILES_O) $(IMLIB_OBJS_O) $(PROG_OBJS_O)",
	    name,oe,plat_base);
    else
      fprintf(fp,"\t$(CC) -o %s%s $(%s_FILES) $(IMLIB_OBJS) $(PROG_OBJS)",
	    name,oe,plat_base);

    sprintf(tmp,"%s_LIBS",plat_base);
    if (get_var(tmp,tmp))
      fprintf(fp," %s",tmp);
    fprintf(fp,"\n");
  } else
  {
    if (optimize)    
      sprintf(tmp,"%so.lnk",name);
    else
      sprintf(tmp,"%s.lnk",name);

    fprintf(fp,"\twlink @%s\n",tmp);
    lfp=fopen(tmp,"wb");
    if (!lfp)
    {
      printf("Unable to open linker file %s\n",tmp);
      exit(0);
    }
    if (!optimize)
      fprintf(lfp,"debug all\n");
    fprintf(lfp,"system dos4g\n"
	    "option caseexact\n");
    if (optimize)
      fprintf(lfp,"name %so%s\n",name,de);
    else
      fprintf(lfp,"name %s%s\n",name,de);

    if (get_var("STACK_SIZE",tmp2))
      fprintf(lfp,"option stack=%s\n",tmp2);
    else fprintf(lfp,"option stack=8k\n");

    
    
    sprintf(tmp,"%s_FILES",plat_base);
    list_wlink_files(lfp,tmp,imlib_dir,optimize);
    sprintf(tmp,"IMLIB_OBJS");
    list_wlink_files(lfp,tmp,imlib_dir,optimize);
    sprintf(tmp,"O_FILES");
    list_wlink_files(lfp,tmp,NULL,optimize);
    fclose(lfp);
  }

  fprintf(fp,"\n");
}
Exemple #4
0
// Return a new path by replacing a .s extension
// with a .o extension.
inline Path
to_object_file(Path p)
{
  return p.replace_extension(object_extension());
}