<!--
Copyright 2019 Alain Dargelas

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<!-- Ant build script for the grammars -->


<project name="SV Antlr Grammar" default="compile_cpp" basedir=".">
  <description>
    System Verilog Antlr Grammar build
  </description>

  <!-- set global properties for this build -->
  <property name="antlr_tool_location"
	    value="../third_party/antlr4/antlr4-4.7.2-complete.jar"/>
  <property name="antlr_tool_target"  value="org.antlr.v4.Tool"/>
  <property name="antlr_test_rig"     value="org.antlr.v4.gui.TestRig"/>
  <property name="sv_parser_grammar"  value="SV3_1a"/>
  <property name="sv_preproc_grammar"  value="SV3_1aPp"/>
  <property name="sv_splitter_grammar"  value="SV3_1aSplitter"/>
  <property name="sv_parser_top_rule" value="top_level_rule"/>
  <property name="sv_splitter_top_rule" value="source_text"/>
  <property name="sv_preproc_top_rule" value="source_text"/>
  <property name="antlr_tool_cpp_options" value="-Dlanguage=Cpp -o ../src/parser/"/>
  
  <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
    <!-- Delete the generated files: *.cpp, *.h, *.tokens -->
    <delete>
      <fileset dir="." includes="*.cpp *.h *.tokens"/>
    </delete>
  </target>

  <target name="compile_cpp" depends="init"
        description="compile the Grammar files for C++">
    <!-- Compile the G4 files for C++, only generates C++ files -->
	<echo>Antlr Compile SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4 </echo>
        <java  classpath="${antlr_tool_location}" classname="${antlr_tool_target}" fork="true" maxmemory="4096m" >
          <arg line="${antlr_tool_cpp_options} SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4" />
        </java>
 
  </target>

  
  <target name="compile_java" depends="init"
        description="Compile the Grammar files for Java for Testing purposes">
    <!-- Compile the G4 files for Java target-->
	<echo>Antlr Compile SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4</echo>
        <java classpath="${antlr_tool_location}" classname="${antlr_tool_target}">
          <arg line=" SV3_1aPpLexer.g4 SV3_1aPpParser.g4 SV3_1aLexer.g4 SV3_1aParser.g4 SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4" />
        </java>

  </target>

  <target name="javac" description="Compile all Java files">    
    <!-- Java compile all .java files into .class -->
    <echo>Compile all Java files</echo>
    <mkdir dir="build"/>
    <javac classpath="${antlr_tool_location}" srcdir="."
         destdir="build" debug="true" includeantruntime="false"
         fork="true"/>
  </target>
  
  <target name="clean"
        description="clean up">
    <!-- Delete the generated files: *.cpp, *.h, *.tokens *.java -->
    <delete>
      <fileset dir="." includes="*.cpp *.h *.tokens *.java"/>
      <fileset dir="build"/>
    </delete>
  </target>

  <target name="test_tokens">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_parser_grammar} ${sv_parser_top_rule} -tokens" />
     </java>
  </target>  

  <target name="test_gui">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_parser_grammar} ${sv_parser_top_rule} -gui" />
     </java>
  </target>  

   <target name="test_tree">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_parser_grammar} ${sv_parser_top_rule} -tree" />
     </java>
   </target>

  <target name="test_pp_tokens">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_preproc_grammar} ${sv_preproc_top_rule} -tokens" />
     </java>
  </target>  

  <target name="test_pp_gui">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_preproc_grammar} ${sv_preproc_top_rule} -gui" />
     </java>
  </target>  

   <target name="test_pp_tree">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_preproc_grammar} ${sv_preproc_top_rule} -tree" />
     </java>
   </target>

  <target name="test_split_tokens">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_splitter_grammar} ${sv_splitter_top_rule} -tokens" />
     </java>
  </target>  

  <target name="test_split_gui">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_splitter_grammar} ${sv_splitter_top_rule} -gui" />
     </java>
  </target>  

   <target name="test_split_tree">
     <java classpath="${antlr_tool_location}:build" classname="${antlr_test_rig}">
          <arg line="${sv_splitter_grammar} ${sv_splitter_top_rule} -tree" />
     </java>
   </target>
   
</project>
