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

SCM Repository

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

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

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

revision 2700, Fri Sep 12 20:01:22 2014 UTC revision 2701, Wed Sep 17 21:24:41 2014 UTC
# Line 510  Line 510 
510                    SOME(CL.I_Array(genInits (0, strands)))))                    SOME(CL.I_Array(genInits (0, strands)))))
511                end                end
512    
513            type output = {file : string, outS : TextIO.outstream, ppStrm : TextIOPP.stream}
514    
515          (* open pretty printing streams for both the C and OpenCL output files *)
516            fun openOut baseName = let
517                  fun openOut (mkPP, ext) = let
518                        val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME ext}
519                        val outS = TextIO.openOut fileName
520                        in {
521                          file = fileName,
522                          outS = outS,
523                          ppStrm = mkPP outS
524                        } end
525                  in
526                    {cOut = openOut (PrintAsC.new, "c"), oclOut = openOut (PrintAsCL.new, "cl")}
527                  end
528    
529            fun closeOut {file, outS, ppStrm} = (
530                  TextIOPP.closeStream ppStrm;
531                  TextIO.closeOut outS)
532    
533        (* generate the OpenCL source code. *)        (* generate the OpenCL source code. *)
534          fun outputCLSrc (baseName, prog as Prog{props, strands, nAxes, ...}) = let          fun outputCLSrc (out : output, prog as Prog{props, strands, nAxes, ...}) = let
535                val [strand as Strand{output, ...}] = AtomTable.listItems strands                val [strand as Strand{output, ...}] = AtomTable.listItems strands
536                val outputs = GenOutput.genKernels (props, !nAxes) output                val outputs = GenOutput.genKernels (props, !nAxes) output
537              (* output to OpenCL file *)                fun ppDecl dcl = PrintAsCL.output(#ppStrm out, dcl)
               val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "cl"}  
               val outS = TextIO.openOut fileName  
               val ppStrm = PrintAsCL.new outS  
               fun ppDecl dcl = PrintAsCL.output(ppStrm, dcl)  
