mirror of https://github.com/KLayout/klayout.git
Merge branch 'master' of https://github.com/KLayout/klayout into netlist_properties
This commit is contained in:
commit
bb3aed5773
|
|
@ -28,31 +28,39 @@ pwd=$(pwd)
|
|||
|
||||
enable32bit=1
|
||||
enable64bit=1
|
||||
args=""
|
||||
suffix=""
|
||||
|
||||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||
echo "Runs the Windows build include installer generation."
|
||||
echo ""
|
||||
echo "Run this script from the root directory."
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo " scripts/deploy-win-mingw.sh <options>"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -32 Run 32 bit build only"
|
||||
echo " -64 Run 64 bit build only"
|
||||
echo ""
|
||||
echo "By default, both 32 and 64 bit builds are performed"
|
||||
exit 0
|
||||
elif [ "$1" = "-32" ]; then
|
||||
enable64bit=0
|
||||
enable32bit=1
|
||||
elif [ "$1" = "-64" ]; then
|
||||
enable64bit=1
|
||||
enable32bit=0
|
||||
elif [ "$1" != "" ]; then
|
||||
echo "ERROR: invalid option $1 (use -h for details)"
|
||||
exit 1
|
||||
fi
|
||||
while [ "$1" != "" ]; do
|
||||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||
echo "Runs the Windows build include installer generation."
|
||||
echo ""
|
||||
echo "Run this script from the root directory."
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo " scripts/deploy-win-mingw.sh <options>"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -32 Run 32 bit build only"
|
||||
echo " -64 Run 64 bit build only"
|
||||
echo " -s <suffix> Binary suffix"
|
||||
echo ""
|
||||
echo "By default, both 32 and 64 bit builds are performed"
|
||||
exit 0
|
||||
elif [ "$1" = "-32" ]; then
|
||||
enable64bit=0
|
||||
enable32bit=1
|
||||
elif [ "$1" = "-64" ]; then
|
||||
enable64bit=1
|
||||
enable32bit=0
|
||||
elif [ "$1" = "-s" ]; then
|
||||
shift
|
||||
suffix="-$1"
|
||||
else
|
||||
args="$args $1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
# ---------------------------------------------------
|
||||
# Bootstrap script
|
||||
|
|
@ -63,6 +71,8 @@ if [ "$KLAYOUT_BUILD_IN_PROGRESS" == "" ]; then
|
|||
self=$(which $0)
|
||||
|
||||
export KLAYOUT_BUILD_IN_PROGRESS=1
|
||||
export KLAYOUT_BUILD_ARGS="$args"
|
||||
export KLAYOUT_BUILD_SUFFIX="$suffix"
|
||||
|
||||
# Run ourself in MINGW32 system for the win32 build
|
||||
if [ "$enable32bit" != "0" ]; then
|
||||
|
|
@ -104,13 +114,15 @@ plugins="audio generic iconengines imageformats platforms printsupport sqldriver
|
|||
echo "------------------------------------------------------------------"
|
||||
echo "Running build for architecture $arch .."
|
||||
echo ""
|
||||
echo " target = $target"
|
||||
echo " build = $build"
|
||||
echo " version = $KLAYOUT_VERSION"
|
||||
echo " target = $target"
|
||||
echo " build = $build"
|
||||
echo " version = $KLAYOUT_VERSION"
|
||||
echo " build args = $KLAYOUT_BUILD_ARGS"
|
||||
echo " suffix = $KLAYOUT_BUILD_SUFFIX"
|
||||
echo ""
|
||||
|
||||
rm -rf $target
|
||||
./build.sh -python $python -ruby $ruby -bin $target -build $build -j2
|
||||
./build.sh -python $python -ruby $ruby -bin $target -build $build -j2$KLAYOUT_BUILD_ARGS
|
||||
|
||||
if ! [ -e $target ]; then
|
||||
echo "ERROR: Target directory $target not found"
|
||||
|
|
@ -227,12 +239,12 @@ done
|
|||
# longer require the copy
|
||||
cp $scripts/klayout-inst.nsis $target
|
||||
cd $target
|
||||
NSIS_VERSION=$KLAYOUT_VERSION NSIS_ARCH=$arch "$makensis" klayout-inst.nsis
|
||||
NSIS_VERSION=$KLAYOUT_VERSION NSIS_ARCH=$arch$KLAYOUT_BUILD_SUFFIX "$makensis" klayout-inst.nsis
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Produce the .zip file
|
||||
|
||||
zipname="klayout-$KLAYOUT_VERSION-$arch"
|
||||
zipname="klayout-$KLAYOUT_VERSION-$arch$KLAYOUT_BUILD_SUFFIX"
|
||||
|
||||
echo "Making .zip file $zipname.zip .."
|
||||
|
||||
|
|
|
|||
6
setup.py
6
setup.py
|
|
@ -333,10 +333,10 @@ class Config(object):
|
|||
version_file = os.path.join(os.path.dirname(__file__), "version.sh")
|
||||
with open(version_file, "r") as file:
|
||||
version_txt = file.read()
|
||||
rm = re.search(r"KLAYOUT_VERSION\s*=\s*\"(.*?)\".*", version_txt)
|
||||
rm = re.search(r"KLAYOUT_PYPI_VERSION\s*=\s*\"(.*?)\".*", version_txt)
|
||||
if rm:
|
||||
version_string = rm.group(1)
|
||||
print("KLAYOUT_VERSION = " + version_string)
|
||||
print("KLAYOUT_PYPI_VERSION = " + version_string)
|
||||
return version_string
|
||||
|
||||
raise RuntimeError("Unable to obtain version string from version.sh")
|
||||
|
|
@ -550,7 +550,7 @@ if __name__ == '__main__':
|
|||
# Optional classifiers
|
||||
"Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
|
||||
],
|
||||
url='https://github.com/klayoutmatthias/klayout',
|
||||
url='https://github.com/klayout/klayout',
|
||||
packages=find_packages('src/pymod/distutils_src'),
|
||||
package_dir={'': 'src/pymod/distutils_src'}, # https://github.com/pypa/setuptools/issues/230
|
||||
ext_modules=[_tl, _gsi, _pya, _db, _lib, _rdb] + db_plugins + [tl, db, lib, rdb])
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ HierarchyBuilder::register_variant (db::cell_index_type non_var, db::cell_index_
|
|||
void
|
||||
HierarchyBuilder::unregister_variant (db::cell_index_type var)
|
||||
{
|
||||
variant_to_original_target_map_type::const_iterator v = m_variants_to_original_target_map.find (var);
|
||||
variant_to_original_target_map_type::iterator v = m_variants_to_original_target_map.find (var);
|
||||
if (v == m_variants_to_original_target_map.end ()) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -297,7 +297,7 @@ TEST(8_GridVariants)
|
|||
// expanded placements mod 10:
|
||||
// c in a: r0 *2 x=1,1+102 y=10,10+101 x r0 *1 x=2,y=3
|
||||
// = (3,3),(5,3),(3,4),(5,4)
|
||||
EXPECT_EQ (var2str (vb.variants (c.cell_index ())), "r0 *1 3,3[1];r0 *1 5,3[1];r0 *1 3,4[1];r0 *1 5,4[1]");
|
||||
EXPECT_EQ (var2str (vb.variants (c.cell_index ())), "r0 *1 -5,3[1];r0 *1 3,3[1];r0 *1 -5,4[1];r0 *1 3,4[1]");
|
||||
EXPECT_EQ (var2str (vb.variants (d.cell_index ())), "");
|
||||
|
||||
EXPECT_EQ (inst2str (ly, a), "B:r0 *1 1,10;B:r0 *1 1,111;B:r0 *1 103,10;B:r0 *1 103,111");
|
||||
|
|
@ -306,13 +306,13 @@ TEST(8_GridVariants)
|
|||
|
||||
std::map<db::cell_index_type, std::map<db::ICplxTrans, db::cell_index_type> > vm;
|
||||
vb.separate_variants (ly, a, &vm);
|
||||
EXPECT_EQ (vm2str (ly, vm), "B:B[r0 *1 1,0],B$VAR1[r0 *1 3,0],B$VAR2[r0 *1 1,1],B$VAR3[r0 *1 3,1];C:C[r0 *1 3,3],C$VAR1[r0 *1 5,3],C$VAR2[r0 *1 3,4],C$VAR3[r0 *1 5,4]");
|
||||
EXPECT_EQ (vm2str (ly, vm), "B:B[r0 *1 1,0],B$VAR1[r0 *1 3,0],B$VAR2[r0 *1 1,1],B$VAR3[r0 *1 3,1];C:C[r0 *1 -5,3],C$VAR1[r0 *1 3,3],C$VAR2[r0 *1 -5,4],C$VAR3[r0 *1 3,4]");
|
||||
|
||||
EXPECT_EQ (inst2str (ly, a), "B:r0 *1 1,10;B$VAR2:r0 *1 1,111;B$VAR1:r0 *1 103,10;B$VAR3:r0 *1 103,111");
|
||||
EXPECT_EQ (inst2str (ly, b), "C:r0 *1 2,3");
|
||||
EXPECT_EQ (inst2str (ly, ly.cell (ly.cell_by_name ("B$VAR1").second)), "C$VAR1:r0 *1 2,3");
|
||||
EXPECT_EQ (inst2str (ly, ly.cell (ly.cell_by_name ("B$VAR2").second)), "C$VAR2:r0 *1 2,3");
|
||||
EXPECT_EQ (inst2str (ly, ly.cell (ly.cell_by_name ("B$VAR3").second)), "C$VAR3:r0 *1 2,3");
|
||||
EXPECT_EQ (inst2str (ly, b), "C$VAR1:r0 *1 2,3");
|
||||
EXPECT_EQ (inst2str (ly, ly.cell (ly.cell_by_name ("B$VAR1").second)), "C:r0 *1 2,3");
|
||||
EXPECT_EQ (inst2str (ly, ly.cell (ly.cell_by_name ("B$VAR2").second)), "C$VAR3:r0 *1 2,3");
|
||||
EXPECT_EQ (inst2str (ly, ly.cell (ly.cell_by_name ("B$VAR3").second)), "C$VAR2:r0 *1 2,3");
|
||||
EXPECT_EQ (inst2str (ly, c), "");
|
||||
}
|
||||
|
||||
|
|
@ -352,21 +352,21 @@ TEST(9_ComplexGridVariants)
|
|||
// (-9,102),(-9,207),(-112,102),(-112,207)
|
||||
// r90 *1 x=1,y=100 x m0 *1 x=2,y=100
|
||||
// (-99,102)
|
||||
// expanded placements mod 10:
|
||||
// expanded ((placements + 5) mod 10) - placements
|
||||
// c in a: r0 *2 x=1,1+102 y=10,10+101 x r0 *2 x=2,2+105 y=10,10+103
|
||||
// = (5,0),(5,0),(5,6),(5,6)
|
||||
// (7,0),(7,0),(7,6),(7,6)
|
||||
// (5,1),(5,1),(5,7),(5,7)
|
||||
// (7,1),(7,1),(7,7),(7,7)
|
||||
// = (5,0),(5,0),(-5,-4),(-5,-4)
|
||||
// (7,0),(7,0),(-3,-4),(-3,-4)
|
||||
// (-5,1),(-5,1),(-5,-3),(-5,-3)
|
||||
// (-3,1),(-3,1),(-3,-3),(-3,-3)
|
||||
// r0 *2 x=1,1+102 y=10,10+101 x m0 *1 x=2,y=100
|
||||
// (5,0),(5,1),(7,0),(7,1)
|
||||
// (-5,0),(-5,1),(-3,0),(-3,1)
|
||||
// r90 *1 x=1,y=100 x r0 *2 x=2,2+105 y=10,10+103
|
||||
// (1,2),(1,7),(8,2),(8,7)
|
||||
// (1,2),(1,-3),(-2,2),(-2,-3)
|
||||
// r90 *1 x=1,y=100 x m0 *1 x=2,y=100
|
||||
// (1,2)
|
||||
EXPECT_EQ (var2str (vb.variants (c.cell_index ())), "m0 *2 5,0[1];r0 *4 5,0[2];m0 *2 7,0[1];r0 *4 7,0[2];m0 *2 5,1[1];r0 *4 5,1[2];"
|
||||
"m0 *2 7,1[1];r0 *4 7,1[2];m45 *1 1,2[1];r90 *2 1,2[1];r90 *2 8,2[1];"
|
||||
"r0 *4 5,6[2];r0 *4 7,6[2];r90 *2 1,7[1];r0 *4 5,7[2];r0 *4 7,7[2];r90 *2 8,7[1]");
|
||||
EXPECT_EQ (var2str (vb.variants (c.cell_index ())), "r0 *4 -5,-4[2];r0 *4 -3,-4[2];r0 *4 -5,-3[2];r0 *4 -3,-3[2];r90 *2 -2,-3[1];"
|
||||
"r90 *2 1,-3[1];m0 *2 -5,0[1];r0 *4 -5,0[2];m0 *2 -3,0[1];r0 *4 -3,0[2];"
|
||||
"m0 *2 -5,1[1];r0 *4 -5,1[2];m0 *2 -3,1[1];r0 *4 -3,1[2];r90 *2 -2,2[1];m45 *1 1,2[1];r90 *2 1,2[1]");
|
||||
EXPECT_EQ (var2str (vb.variants (d.cell_index ())), "");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ namespace lay
|
|||
*/
|
||||
inline db::DCoord snap (db::DCoord c)
|
||||
{
|
||||
return floor (c + 0.5);
|
||||
return floor (c + 0.5 + db::coord_traits<double>::prec ());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -207,6 +207,8 @@ PythonInterpreter::PythonInterpreter (bool embedded)
|
|||
|
||||
tl_assert (sizeof (wchar_t) == 2);
|
||||
|
||||
Py_SetPythonHome ((wchar_t *) L""); // really ignore $PYTHONHOME + without this, we get dummy error message about lacking path for libraries
|
||||
|
||||
const wchar_t *python_path = _wgetenv (L"KLAYOUT_PYTHONPATH");
|
||||
if (python_path) {
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,11 @@
|
|||
|
||||
using namespace tl;
|
||||
|
||||
static std::string norm_exp (const std::string &s)
|
||||
{
|
||||
return tl::replaced (tl::replaced (s, "e+006", "e+06"), "E+006", "E+06");
|
||||
}
|
||||
|
||||
TEST(1)
|
||||
{
|
||||
EXPECT_EQ (to_string (12.5), "12.5");
|
||||
|
|
@ -44,17 +49,10 @@ TEST(1)
|
|||
EXPECT_EQ (to_string ((unsigned char *)" 12"), " 12");
|
||||
EXPECT_EQ (to_string (std::string (" 12")), " 12");
|
||||
|
||||
#if defined(_WIN32) && !defined(_MSC_VER)
|
||||
EXPECT_EQ (tl::sprintf("%g %e %f",M_PI,M_PI*1e6,M_PI*0.001), "3.14159 3.141593e+006 0.003142");
|
||||
EXPECT_EQ (tl::sprintf("%G %E %F",M_PI*1e6,M_PI*1e6,M_PI*1e6), "3.14159E+006 3.141593E+006 3141592.653590");
|
||||
EXPECT_EQ (tl::sprintf("%-15g %15.8e %15.12f %g",M_PI,M_PI*1e6,M_PI*0.001,M_PI), "3.14159 3.14159265e+006 0.003141592654 3.14159");
|
||||
EXPECT_EQ (tl::sprintf("%-15g %15.8E %15.12f %g",M_PI,M_PI*1e6,M_PI*0.001,M_PI), "3.14159 3.14159265E+006 0.003141592654 3.14159");
|
||||
#else
|
||||
EXPECT_EQ (tl::sprintf("%g %e %f",M_PI,M_PI*1e6,M_PI*0.001), "3.14159 3.141593e+06 0.003142");
|
||||
EXPECT_EQ (tl::sprintf("%G %E %F",M_PI*1e6,M_PI*1e6,M_PI*1e6), "3.14159E+06 3.141593E+06 3141592.653590");
|
||||
EXPECT_EQ (tl::sprintf("%-15g %015.8e %15.12f %g",M_PI,M_PI*1e6,M_PI*0.001,M_PI), "3.14159 03.14159265e+06 0.003141592654 3.14159");
|
||||
EXPECT_EQ (tl::sprintf("%-15g %015.8E %15.12f %g",M_PI,M_PI*1e6,M_PI*0.001,M_PI), "3.14159 03.14159265E+06 0.003141592654 3.14159");
|
||||
#endif
|
||||
EXPECT_EQ (norm_exp (tl::sprintf("%g %e %f",M_PI,M_PI*1e6,M_PI*0.001)), "3.14159 3.141593e+06 0.003142");
|
||||
EXPECT_EQ (norm_exp (tl::sprintf("%G %E %F",M_PI*1e6,M_PI*1e6,M_PI*1e6)), "3.14159E+06 3.141593E+06 3141592.653590");
|
||||
EXPECT_EQ (norm_exp (tl::sprintf("%-15g %015.8e %15.12f %g",M_PI,M_PI*1e6,M_PI*0.001,M_PI)), "3.14159 03.14159265e+06 0.003141592654 3.14159");
|
||||
EXPECT_EQ (norm_exp (tl::sprintf("%-15g %015.8E %15.12f %g",M_PI,M_PI*1e6,M_PI*0.001,M_PI)), "3.14159 03.14159265E+06 0.003141592654 3.14159");
|
||||
EXPECT_EQ (tl::sprintf("%-5s %5s %x %u %d (%s)","a","b",1234,2345,3456), "a b 4d2 2345 3456 ()");
|
||||
EXPECT_EQ (tl::sprintf("%lu %llu %02x", 1, 2, 167), "1 2 a7");
|
||||
EXPECT_EQ (tl::sprintf("%lu %llu %02X", 1, 2, 761), "1 2 2F9");
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,30 @@
|
|||
* Extracted by KLayout
|
||||
|
||||
.SUBCKT INVCHAIN
|
||||
X$1 \$7 \$1 \$9 \$8 \$6 \$9 \$5 \$5 \$3 \$2 \$I2 \$I1 INV3
|
||||
X$2 \$8 \$11 \$9 \$10 \$8 \$11 \$2 \$I3 \$2 \$I3 \$5 \$4 \$I2 \$I1 INV2
|
||||
X$3 \$I1 \$I2 \$11 \$I3 \$4 \$4 \$10 \$10 INV
|
||||
.ENDS INVCHAIN
|
||||
|
||||
.SUBCKT INV3 \$I18 \$I17 \$I15 \$I14 \$I13 \$I11 \$I10 \$I8 \$I7 \$I5 \$I4 \$I2
|
||||
X$1 \$I2 \$I4 \$I13 \$I17 \$I7 \$I7 \$I18 \$I18 INV
|
||||
X$2 \$I2 \$I4 \$I18 \$I7 \$I17 \$I17 \$I13 \$I13 INV
|
||||
X$3 \$I2 \$I4 \$I14 \$I5 \$I8 \$I10 \$I15 \$I11 INV
|
||||
.ENDS INV3
|
||||
|
||||
.SUBCKT INV2 \$I16 \$I15 \$I14 \$I13 \$I12 \$I11 \$I10 \$I9 \$I8 \$I7 \$I6 \$I5
|
||||
+ \$I4 \$I2
|
||||
X$1 \$I2 \$I4 \$I14 \$I6 \$I8 \$I10 \$I16 \$I12 INV
|
||||
X$2 \$I2 \$I4 \$I13 \$I5 \$I7 \$I9 \$I15 \$I11 INV
|
||||
.ENDS INV2
|
||||
|
||||
.SUBCKT INV \$1 \$2 \$3 \$4 \$6 \$9 \$I8 \$I7
|
||||
M$1 \$4 \$3 \$2 \$4 PMOS L=0.25U W=0.95U AS=0.79325P AD=0.26125P PS=3.57U
|
||||
+ PD=1.5U
|
||||
M$2 \$2 \$I8 \$6 \$2 PMOS L=0.25U W=0.95U AS=0.26125P AD=0.03325P PS=1.5U
|
||||
+ PD=1.97U
|
||||
M$3 \$4 \$3 \$1 \$4 NMOS L=0.25U W=0.95U AS=0.79325P AD=0.26125P PS=3.57U
|
||||
+ PD=1.5U
|
||||
M$4 \$1 \$I7 \$9 \$1 NMOS L=0.25U W=0.95U AS=0.26125P AD=0.03325P PS=1.5U
|
||||
+ PD=1.97U
|
||||
.ENDS INV
|
||||
Binary file not shown.
|
|
@ -4,6 +4,9 @@
|
|||
# The main version
|
||||
KLAYOUT_VERSION="0.26.1"
|
||||
|
||||
# The version used for PyPI (don't use variables here!)
|
||||
KLAYOUT_PYPI_VERSION="0.26.1r1"
|
||||
|
||||
# The build date
|
||||
KLAYOUT_VERSION_DATE=$(date "+%Y-%m-%d")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue