#set olddir [pwd]
#cd $::env(RESULTS_DIR)/magic

drc off

lef read $::env(TECH_LEF)

if {  [info exist ::env(EXTRA_LEFS)] } {
	set lefs_in $::env(EXTRA_LEFS)
	foreach lef_file $lefs_in {
		lef read $lef_file
	}
}

# Read def and load design
def read $::env(CURRENT_DEF)

gds readonly true
gds rescale false
if {  [info exist ::env(EXTRA_GDS_FILES)] } {
       set gds_files_in $::env(EXTRA_GDS_FILES)
       foreach gds_file $gds_files_in {
               gds read $gds_file
       }
}


load $::env(DESIGN_NAME)
select top cell

# padding

if { $::env(MAGIC_PAD) } {
	puts "padding lefs"
	# assuming scalegrid 1 2
	# use um
	select top cell
	box grow right [expr 100*($::env(PLACE_SITE_WIDTH))]
	box grow left [expr 100*($::env(PLACE_SITE_WIDTH))]
	box grow up [expr 100*($::env(PLACE_SITE_HEIGHT))]
	box grow down [expr 100*($::env(PLACE_SITE_HEIGHT))]
	property FIXED_BBOX [box values]
}
if { $::env(MAGIC_ZEROIZE_ORIGIN) } {
	# assuming scalegrid 1 2
	# makes origin zero based on the selection
	puts "zeroizing origin"
	set bbox [box values]
	set offset_x [lindex $bbox 0]
	set offset_y [lindex $bbox 1]
	move origin [expr {$offset_x/2}] [expr {$offset_y/2}]
	puts "current box values: [box values]"
	property FIXED_BBOX [box values]
}

select top cell

puts "saving box values: [box values]"
save $::env(magic_result_file_tag).mag
puts "saved box values: [box values]"

# Write gds
cellname rename $::env(magic_result_file_tag) $::env(DESIGN_NAME)
if { $::env(MAGIC_GENERATE_GDS) } {
	cif *hier write disable
	#gds write $::env(magic_result_file_tag).gds
	cd $::env(RUN_DIR)/results/magic/
	gds write $::env(DESIGN_NAME).gds
	puts "GDS write complete"
	cd $::env(OPENLANE_ROOT)
}

if { $::env(MAGIC_GENERATE_LEF) } {
	lef write $::env(magic_result_file_tag).lef -hide
	lef write $::env(magic_result_file_tag).full.lef
	puts "LEF write complete"
}

puts "MAGIC TAPEOUT STEP DONE"

#cd $olddir
exit 0