538                in                in
539                (* Retrieve the header information *)                (* Retrieve the header information *)
540                  ppDecl (CL.verbatimDcl [CLHeadFrag.text] [                  ppDecl (CL.verbatimDcl [CLHeadFrag.text] [
541                      ("OUTFILE", fileName),                      ("OUTFILE", #file out),
542                      ("SRCFILE", #srcFile props),                      ("SRCFILE", #srcFile props),
543                      ("DIDEROT_FLOAT_PRECISION", Properties.floatPrecisionDef props),                      ("DIDEROT_FLOAT_PRECISION", Properties.floatPrecisionDef props),
544                      ("DIDEROT_INT_PRECISION", Properties.intPrecisionDef props)                      ("DIDEROT_INT_PRECISION", Properties.intPrecisionDef props)
# Line 554  Line 570 
570                  List.app ppDecl outputs                  List.app ppDecl outputs
571                end                end
572    
573          fun outputLibSrc (baseName, Prog{          fun outputLibSrc (out : output, Prog{
574                  props, inputs, globals, topDecls, strands, nAxes, initially, ...                  props, inputs, globals, topDecls, strands, nAxes, initially, ...
575                }) = let                }) = let
576                val [strand as Strand{name, tyName, state, output, ...}] = AtomTable.listItems strands                val [strand as Strand{name, tyName, state, output, ...}] = AtomTable.listItems strands
577                val outputs = GenOutput.gen (props, !nAxes) output                val outputs = GenOutput.gen (props, !nAxes) output
578                val substitutions = mkSubs (props, strand)                val substitutions = mkSubs (props, strand)
579              (* output to C file *)                fun ppDecl dcl = PrintAsC.output(#ppStrm out, dcl)
               val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}  
               val outS = TextIO.openOut fileName  
               val ppStrm = PrintAsC.new outS  
               fun ppDecl dcl = PrintAsC.output(ppStrm, dcl)  
580                in                in
581                  ppDecl (CL.verbatimDcl [CHeadFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CHeadFrag.text] substitutions);
582                  if Properties.dualState props                  if Properties.dualState props
# Line 577  Line 589 
589                  List.app ppDecl (List.rev (!topDecls));                  List.app ppDecl (List.rev (!topDecls));
590                  List.app ppDecl (genStrand strand);                  List.app ppDecl (genStrand strand);
591                  List.app ppDecl outputs;                  List.app ppDecl outputs;
592                  ppStrandTable (ppStrm, [strand]);                  ppStrandTable (#ppStrm out, [strand]);
593                  ppDecl (CL.verbatimDcl [CBodyFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CBodyFrag.text] substitutions);
594                  ppDecl (CL.verbatimDcl [CInitFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CInitFrag.text] substitutions);
595                  ppDecl (CL.verbatimDcl [CAllocFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CAllocFrag.text] substitutions);
596                  ppDecl (!initially);                  ppDecl (!initially);
597                  ppDecl (CL.verbatimDcl [CRunFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CRunFrag.text] substitutions);
598                  ppDecl (CL.verbatimDcl [CShutdownFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CShutdownFrag.text] substitutions)
                 PrintAsC.close ppStrm;  
                 TextIO.closeOut outS  
599                end                end
600    
601          fun generateLib (prog as Prog{props, inputs, strands, ...}) = let          fun generateLib (prog as Prog{props, inputs, strands, ...}) = let
602                val {outDir, outBase, exec, double, parallel, debug, ...} = props                val {outDir, outBase, exec, double, parallel, debug, ...} = props
603                val basename = OS.Path.joinDirFile{dir=outDir, file=outBase}                val basename = OS.Path.joinDirFile{dir=outDir, file=outBase}
604                val [Strand{state, output, ...}] = AtomTable.listItems strands                val [Strand{state, output, ...}] = AtomTable.listItems strands
605                  val {outC, outOCL} = openOut basename
606                in                in
607                (* generate the library .h file *)                (* generate the library .h file *)
608                  GenLibraryInterface.gen {                  GenLibraryInterface.gen {
# Line 601  Line 612 
612                      outputs = [output]                      outputs = [output]
613                    };                    };
614                (* *)                (* *)
615                  outputLibSrc (basename, prog);                  outputLibSrc (outC, prog);
616                  outputCLSrc (basename, prog);                  outputCLSrc (outOCL, prog);
617                  (* close the output streams *)
618                    closeOut outC;
619                    closeOut outOCL;
620                (* compile and link *)                (* compile and link *)
621                  compile (props, basename);                  compile (props, basename);
622                  RunCC.linkLib (basename, ldFlags props)                  RunCC.linkLib (basename, ldFlags props)
623                end                end
624    
625          fun outputExecSrc (baseName, prog) = let          fun outputExecSrc (out : output, prog) = let
626                val Prog{props, inputs, globals, topDecls, strands, nAxes, initially, ...} = prog                val Prog{props, inputs, globals, topDecls, strands, nAxes, initially, ...} = prog
627                val [strand as Strand{name, tyName, state, output, ...}] = AtomTable.listItems strands                val [strand as Strand{name, tyName, state, output, ...}] = AtomTable.listItems strands
628                val outputs = GenOutput.gen (props, !nAxes) output                val outputs = GenOutput.gen (props, !nAxes) output
# Line 617  Line 631 
631                      ("DIDEROT_INT_PRECISION", Properties.intPrecisionDef props) ::                      ("DIDEROT_INT_PRECISION", Properties.intPrecisionDef props) ::
632                      ("DIDEROT_TARGET", Properties.targetDef props) ::                      ("DIDEROT_TARGET", Properties.targetDef props) ::
633                      mkSubs (props, strand)                      mkSubs (props, strand)
634                val fileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}                fun ppDecl dcl = PrintAsC.output(#ppStrm out, dcl)
               val outS = TextIO.openOut fileName  
               val ppStrm = PrintAsC.new outS  
               fun ppDecl dcl = PrintAsC.output(ppStrm, dcl)  
635                in                in
636                  ppDecl (CL.verbatimDcl [ExecHdrFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [ExecHdrFrag.text] substitutions);
637                  if Properties.dualState props                  if Properties.dualState props
# Line 633  Line 644 
644                  List.app ppDecl (GenInputs.genExecInputFuns (props, !inputs));                  List.app ppDecl (GenInputs.genExecInputFuns (props, !inputs));
645                  List.app ppDecl (genStrand strand);                  List.app ppDecl (genStrand strand);
646                  List.app ppDecl outputs;                  List.app ppDecl outputs;
647                  ppStrandTable (ppStrm, [strand]);                  ppStrandTable (#ppStrm out, [strand]);
648                  ppDecl (CL.verbatimDcl [CInitFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CInitFrag.text] substitutions);
649                  ppDecl (CL.verbatimDcl [CAllocFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CAllocFrag.text] substitutions);
650                  ppDecl (!initially);                  ppDecl (!initially);
651                  ppDecl (CL.verbatimDcl [CRunFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CRunFrag.text] substitutions);
652                  ppDecl (CL.verbatimDcl [CShutdownFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CShutdownFrag.text] substitutions);
653                  ppDecl (CL.verbatimDcl [CMainFrag.text] substitutions);                  ppDecl (CL.verbatimDcl [CMainFrag.text] substitutions)
                 PrintAsC.close ppStrm;  
                 TextIO.closeOut outS  
654                end                end
655    
656        (* 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
# Line 650  Line 659 
659          fun generateExec (prog as Prog{props, ...}) = let          fun generateExec (prog as Prog{props, ...}) = let
660                val {outDir, outBase, exec, double, parallel, debug, ...} = props                val {outDir, outBase, exec, double, parallel, debug, ...} = props
661                val basename = OS.Path.joinDirFile{dir=outDir, file=outBase}                val basename = OS.Path.joinDirFile{dir=outDir, file=outBase}
662                  val {outC, outOCL} = openOut basename
663                in                in
664                  outputExecSrc (basename, prog);                  outputExecSrc (outC, prog);
665                  outputCLSrc (basename, prog);                  outputCLSrc (outOCL, prog);
666                  (* close the output streams *)
667                    closeOut outC;
668                    closeOut outOCL;
669                  (* compile and link *)
670                  compile (props, basename);                  compile (props, basename);
671                  RunCC.linkExec (basename, ldFlags props)                  RunCC.linkExec (basename, ldFlags props)
672                end                end

Legend:
Removed from v.2700  
changed lines
  Added in v.2701

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