DVT VHDL IDE User Guide
Rev. 23.1.7, 15 March 2023

29.5.1 Create a Project (Mixed-Language Capable)

createProject <project_path> [-workingset [-newwindow]] [-force] [-close_others]
           [-f|-F <file_path>] [-top <top_file_path>] [-test <test_file_path>]
           [-map <link_name> <target_path>] [-name <project_name>]
           [-lang <lang>] [-perspective <perspective>] [-clearcase]
           [-git <repo1:repo2:...:repoN>] [-p4 <connection_parameters>]
           [-openResourceFilterDialog]
           [-include auto[:<threshold>]] [-disable_fs_check]
           [-exclude|include [[name|location|projectRelativePath[_regex]=<pattern>]|[symlink=true|false]]][,root=folder1[:sub/folderN]][,applies=f|d|rf|rd]]
           [-build <name>] [-<name>.build <build configuration directives ...>]

Mandatory arguments:

   <project_path> Absolute path to project (must exist).
   -lang          Enable support for <lang> language: E, VLOG, VHDL, CPP, CPP_EXT, PSS, SLN, SDL. 
                  CPP, CPP_EXT are only valid when DVT CDT Integration feature is installed.
                  At least one language must be specified.

Optional arguments:

   -<name>.build     Create the build configuration file <project>/.dvt/<name>.build with
                     <build configuration directives> as content. All flags up to the end of the
                     command line, or up to the next -<name>.build flag are considered build
                     configuration directives. This flag cannot be used in conjunction with
                     -f, -F, -test, or -top.

   -build <name>     Set <name> as active build configuration.

   -clearcase        Share project with ClearCase Eclipse plugin.

   -include auto[:<threshold>]
                     Automatically create resource filters, based on the build configuration.
                     Only compilation related directories are included, for example +incdirs, -y libdirs, 
                     $SPECMAN_PATH entries and parent directories of top files.
                     Relevant directories containing more than <threshold> files will not be included.
                     If not specified, the threshold defaults to 500. 
                     Some configuration resources are always included: .buildpath, .classpath, .cproject, .dvt, 
                     .project, .pydevproject, .settings

         [NOTE]      The -include auto argument can be combined with any further user-specified include or exclude filters

   -disable_fs_check By default, a filesystem check is performed to determine if the project directory sits on top of 
                     a large filesystem tree (more than 50000 children) or if the project directory is located on a slow filesystem 
                     (listing all the files takes more than 10 seconds). 
                     In such a situation, there is a high risk of running into refresh performance problems. To avoid this, 
                     the -include auto option is added automatically to the command.
                     Use this flag to disable the filesystem check and the automatic injection of -include auto.

   -exclude|include  [name|location|projectRelativePath[_regex]=<pattern>,][root=folder1[:sub/folderN],][applies=f|d|rf|rd]
                     or
                     [symlink=[true|false],][root=folder1[:sub/folderN],][applies=f|d|rf|rd]

                     Create resource filters.
                     Use include to keep files or directories matching <pattern>.
                     Use exclude to filter out files or directories matching <pattern>.

                     Syntax details:

                     [name|location|projectRelativePath[_regex]=]<pattern>
                       If only <pattern> is specified it is equivalent with name=<pattern>.
                       For <name|location|projectRelativePath>=<pattern>, the pattern is case insensitive and allows simple wildcards (* and ?).
                       For <name_regex|location_regex|projectRelativePath_regex>=<pattern>, the pattern is case sensitive and allows regular expressions.

                     symlink=true|false
                       When symlink=true only symlinked resources are matched by the filter.
                       When symlink=false only non-symlinked resources are matched by the filter.

                     root=folder1[:sub/folderN]
                       By default filter applies to project root children, unless you specify one or more roots.

                     applies=f|d|fr|dr
                       By default filter applies recursively to files and directories under root(s), unless you restrict it:
                         f = filter applies only to _f_iles under root(s)
                         d = filter applies only to _d_irectories under root(s)
                         rf = filter applies _r_ecursively to _f_iles under root(s)
                         rd = filter applies _r_ecursively to _d_irectories under root(s)

                     For example, given this project hierarchy: 

                     | cli_resource_filters_example
                     |-- .dvt
                     | |-- default.build
                     |-- folder_1
                     | |-- folder_1_1
                     | | |-- folder_1_1.log
                     | | |-- some_file.sv  
                     | |-- folder_1_2
                     | | |-- folder_1_2.log
                     | | |-- some_file.sv
                     | |-- folder_1.log
                     | |-- some_file.sv
                     |-- folder_2
                     | |-- folder_2_1
                     | | |-- folder_2_1.log
                     | | |-- some_file.sv  
                     | |-- folder_2_2
                     | | |-- folder_2_2.log
                     | | |-- some_file.sv
                     | |-- folder_2.log
                     | |-- some_file.sv
                     |-- .project
                     |-- dvt_build.log

                     * to exclude a sub-directory of the project, including all of its content:

                     dvt_cli.sh -workspace ~/dvt_workspace createProject ~/projects/cli_resource_filters_example/ -lang VLOG -exclude projectRelativePath=folder_2,applies=d

                     | cli_resource_filters_example
                     |-- .dvt
                     | |-- default.build
                     |-- folder_1
                     | |-- folder_1_1
                     | | |-- folder_1_1.log
                     | | |-- some_file.sv  
                     | |-- folder_1_2
                     | | |-- folder_1_2.log
                     | | |-- some_file.sv
                     | |-- folder_1.log
                     | |-- some_file.sv
                     |-- .project
                     |-- dvt_build.log

                     * to include only particular sub-directories of the project:

                     dvt_cli.sh -workspace ~/dvt_workspace createProject ~/projects/cli_resource_filters_example/ -lang VLOG -include projectRelativePath=folder_1 -include projectRelativePath=folder_1/folder_1_1 
                     -include projectRelativePath=folder_1/folder_1_1/*

                     | cli_resource_filters_example
                     |-- .dvt
                     | |-- default.build
                     |-- folder_1
                     | |-- folder_1_1
                     | | |-- folder_1_1.log
                     | | |-- some_file.sv
                     |-- .project

                     * to exclude all the files which have their names matching a regular expression:

                     dvt_cli.sh -workspace ~/dvt_workspace createProject ~/projects/cli_resource_filters_example/ -lang VLOG -exclude name_regex=.*.log,applies=rf

                     | cli_resource_filters_example
                     |-- .dvt
                     | |-- default.build
                     |-- folder_1
                     | |-- folder_1_1
                     | | |-- some_file.sv  
                     | |-- folder_1_2
                     | | |-- some_file.sv
                     | |-- some_file.sv
                     |-- folder_2
                     | |-- folder_2_1
                     | | |-- some_file.sv  
                     | |-- folder_2_2
                     | | |-- some_file.sv
                     | |-- some_file.sv
                     |-- .project

                     The root parameter instructs the filter application to a relative point in the project hierarchy.
                     * Suppose the case of removing some log files, but only starting with a certain point in the project hierarchy:

                     dvt_cli.sh -workspace ~/dvt_workspace createProject ~/projects/cli_resource_filters_example/ -lang VLOG -exclude name_regex=.*.log,root=folder_2,applies=rf

                     | cli_resource_filters_example
                     |-- .dvt
                     | |-- default.build
                     |-- folder_1
                     | |-- folder_1_1
                     | | |-- folder_1_1.log
                     | | |-- some_file.sv  
                     | |-- folder_1_2
                     | | |-- folder_1_2.log
                     | | |-- some_file.sv
                     | |-- folder_1.log
                     | |-- some_file.sv
                     |-- folder_2
                     | |-- folder_2_1
                     | | |-- some_file.sv  
                     | |-- folder_2_2
                     | | |-- some_file.sv
                     | |-- some_file.sv
                     |-- .project
                     |-- dvt_build.log

                     * If the case, you can also specify multiple roots for a filter (for example exclude all the log files in folder_1/folder_1_2 and folder_2):

                     dvt_cli.sh -workspace ~/dvt_workspace createProject ~/projects/cli_resource_filters_example/ -lang VLOG -exclude name_regex=.*.log,root=folder_1/folder_1_2:folder_2,applies=rf

                     | cli_resource_filters_example
                     |-- .dvt
                     | |-- default.build
                     |-- folder_1
                     | |-- folder_1_1
                     | | |-- folder_1_1.log
                     | | |-- some_file.sv  
                     | |-- folder_1_2
                     | | |-- some_file.sv
                     | |-- folder_1.log
                     | |-- some_file.sv
                     |-- folder_2
                     | |-- folder_2_1
                     | | |-- some_file.sv  
                     | |-- folder_2_2
                     | | |-- some_file.sv
                     | |-- some_file.sv
                     |-- .project
                     |-- dvt_build.log

         [NOTE]      Resource filters are also applied for linked resources (such as those created by -map)
         [NOTE]      You can specify any number of include or exclude filters. 
         [NOTE]      Regardless the specified order, all the include filters will be applied before the exclude filters.
         [NOTE]      Do not use trailing slashes when specifying a directory pattern.
         [NOTE]      DVT provides a user interface for managing Resource Filters as a simpler and more
                     intuitive alternative to the Eclipse built-in Resource Filters management UI.
                     However, DVT's UI only works for <projectRelativePath> filters that do not
                     contain wildcards or regular expressions.

   -f|-F             Specify a command file for the project. -f and -F are mutually exclusive.

   -force            Overwrite existing project.

   -git              Add the specified repositories to the Git Repositories View. A colon (:) separated
                     list of repository paths must be provided.
         [NOTE]      Repository paths must include (end with) the /.git segment.

   -map              Create a linked resource called <link_name> pointing to <link_target>.

   -name             Use as project name instead of project's directory name.

   -newwindow        Open a new window with the working set selected.

   -openResourceFilterDialog
                     Open the project's DVT Resource Filters dialog.

   -p4               Share project with Perforce Eclipse plugin. The <connection_parameters>
                     argument must be specified as a list of <parameter>=<value> separated by commas.
                               Mandatory parameters:
                                   P4PORT=<host:port> (P4PORT=company_server:1666)
                                   P4CLIENT=<perforce_workspace_name> (P4CLIENT=perforce-work)
                                   P4USER=<username> (P4USER user1)
                               Optional parameters:
                                   P4CHARSET=<charset_type> (P4CHARSET=none)
                                   P4PASSWD=<password> (P4PASSWD=password123)
                                   SAVEPASS=<save_in_secure_storage_or_not> (SAVEPASS=false)
                                   OFFLINE=<working_offline_or_not> (OFFLINE=false)

   -perspective      Switch to <perspective> after creating the project.
                     By default, DVT switches to the DVT Perspective if multiple -lang directives are provided.
                     If a single language is enabled, the corresponding perspective is activated.
                     Valid argument values: DVT, E, VLOG, VHDL, CPP, PSS, SLN, SDL, or a perspective ID.
                     Perspective IDs provided by the additional plugins included in the DVT distro:
                       JDT - org.eclipse.jdt.ui.JavaPerspective
                       LUA - org.eclipse.ldt.ui.luaperspective
                       PERL - org.epic.core.Perspective
                       PYTHON - org.python.pydev.ui.PythonPerspective
                       RUBY - org.eclipse.dltk.ruby.ui.RubyPerspective
                       TCL - org.eclipse.dltk.tcl.ui.TclPerspective
                       CVS - org.eclipse.team.cvs.ui.cvsPerspective
                       GIT - org.eclipse.egit.ui.GitRepositoryExploring
                       SVN - org.eclipse.team.svn.ui.repository.RepositoryPerspective
                       PERFORCE - com.perforce.team.ui.perforcePerspective
                       COLLABORATOR - com.smartbear.collaborator.ui.collabPerspective

   -svn              Share project with the Subversive SVN Eclipse plugin.
                     The SVN repository URL must be provided.
                     The repository is added to the SVN Repositories View if not existing.

   -test             Specify a test file for the project. You can specify this option multiple times.

   -top              Specify a top file for the project. You can specify this option multiple times.

   -workingset       Add project to a working set.

   -close_others     Close all projects in the workspace except the newly created one.