proc global_placement {args} {
	TIMER::timer_start
	#for {set i 0} {$i < $::env(PL_IO_ITER)} {incr i} {
	try_catch replace < $::env(SCRIPTS_DIR)/replace_gp.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(replaceio_log_file_tag).log

		#try_catch mv $::env(replaceio_tmp_file_tag)_io.def $::env(replaceio_tmp_file_tag)_io_$i.def

		#try_catch ioPlacer \
			-l $::env(MERGED_LEF) \
			-d $::env(replaceio_tmp_file_tag)_place.def \
			-h $::env(FP_IO_HMETAL) \
			-v $::env(FP_IO_VMETAL) \
			-r $::env(FP_IO_RANDOM) \
			\
			-o $::env(replaceio_tmp_file_tag)_io.def \
			|& tee $::env(TERMINAL_OUTPUT) $::env(ioPlacer_log_file_tag).log

		#try_catch cp $::env(replaceio_tmp_file_tag)_place.def $::env(replaceio_tmp_file_tag)_place_$i.def
	#}
	try_catch cp $::env(replaceio_tmp_file_tag)_place.def $::env(replaceio_tmp_file_tag).def
	TIMER::timer_stop
	exec echo "[TIMER::get_runtime]" >> $::env(replaceio_log_file_tag)_runtime.txt
	set_def $::env(replaceio_tmp_file_tag).def

}

proc detailed_placement {args} {
	TIMER::timer_start
	try_catch opendp \
		-lef $::env(MERGED_LEF) \
		-def $::env(CURRENT_DEF) \
		-output_def $::env(opendp_result_file_tag).def \
		|& tee $::env(TERMINAL_OUTPUT) $::env(opendp_log_file_tag).log
	TIMER::timer_stop
	exec echo "[TIMER::get_runtime]" >> $::env(opendp_log_file_tag)_runtime.txt
	if {![catch {eval exec grep -q "FAIL" $::env(opendp_log_file_tag).log}]}  {
		puts "Error: Check $::env(opendp_log_file_tag).log"
		exit 1
	}
	set_def $::env(opendp_result_file_tag).def 
}

proc run_placement {args} {
# |----------------------------------------------------|
# |----------------   3. PLACEMENT   ------------------|
# |----------------------------------------------------|
	set ::env(CURRENT_STAGE) placement

	global_placement
	#try_catch replace < $::env(SCRIPTS_DIR)/replace_io.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(replaceio_log_file_tag).log
	#try_catch Psn --verbose --file $::env(SCRIPTS_DIR)/psn.tcl |& tee /dev/tty $::env(psn_log_file_tag).log

	# GIFing the result
	#puts "Generating Placement GIF"
	#try_catch convert -delay 20 {*}[lsort [glob $::env(RESULTS_DIR)/4_placement/etc/3_floorplanning/output/cell/*.jpg]] \
		-delay 100 $::env(RESULTS_DIR)/4_placement/etc/3_floorplanning/output/globalPlaceResult.jpg \
		\
		$::env(RESULTS_DIR)/4_placement.gif \
		|& tee $::env(TERMINAL_OUTPUT)

	#try_catch cp $::env(RESULTS_DIR)/4_placement/etc/3_floorplanning/output/3_floorplan_final.def $::env(RESULTS_DIR)/4_1_place_gp.def

	# outputs: 4_1_place_gp.def

	# detailed 4_placement
	detailed_placement
}

package provide openlane 0.9
