# SPDX-FileCopyrightText: 2020 Efabless Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0

#---------------------------------------------------------------------
# 1) must set the variable PDK_ROOT
#---------------------------------------------------------------------

puts stdout "Sourcing design .magicrc for technology sky130A ..."

#---------------------------------------------------------------------

# Put grid on 0.005 pitch.  This is important, as some commands don't
# rescale the grid automatically (such as lef read?).

set scalefac [tech lambda]
if {[lindex $scalefac 1] < 2} {
    scalegrid 1 2
}
#---------------------------------------------------------------------
#
# Allow override of DRC on/off from environment variable DRC
#
#---------------------------------------------------------------------
if {[catch {set DRC $env(DRC)}]} {
    # default value
    	drc  off
} else {
	drc style drc(full)
	drc euclidean on
	sdrc $DRC
}
#
#---------------------------------------------------------------------
# Allow override of PDK path from environment variable PDKPATH
#
if {[catch {set PDKPATH $env(PDKPATH)}]} {
    set PDKPATH "$::env(PDK_ROOT)/sky130A"
}
#---------------------------------------------------------------------
# loading technology
tech load $PDKPATH/libs.tech/magic/current/sky130A.tech

#---------------------------------------------------------------------
# load device generator
source $PDKPATH/libs.tech/magic/current/sky130A.tcl

#---------------------------------------------------------------------
# load bind keys (optional)
# source $PDKPATH/libs.tech/magic/current/sky130A-BindKeys

#---------------------------------------------------------------------
# set units to lambda grid 
snap lambda

#---------------------------------------------------------------------

# set sky130 standard power, ground, and substrate names
set VDD VPWR
set GND VGND
set SUB VSUBS

#---------------------------------------------------------------------

# Allow override of type of magic library views used, "mag" or "maglef",
# from environment variable MAGTYPE. Deafault value is MAGTYPE=maglef

if {[catch {set MAGTYPE $env(MAGTYPE)}]} {
   set MAGTYPE maglef
}

path search [concat "../$MAGTYPE" [path search]]

#---------------------------------------------------------------------

# add path to reference cells
if {[file isdir ${PDKPATH}/libs.ref/${MAGTYPE}]} {
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_pr
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_io
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hd
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hdll
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hs
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hvl
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_lp
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ls
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ms
    addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_osu_sc
} else {
    addpath ${PDKPATH}/libs.ref/sky130_fd_pr/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_fd_io/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hd/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hdll/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hs/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hvl/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_fd_sc_lp/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ls/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ms/${MAGTYPE}
    addpath ${PDKPATH}/libs.ref/sky130_osu_sc/${MAGTYPE}
}

# add path to GDS cells

    addpath ../gds

# add path to IP from catalog.  This procedure defined in the PDK script.
catch {magic::query_mylib_ip}
# add path to local IP from user design space.  Defined in the PDK script.
catch {magic::query_my_projects}
