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
	set ::env(SAVE_DEF) $::env(replaceio_tmp_file_tag)_openroad.def
	try_catch openroad -exit $::env(SCRIPTS_DIR)/openroad/or_replace.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(replaceio_log_file_tag)_openroad.log
	TIMER::timer_stop
	exec echo "[TIMER::get_runtime]" >> $::env(replaceio_log_file_tag)_runtime.txt
	set_def $::env(SAVE_DEF)
	
	#try_catch openroad -exit $::env(SCRIPTS_DIR)/replace_gp.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(replaceio_log_file_tag)_openroad.log
	#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
	
	set ::env(SAVE_DEF) $::env(opendp_result_file_tag)_openroad.def
	try_catch openroad -exit $::env(SCRIPTS_DIR)/openroad/or_opendp.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(opendp_log_file_tag)_openroad.log
	TIMER::timer_stop
	exec echo "[TIMER::get_runtime]" >> $::env(opendp_log_file_tag)_runtime.txt
	set_def $::env(SAVE_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
