Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
Hdlmake
Manage
Activity
Members
Labels
Plan
Issues
20
Issue boards
Milestones
Wiki
Code
Merge requests
5
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Projects
Hdlmake
Commits
e314c24d
Commit
e314c24d
authored
13 years ago
by
Pawel Szostek
Browse files
Options
Downloads
Patches
Plain Diff
Add ISE list generating
parent
4cc195d9
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
synthesis/depend.py
+48
-15
48 additions, 15 deletions
synthesis/depend.py
synthesis/hdlmake.py
+56
-46
56 additions, 46 deletions
synthesis/hdlmake.py
synthesis/path.py
+12
-6
12 additions, 6 deletions
synthesis/path.py
with
116 additions
and
67 deletions
synthesis/depend.py
+
48
−
15
View file @
e314c24d
...
...
@@ -43,7 +43,7 @@ def search_for_use(file):
ret
.
append
((
m
.
group
(
1
),
m
.
group
(
2
)))
f
.
close
()
return
ret
def
search_for_package
(
file
):
"""
Reads a file and looks for package clase. Returns list of packages
'
names
...
...
@@ -55,7 +55,7 @@ def search_for_package(file):
if
text
is
None
:
return
[]
text
=
text
.
split
(
"
\n
"
)
ret
=
[]
package_pattern
=
re
.
compile
(
"
^[
\t
]*package[
\t
]+([^
\t
]+)[
\t
]+is[
\t
]*$
"
)
for
line
in
text
:
...
...
@@ -64,11 +64,12 @@ def search_for_package(file):
ret
.
append
(
m
.
group
(
1
))
f
.
close
()
return
ret
def
generate_deps_for_sv_files
(
files
):
def
search_for_sv_include
(
file
):
f
=
open
(
file
,
"
r
"
)
text
=
f
.
readlines
()
ret
=
[]
package_pattern
=
re
.
compile
(
"
^[
\t
]*`include[
\t
]+
\"
([^
\t
]+)
\"
[
\t
]*$
"
)
for
line
in
text
:
...
...
@@ -83,32 +84,32 @@ def generate_deps_for_sv_files(files):
file_file_dict
=
{}
for
file
in
files
:
file_file_dict
[
file
]
=
search_for_sv_include
(
file
)
def
generate_deps_for_vhdl_in_modules
(
modules_paths
):
if
not
isinstance
(
modules_paths
,
list
):
modules_paths
=
[
modules_paths
]
from
hdlmake
import
search_for_manifest
module_manifest_dict
=
{}
for
module
in
modules_paths
:
module_manifest_dict
[
module
]
=
search_for_manifest
(
module
)
from
hdlmake
import
parse_manifest
opt_map_dict
=
{}
for
module
in
list
(
module_manifest_dict
.
keys
()):
if
module_manifest_dict
[
module
]
!=
None
:
opt_map_dict
[
module
]
=
parse_manifest
(
module_manifest_dict
[
module
])
module_files_dict
=
{}
from
path
import
make_list_of_files
for
module
in
modules_paths
:
if
module
in
opt_map_dict
:
module_files_dict
[
module
]
=
make_list_of_files
(
module
,
opt_map_dict
[
module
].
files
,
os
.
path
.
dirname
(
module_manifest_dict
[
module
]))
module_files_dict
[
module
]
=
make_list_of_files
(
module
,
opt_map_dict
[
module
].
files
,
os
.
path
.
dirname
(
module_manifest_dict
[
module
])
,
file_type
=
"
vhd
"
)
else
:
module_files_dict
[
module
]
=
make_list_of_files
(
module
)
module_files_dict
[
module
]
=
make_list_of_files
(
module
,
file_type
=
"
vhd
"
)
all_files
=
[]
file_lib_dict
=
{}
for
k
in
module_files_dict
:
for
x
in
module_files_dict
[
k
]:
if
k
in
opt_map_dict
:
...
...
@@ -117,15 +118,16 @@ def generate_deps_for_vhdl_in_modules(modules_paths):
file_lib_dict
[
os
.
path
.
abspath
(
x
)]
=
"
work
"
all_files
.
append
(
os
.
path
.
abspath
(
x
))
all_files
=
list
(
set
(
all_files
))
p
.
pprint
(
all_files
)
#all_files = [(opt_map_dict[k].library, os.path.abspath(x)) for k in module_files_dict for x in module_files_dict[k]]
all_vhdl_files
=
[
x
for
x
in
all_files
if
os
.
path
.
splitext
(
x
)[
1
]
==
'
.vhd
'
]
p
.
vpprint
(
all_vhdl_files
)
file_use_clause_dict
=
{}
for
file
in
all_vhdl_files
:
file_use_clause_dict
[
file
]
=
search_for_use
(
file
)
p
.
vpprint
(
file_use_clause_dict
)
package_file_dict
=
{}
for
file
in
all_vhdl_files
:
packages
=
search_for_package
(
file
)
#look for package definitions
...
...
@@ -142,10 +144,10 @@ def generate_deps_for_vhdl_in_modules(modules_paths):
p
.
echo
(
"
There might be a problem... Compilation unit
"
+
file_purename
+
"
has several instances:
\n\t
"
+
file
+
"
\n\t
"
+
package_file_dict
[
file_purename
])
package_file_dict
[
file_purename
.
lower
()]
=
file
p
.
vpprint
(
package_file_dict
)
p
.
vpprint
(
file_lib_dict
)
file_file_dict
=
{}
for
file
in
all_vhdl_files
:
file_units_list
=
file_use_clause_dict
[
file
]
...
...
@@ -169,6 +171,37 @@ def modelsim_ini_path():
vsim_path
=
os
.
popen
(
"
which vsim
"
).
read
().
strip
()
bin_path
=
os
.
path
.
dirname
(
vsim_path
)
return
os
.
path
.
abspath
(
bin_path
+
"
/../
"
)
def
generate_list_makefile
(
file_deps_dict
,
file_lib_dict
):
from
time
import
gmtime
,
strftime
import
path
#p.vpprint(file_deps_dict)
#p.vpprint(file_lib_dict)
#from path import relpath as rp
date
=
strftime
(
"
%a, %d %b %Y %H:%M:%S
"
,
gmtime
())
notices
=
"""
#######################################################################
# This makefile has been automatically generated by hdl-make
# for project
"""
+
path
.
url_basename
(
global_mod
.
cwd
)
+
"""
on
"""
+
date
+
"""
#######################################################################
"""
filename
=
"
ise_list
"
rp
=
os
.
path
.
relpath
f
=
open
(
"
Makefile_list
"
,
"
w
"
)
f
.
write
(
notices
)
f
.
write
(
"
file: create_a_file
\n
"
)
f
.
write
(
"
create_a_file:
\n\t\t
@printf
\"\"
>
"
+
filename
+
"
\n
"
)
f
.
write
(
"
file:
"
)
for
file
in
file_deps_dict
:
f
.
write
(
rp
(
file
)
+
"
__print
\\\n
"
)
f
.
write
(
"
\n
"
)
for
file
in
file_deps_dict
:
f
.
write
(
rp
(
file
)
+
"
__print:
"
)
f
.
write
(
'
'
.
join
(
rp
(
x
)
+
"
__print
"
for
x
in
file_deps_dict
[
file
]))
f
.
write
(
'
\n
'
)
f
.
write
(
"
\t\t
@echo
\'
"
+
file_lib_dict
[
file
]
+
'
;
'
+
rp
(
file
)
+
"
\'
>> ise_list
\n\n
"
)
f
.
write
(
"
\t\t
@echo Done.
"
)
def
generate_makefile
(
file_deps_dict
,
file_lib_dict
):
from
time
import
gmtime
,
strftime
import
path
...
...
@@ -226,7 +259,7 @@ clean:
f
.
write
(
'
LIBS :=
'
)
f
.
write
(
'
'
.
join
(
libs
))
f
.
write
(
'
\n
'
)
#tell h
w
o to make libraries
#tell ho
w
to make libraries
f
.
write
(
'
LIB_IND :=
'
)
f
.
write
(
'
'
.
join
([
lib
+
"
/.
"
+
lib
for
lib
in
libs
]))
f
.
write
(
'
\n
'
)
...
...
This diff is collapsed.
Click to expand it.
synthesis/hdlmake.py
+
56
−
46
View file @
e314c24d
...
...
@@ -29,7 +29,7 @@ def parse_repo_url(url) :
"""
url_pat
=
re
.
compile
(
"
[
\t
]*([^
\t
]+)[
\t
]*(@[
\t
]*(.+))?[
\t
]*
"
)
url_match
=
re
.
match
(
url_pat
,
url
)
if
url_match
==
None
:
p
.
echo
(
"
Skipping
"
)
raise
RuntimeError
(
"
Not a correct repo url:
"
+
url
)
...
...
@@ -38,7 +38,31 @@ def parse_repo_url(url) :
else
:
ret
=
url_match
.
group
(
1
)
return
ret
def
make_list_of_modules
(
top_manifest
,
top_opt_map
):
cur_manifest
=
top_manifest
modules
=
[]
new_manifests
=
[]
opt_map
=
top_opt_map
while
True
:
if
opt_map
.
local
!=
None
:
modules
.
extend
(
opt_map
.
local
)
for
i
in
opt_map
.
local
:
manifest
=
search_for_manifest
(
i
)
if
manifest
!=
None
:
new_manifests
.
append
(
manifest
)
if
len
(
new_manifests
)
==
0
:
break
;
cur_manifest
=
new_manifests
.
pop
()
opt_map
=
parse_manifest
(
cur_manifest
)
if
os
.
path
.
exists
(
global_mod
.
hdlm_path
):
modules
+=
[
global_mod
.
hdlm_path
+
"
/
"
+
x
for
x
in
os
.
listdir
(
global_mod
.
hdlm_path
)]
if
len
(
modules
)
==
0
:
p
.
vprint
(
"
No modules were found in
"
+
global_mod
.
hdlm_path
)
return
modules
def
check_module_and_append
(
list
,
module
):
"""
Appends a module to the list if it doesn
'
t belong to it. If it is already there, complain
...
...
@@ -52,9 +76,9 @@ def check_module_and_append(list, module):
return
1
list
.
append
(
module
)
return
0
def
parse_manifest
(
manifest_file
):
def
make_list
(
sth
):
if
sth
!=
None
:
if
not
isinstance
(
sth
,
(
list
,
tuple
)):
...
...
@@ -62,9 +86,9 @@ def parse_manifest(manifest_file):
else
:
sth
=
[]
return
sth
manifest_path
=
os
.
path
.
dirname
(
manifest_file
)
manifest_parser
=
cfgparse
.
ConfigParser
(
allow_py
=
True
)
manifest_parser
.
add_option
(
'
root
'
,
default
=
None
)
manifest_parser
.
add_option
(
'
name
'
,
default
=
None
)
...
...
@@ -77,13 +101,13 @@ def parse_manifest(manifest_file):
manifest_parser
.
add_option
(
'
rtl
'
,
default
=
None
)
manifest_parser
.
add_option
(
'
files
'
,
default
=
None
)
manifest_parser
.
add_file
(
manifest_file
)
#Take configuration parser from the global namespace
opt_map
=
manifest_parser
.
parse
()
if
opt_map
.
root
==
None
:
opt_map
.
root
=
"
.
"
if
opt_map
.
rtl
==
None
:
opt_map
.
rtl
=
[
"
.
"
]
elif
not
isinstance
(
opt_map
.
rtl
,
list
):
...
...
@@ -91,7 +115,7 @@ def parse_manifest(manifest_file):
if
opt_map
.
ise
==
None
:
opt_map
.
ise
=
"
13.1
"
opt_map
.
local
=
make_list
(
opt_map
.
local
)
for
i
in
opt_map
.
local
:
if
path
.
is_abs_path
(
i
):
...
...
@@ -108,14 +132,14 @@ def convert_xise(xise):
if
not
os
.
path
.
exists
(
xise
):
p
.
echo
(
"
Given .xise file does not exist:
"
+
xise
)
quit
()
modules
=
[
"
.
"
]
modules
.
append
(
global_mod
.
hdlm_path
)
files
=
make_list_of_files
(
modules
)
ise
=
open
(
xise
,
"
r
"
)
ise_lines
=
[
x
.
strip
()
for
x
in
ise
.
readlines
()]
new_ise
=
[]
file_pattern
=
re
.
compile
(
'
([
\t
]*<file xil_pn:name=
"
)([^
"
]+)(
"
.*>)
'
)
#print ise_lines
...
...
@@ -136,7 +160,7 @@ def convert_xise(xise):
new_ise
.
append
(
line
)
else
:
new_ise
.
append
(
line
+
"
\n
"
)
new_ise_file
=
open
(
xise
+
"
.new
"
,
"
w
"
)
def
search_for_manifest
(
search_path
):
...
...
@@ -177,16 +201,17 @@ def main():
parser
.
add_option
(
"
-o
"
,
"
--convert-xise
"
,
dest
=
"
xise
"
,
default
=
None
,
help
=
"
convert paths in the given XISE_FILE
"
,
metavar
=
"
XISE_FILE
"
)
parser
.
add_option
(
"
-s
"
,
"
--synth-server
"
,
dest
=
"
synth_server
"
,
default
=
None
,
help
=
"
use given SERVER for remote synthesis
"
,
metavar
=
"
SERVER
"
)
parser
.
add_option
(
"
-u
"
,
"
--synth-user
"
,
dest
=
"
synth_user
"
,
default
=
None
,
help
=
"
use given USER for remote synthesis
"
,
metavar
=
"
USER
"
)
parser
.
add_option
(
"
--no-del
"
,
dest
=
"
no_del
"
,
default
=
None
,
help
=
"
do not delete catalog after remote synthesis
"
)
parser
.
add_option
(
"
--make-list
"
,
dest
=
"
make_list
"
,
action
=
"
store_true
"
,
default
=
None
,
help
=
"
make list of project files in ISE format
"
)
parser
.
add_option
(
"
--no-del
"
,
dest
=
"
no_del
"
,
action
=
"
store_true
"
,
default
=
None
,
help
=
"
do not delete catalog after remote synthesis
"
)
(
global_mod
.
options
,
args
)
=
parser
.
parse_args
()
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#Check if any option was selected
if
global_mod
.
options
.
local
==
global_mod
.
options
.
fetch
==
global_mod
.
options
.
remote
==
global_mod
.
options
.
make
==
global_mod
.
options
.
clean
==
None
:
import
sys
p
.
echo
(
"
Are you sure you didn
'
t forget to specify an option? At least one?
"
)
p
.
echo
(
"
Maybe you should try
"
+
sys
.
argv
[
0
]
+
"
-h
"
)
quit
()
#
if global_mod.options.local == global_mod.options.fetch == global_mod.options.remote == global_mod.options.make == global_mod.options.clean == None:
#
import sys
#
p.echo("Are you sure you didn't forget to specify an option? At least one?")
#
p.echo("Maybe you should try " + sys.argv[0] + " -h")
#
quit()
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
if
global_mod
.
options
.
xise
!=
None
:
convert_xise
(
global_mod
.
options
.
xise
)
...
...
@@ -368,35 +393,20 @@ def main():
if
global_mod
.
options
.
no_del
!=
True
:
p
.
echo
(
"
Deleting synthesis folder
"
)
global_mod
.
ssh
.
system
(
'
rm -rf
'
+
dest_folder
)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
if
global_mod
.
options
.
make_list
==
True
:
import
depend
modules
=
make_list_of_modules
(
global_mod
.
top_manifest
,
global_mod
.
opt_map
)
p
.
vprint
(
"
Modules that will be taken into account in the makefile:
"
+
str
(
modules
))
deps
,
libs
=
depend
.
generate_deps_for_vhdl_in_modules
(
modules
)
depend
.
generate_list_makefile
(
deps
,
libs
)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
if
global_mod
.
options
.
make
==
True
:
import
depend
cur_manifest
=
global_mod
.
top_manifest
involved_modules
=
[]
new_manifests
=
[]
opt_map
=
global_mod
.
opt_map
while
True
:
if
opt_map
.
local
!=
None
:
involved_modules
.
extend
(
opt_map
.
local
)
for
i
in
opt_map
.
local
:
manifest
=
search_for_manifest
(
i
)
if
manifest
!=
None
:
new_manifests
.
append
(
manifest
)
if
len
(
new_manifests
)
==
0
:
break
;
cur_manifest
=
new_manifests
.
pop
()
opt_map
=
parse_manifest
(
cur_manifest
)
modules
=
involved_modules
if
os
.
path
.
exists
(
global_mod
.
hdlm_path
):
modules
+=
[
global_mod
.
hdlm_path
+
"
/
"
+
x
for
x
in
os
.
listdir
(
global_mod
.
hdlm_path
)]
if
len
(
modules
)
==
0
:
p
.
vprint
(
"
No modules were found in
"
+
global_mod
.
hdlm_path
)
#modules += global_mod.opt_map.rtl
modules
=
make_list_of_modules
(
global_mod
.
top_manifest
,
global_mod
.
opt_map
)
p
.
vprint
(
"
Modules that will be taken into account in the makefile:
"
+
str
(
modules
))
deps
,
libs
=
depend
.
generate_deps_for_vhdl_in_modules
(
modules
)
depend
.
generate_makefile
(
deps
,
libs
)
...
...
This diff is collapsed.
Click to expand it.
synthesis/path.py
+
12
−
6
View file @
e314c24d
...
...
@@ -60,11 +60,11 @@ def rel2abs(path, base = os.curdir):
retval
=
os
.
path
.
join
(
base
,
path
)
return
os
.
path
.
abspath
(
retval
)
def
make_list_of_files
(
modules
,
take_files
=
None
,
base_folder
=
None
):
def
make_list_of_files
(
modules
,
take_files
=
None
,
base_folder
=
None
,
file_type
=
None
):
"""
Make list of all files included in the list of folders
"""
def
getfiles
(
path
):
def
getfiles
(
path
,
file_type
=
None
):
"""
Get lists of normal files and list folders recursively
"""
...
...
@@ -73,17 +73,23 @@ def make_list_of_files(modules, take_files = None, base_folder = None):
if
filename
[
0
]
==
"
.
"
:
#a hidden file/catalogue -> skip
continue
if
os
.
path
.
isdir
(
path
+
"
/
"
+
filename
):
ret
.
extend
(
getfiles
(
path
+
"
/
"
+
filename
))
ret
.
extend
(
getfiles
(
path
+
"
/
"
+
filename
,
file_type
))
else
:
ret
.
append
(
path
+
"
/
"
+
filename
)
if
file_type
==
None
:
ret
.
append
(
path
+
"
/
"
+
filename
)
else
:
tmp
=
filename
.
rsplit
(
'
.
'
)
ext
=
tmp
[
len
(
tmp
)
-
1
]
if
ext
==
file_type
:
ret
.
append
(
path
+
'
/
'
+
filename
)
return
ret
files
=
[]
if
not
isinstance
(
modules
,
list
):
files
=
getfiles
(
modules
)
files
=
getfiles
(
modules
,
file_type
)
else
:
for
module
in
modules
:
files
.
extend
(
getfiles
(
module
))
files
.
extend
(
getfiles
(
module
,
file_type
))
if
take_files
!=
None
and
take_files
!=
[]:
ret_files
=
[]
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment