|
|
- ################################################################################
- #
- # This file provides a basic wrapper to use git directly from the tcl console in
- # Vivado.
- # It requires the write_project_tcl_git.tcl script to work properly.
- # Unversioned files will be put in the vivado_project folder
- #
- # Ricardo Barbedo
- #
- ################################################################################
-
- namespace eval ::git_wrapper {
- namespace export git
- namespace export wproj
- namespace import ::custom_projutils::write_project_tcl_git
- namespace import ::current_project
- namespace import ::common::get_property
-
- proc git {args} {
- set command [lindex $args 0]
-
- # Change directory project directory if not in it yet
- set proj_dir [regsub {\/vivado_project$} [get_property DIRECTORY [current_project]] {}]
- set current_dir [pwd]
- if {
- [string compare -nocase $proj_dir $current_dir]
- } then {
- puts "Not in project directory"
- puts "Changing directory to: ${proj_dir}"
- cd $proj_dir
- }
-
- switch $command {
- "init" {git_init {*}$args}
- "commit" {git_commit {*}$args}
- "default" {exec git {*}$args}
- }
- }
-
- proc git_init {args} {
- set vivado_version [version -short]
- set current_project [current_project]
-
- # Generate gitignore file
- puts "Generate gitignore file"
- set file [open ".gitignore" "w"]
- puts $file "vivado_project/*"
- puts $file ".Xil/*"
- puts $file "*.str"
- puts $file "*.log"
- puts $file "*.jobs"
- puts $file "*.jou"
- close $file
-
- # Generate readme file
- puts "Generate readme file"
- set file [open "README.md" "w"]
- puts $file "# ${current_project}"
- puts $file ""
- puts $file "Created with Vivado Version ${vivado_version}"
- puts $file ""
- puts $file "### Getting started"
- puts $file ""
- puts $file "After cloning this repo open the project with Vivado by using `Tools -> Run Tcl Script...` and selecting the `${current_project}.tcl` file"
- puts $file ""
- puts $file "### Workflow"
- puts $file ""
- puts $file "- Place source/design files in folder created in the top directory of the repo (e.g. `REPO/src/` or `REPO/design/`)."
- puts $file ""
- puts $file "- **The `vivado_project` folder will be untracked!**"
- puts $file ""
- puts $file "- Wenn you are done, `git add` your source/design files."
- puts $file ""
- puts $file "- Use the Tcl Console from Vivado to `git commit -m \"COMMIT_MESSAGE\"` your work. The `${current_project}.tcl` file will be recreated"
- puts $file ""
- puts $file "### Notes"
- puts $file ""
- puts $file "#### Block design"
- puts $file ""
- puts $file "When you change a block design, **befor you run synthesis** you have to disable the current HDL wrapper and create a new HDL wrapper for each design!"
- close $file
-
- # Initialize the repo
- puts "Initialize the repo"
- exec git {*}$args
- exec git add .gitignore
- exec git add README.md
- git_commit commit -m "create project"
-
- puts "finished!"
- }
-
- proc git_commit {args} {
- # Get project name
- set proj_file [current_project].tcl
-
- # Generate project and add it
- write_project_tcl_git -no_copy_sources -force $proj_file
- puts $proj_file
- exec git add $proj_file
-
- # Now commit everything
- exec git {*}$args
- }
-
- proc wproj {} {
- # Change directory project directory if not in it yet
- set proj_dir [regsub {\/vivado_project$} [get_property DIRECTORY [current_project]] {}]
- set current_dir [pwd]
- if {
- [string compare -nocase $proj_dir $current_dir]
- } then {
- puts "Not in project directory"
- puts "Changing directory to: ${proj_dir}"
- cd $proj_dir
- }
-
- # Generate project
- set proj_file [current_project].tcl
- puts $proj_file
- write_project_tcl_git -no_copy_sources -force $proj_file
- }
- }
|