Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/c-target/c-target.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/c-target/c-target.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1716, Sat Mar 10 17:08:11 2012 UTC revision 1717, Sat Mar 10 19:44:29 2012 UTC
# Line 154  Line 154 
154                  N.initTargetSpec {double= #double tgt, long=false};                  N.initTargetSpec {double= #double tgt, long=false};
155                  Prog{                  Prog{
156                      tgt = tgt,                      tgt = tgt,
157                      globals = ref [                      globals = ref [],
                         CL.D_Var(["static"], CL.charPtr, "ProgramName",  
                           SOME(CL.I_Exp(CL.mkStr(#srcFile tgt))))  
                       ],  
158  (*  (*
159                      globals = ref [ (* NOTE: in reverse order! *)                      globals = ref [ (* NOTE: in reverse order! *)
160                          CL.D_Var(["static"], CL.charPtr, "ProgramName",                          CL.D_Var(["static"], CL.charPtr, "ProgramName",
# Line 307  Line 304 
304                [                [
305                    (CL.T_Ptr(CL.T_Named "const char"),           "name"),                    (CL.T_Ptr(CL.T_Named "const char"),           "name"),
306                    (CL.charPtr,                                  "err"),                    (CL.charPtr,                                  "err"),
307                      (CL.boolTy,                                   "verboseFlg"),
308                    (CL.boolTy,                                   "isArray"),                    (CL.boolTy,                                   "isArray"),
309                    (CL.uint32,                                   "nStrands"),                    (CL.uint32,                                   "nStrandTys"),
310                    (CL.T_Ptr(CL.T_Named "Strand_t"),             "strandDesc"),                    (CL.T_Ptr(CL.T_Named "Strand_t"),             "strandDesc"),
311                    (CL.uint32,                                   "nAxes"),                    (CL.uint32,                                   "nAxes"),
312                    (CL.T_Ptr CL.uint32,                          "base"),                    (CL.T_Ptr CL.uint32,                          "base"),
# Line 368  Line 366 
366                  RunCC.compile (basename, cflags)                  RunCC.compile (basename, cflags)
367                end                end
368    
369          fun ldFlags (tgt : target_desc) = let          fun ldFlags (tgt : target_desc) = if #exec tgt
370                  then let
371                val extraLibs = condCons (#parallel tgt, #pthread Paths.extraLibs, [])                val extraLibs = condCons (#parallel tgt, #pthread Paths.extraLibs, [])
372                val extraLibs = Paths.teemLinkFlags @ #base Paths.extraLibs :: extraLibs                val extraLibs = Paths.teemLinkFlags @ #base Paths.extraLibs :: extraLibs
373                val rtLib = TargetUtil.runtimeName tgt                val rtLib = TargetUtil.runtimeName tgt
374                in                in
375                  rtLib :: extraLibs                  rtLib :: extraLibs
376                end                end
377                  else [TargetUtil.runtimeName tgt]
378    
379        (* output the code to a file.  The string is the basename of the file, the extension        (* output the code to a file.  The string is the basename of the file, the extension
380         * is provided by the target.         * is provided by the target.
# Line 388  Line 388 
388                  RunCC.linkExec (basename, ldFlags tgt)                  RunCC.linkExec (basename, ldFlags tgt)
389                end                end
390    
391            fun mkSubs (tgt : target_desc, Strand{name, tyName, ...}) = [
392                    ("CFILE",       OS.Path.joinBaseExt{base= #outBase tgt, ext= SOME "c"}),
393                    ("HDRFILE",     OS.Path.joinBaseExt{base= #outBase tgt, ext= SOME "h"}),
394                    ("PREFIX",      #namespace tgt),
395                    ("SRCFILE",     #srcFile tgt),
396                    ("STRAND",      name),
397                    ("STRANDTY",    tyName)
398                  ]
399    
400          fun outputLibSrc (baseName, Prog{tgt, globals, strands, nAxes, ...}) = let          fun outputLibSrc (baseName, Prog{tgt, globals, strands, nAxes, ...}) = let
401                val [strand as Strand{name, tyName, state, output, ...}] = AtomTable.listItems strands                val [strand as Strand{name, tyName, state, output, ...}] = AtomTable.listItems strands
402                val outputs = List.map (GenOutput.gen (tgt, !nAxes)) [output]                val outputs = List.map (GenOutput.gen (tgt, !nAxes)) [output]
403                  val substitutions = mkSubs (tgt, strand)
404              (* output to C file *)              (* output to C file *)
405                val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}                val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}
406                val outS = TextIO.openOut fileName                val outS = TextIO.openOut fileName
# Line 398  Line 408 
408                fun ppDecl dcl = PrintAsC.output(ppStrm, dcl)                fun ppDecl dcl = PrintAsC.output(ppStrm, dcl)
409                in                in
410  (* FIXME: use a fragment for this part of the file *)  (* FIXME: use a fragment for this part of the file *)
411                  ppDecl (CL.D_Verbatim [                  ppDecl (CL.verbatim [CHeadFrag.text] substitutions);
                     "#include \"", OS.Path.joinBaseExt{base= #outBase tgt, ext= SOME "h"}, "\"\n",  
                     "#include \"teem/nrrd.h\"\n",  
                     "#include \"teem/biff.h\"\n",  
                     "typedef struct ", #namespace tgt, "struct_", name, " ", tyName, ";\n"  
                   ]);  
412                  ppDecl (genWorldStruct(tgt, strand));                  ppDecl (genWorldStruct(tgt, strand));
413                  List.app ppDecl (List.rev (!globals));                  List.app ppDecl (List.rev (!globals));
414                  List.app ppDecl (genStrand(tgt, strand));                  List.app ppDecl (genStrand(tgt, strand));
415                  List.app ppDecl outputs;                  List.app ppDecl outputs;
416                    ppDecl (CL.verbatim [CBodyFrag.text] substitutions);
417                    ppDecl (CL.verbatim [RunFrag.text] substitutions);
418                  PrintAsC.close ppStrm;                  PrintAsC.close ppStrm;
419                  TextIO.closeOut outS                  TextIO.closeOut outS
420                end                end

Legend:
Removed from v.1716  
changed lines
  Added in v.1717

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0