diff --git a/Changelog b/Changelog index 2419c74ef..9c130dd01 100644 --- a/Changelog +++ b/Changelog @@ -1,4 +1,25 @@ +0.27.5 (2021-11-14): +* Enhancements: Better support for execution (also cross-interpreter) of macro code from scripts + - New methods for the Macro class like "run" and loading from file + - New class Interpreter for accessing Ruby interpreter state from Python and vice versa +* Enhancement: New DRC function "enclosed" as the reverse of "enclosing" + - Allows using the rectangle filters with "via enclosed by metal" + - Usually better performance than "metal enclosing via" +* Enhancements: Usability + - Navigation in the 2.5d view + - "tap" function shows layer names and details from layer view + - Documentation about layer views +* Enhancement: CentOS7 RPM's use Python 3 now +* Enhancement: Sending custom query shape objects to RDB produces shape markers now +* Enhancement: New method LayoutView#is_editable? +* Enhancement: %GITHUB%/issues/879 PCellDeclaration#layout and Layout#library ownership links +* Bugfix: %GITHUB%/issues/918 Editor options tab window too big +* Bugfix: %GITHUB%/issues/920 Fill tool border parameter sign issue +* Bugfix: %GITHUB%/issues/921 BJT3 extraction with collector shape fixed +* Bugfix: %GITHUB%/issues/933 QMessageLogger methods safe now with "%" characters +* Bugfix: %GITHUB%/issues/935 Cell#insert (of cell instances) now checks their cell indexes + 0.27.4 (2021-09-25): * Enhancements: Some enhancements on the 2.5d view (e.g. live layer color update, z only scaling, wire frames, etc.) * Enhancement: simple versions of DRC with_holes/without_holes without parameters diff --git a/Changelog.Debian b/Changelog.Debian index 197f71625..5bfd0057a 100644 --- a/Changelog.Debian +++ b/Changelog.Debian @@ -1,3 +1,10 @@ +klayout (0.27.5-1) unstable; urgency=low + + * New features and bugfixes + - See changelog + + -- Matthias Köfferlein Sun, 14 Nov 2021 17:04:40 +0100 + klayout (0.27.4-1) unstable; urgency=low * New features and bugfixes diff --git a/Jenkinsfile-pypi b/Jenkinsfile-pypi new file mode 100644 index 000000000..72d16f7da --- /dev/null +++ b/Jenkinsfile-pypi @@ -0,0 +1,43 @@ + +@Library("platform") _ + +properties([disableConcurrentBuilds()]) + +// from shared library - uses tags to set the platform name +// (this is a pretty stupid way to set a parameter, but I don't +// know of a better way to parameterize a multibranch pipeline) +platform = pypi_platform() +py_version = pypi_py_version() + +currentBuild.description = "PyPI deployment " + platform + +docker_image = "jenkins-manylinux2014_x86_64-pypi" +target = platform + ".whl" + +node("master") { + + stage("Checkout sources") { + checkout scm + } + + stage("Building target ${target}") { + + sh("rm -rf wheelhouse ; mkdir -p wheelhouse") + + withDockerContainer(image: docker_image, args: "-v " + pwd() + ":/io") { + sh("PY_VERSION=" + py_version + " /io/ci-scripts/docker/docker_build_jenkins.sh") + } + + } + + stage("Publish and test") { + + // publish for release tags + if (BRANCH_NAME.startsWith('v')) { + sh("twine upload --skip-existing wheelhouse/klayout-*manylinux2014*.whl wheelhouse/*.zip") + } + + } + +} + diff --git a/ci-scripts/docker/docker_build_jenkins.sh b/ci-scripts/docker/docker_build_jenkins.sh new file mode 100755 index 000000000..838a02dc0 --- /dev/null +++ b/ci-scripts/docker/docker_build_jenkins.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + + +if [[ -z $PY_VERSION ]]; then + echo '$PY_VERSION is not set' + exit 1 +fi + +echo PY_VERSION=$PY_VERSION + +# Use single cores only so we do not overload the Jenkins host +export KLAYOUT_SETUP_MULTICORE=1 + +# Compile wheel and build source distribution +cd /io +"/opt/python/$PY_VERSION/bin/python" setup.py bdist_wheel -d /io/wheelhouse/ || exit 1 +"/opt/python/$PY_VERSION/bin/python" setup.py sdist --formats=zip -d /io/wheelhouse || exit 1 + +# Bundle external shared libraries into the wheels via auditwheel +for whl in /io/wheelhouse/*linux_*.whl; do + auditwheel repair "$whl" -w /io/wheelhouse/ || exit 1 +done + +# Install packages and test +TEST_HOME=/io/testdata +"/opt/python/$PY_VERSION/bin/pip" install klayout --no-index -f /io/wheelhouse || exit 1 +"/opt/python/$PY_VERSION/bin/python" $TEST_HOME/pymod/import_db.py || exit 1 +"/opt/python/$PY_VERSION/bin/python" $TEST_HOME/pymod/import_rdb.py || exit 1 +"/opt/python/$PY_VERSION/bin/python" $TEST_HOME/pymod/import_tl.py || exit 1 +"/opt/python/$PY_VERSION/bin/python" $TEST_HOME/pymod/pya_tests.py || exit 1 + diff --git a/macbuild/ReadMe.md b/macbuild/ReadMe.md index c23589f7b..cb9e98f62 100644 --- a/macbuild/ReadMe.md +++ b/macbuild/ReadMe.md @@ -1,13 +1,22 @@ -Relevant KLayout version: 0.26.9 +Relevant KLayout version: 0.27.4
+Author: Kazzz-S
+Last modified: 2021-11-07
# 1. Introduction -This directory **`macbuild`** contains different files required for building KLayout (http://www.klayout.de/) version 0.26.1 or later for different 64-bit Mac OSXs, including: -* El Capitan (10.11) -* Sierra (10.12) -* High Sierra (10.13) +This directory **`macbuild`** contains different files required for building KLayout (http://www.klayout.de/) version 0.27.4 or later for different 64-bit macOS, including: +* Catalina (10.15.7) : the primary development environment +* Big Sur (11.x) : experimental; Apple M1 chip is not tested since the author does not own an M1 Mac +* Monterey (12.x) : -- ditto -- + +Building KLayout for the previous operating systems listed below should still be possible.
+However, they are not actively supported, and DMG packages for them are not provided. * Mojave (10.14) -* Catalina (10.15) : the primary development environment -* Big Sur (11.0) : under development for the future support +* High Sierra (10.13) +* Sierra (10.12) +* El Capitan (10.11) + +Throughout this document, the primary target machine is **Intel x86_64** with **macOS Catalina**.
+A **((Notes))** marker indicates special notes for specific operating systems. # 2. Qt5 Frameworks By default, the Qt framework is "Qt5" from MacPorts (https://www.macports.org/), which is usually located under: @@ -17,7 +26,7 @@ By default, the Qt framework is "Qt5" from MacPorts (https://www.macports.org/), Alternatively, you can use "Qt5" from Homebrew (https://brew.sh/), which is usually located under: ``` -/usr/local/opt/qt/ +/usr/local/opt/qt@5/ ``` OR @@ -31,10 +40,11 @@ If you have installed Anaconda3 under $HOME/opt/anaconda3/, make a symbolic link ``` /Applications/anaconda3/ ---> $HOME/opt/anaconda3/ ``` +**((Notes))** "Qt5" from Homebrew is chosen as the default for **Big Sur** and **Monterey**. # 3. Script language support: Ruby and Python -By default, supported script languages, i.e., Ruby and Python, are those standard ones bundled with the OS.
-As for Catalina (10.15), +Earlier, by default, supported script languages, i.e., Ruby and Python, were those standard ones bundled with the OS.
+This configuration is possible only for macOS Catalina (10.15.7).
``` $ /usr/bin/ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19] @@ -42,9 +52,12 @@ $ /usr/bin/ruby -v $ /usr/bin/python --version Python 2.7.16 ``` -Even in the latest OS (11.0 Big Sur) as of today (November 2020), Python 3.x is not bundled with the OS, which is why users want non-OS-standard script language support. -To meet such a requirement, the build script **`build4mac.py`** provides several possible combinations of Qt5, Ruy, and Python module.
+Big Sur (11.x) and Monterey (12.x) still provide the Python 2.7 binaries to run various legacy applications.
+However, the latest Xcode 13.1 does not allow us to link the legacy Python 2.7 library with the newly compiled KLayout binaries.
+Therefore, Homebrew is adopted as the default environment for Big Sur and Monterey. + +The build script **`build4mac.py`** provides several possible combinations of Qt5, Ruy, and Python modules to accommodate such a slightly complex environment.
Some typical use cases are described in Section 6. # 4. Prerequisites @@ -52,51 +65,100 @@ You need to have: * the latest Xcode and command-line tool kit compliant with each OS * Qt5 package from MacPorts, Homebrew, or Anaconda3 * optionally Ruby and Python packages from MacPorts, Homebrew, or Anaconda3 -#### For matching versions of Ruby and Python, please also refer to `build4mac_env.py`. #### +#### For matching versions of Ruby and Python, please also refer to `build4mac_env.py`. # 5. Command-line options of **`build4mac.py`** are as shown below. +**((Notes))** For **Catalina** ``` --------------------------------------------------------------------------------------------------------- -<< Usage of **`build4mac.py`** >> - for building KLayout 0.26.1 or later on different Apple Mac OSX platforms. +<< Usage of 'build4mac.py' >> + for building KLayout 0.27.4 or later on different Apple macOS / Mac OSX platforms. -$ [python] ./build4mac.py +$ [python] ./build4mac.py option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details)| default value --------------------------------------------------------------------------------------+--------------- - [-q|--qt ] : case-insensitive type=['Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3'] | qt5macports - : Qt5MacPorts: use Qt5 from MacPorts | - : Qt5Brew: use Qt5 from Homebrew | - : Qt5Ana3: use Qt5 from Anaconda3 | - [-r|--ruby ] : case-insensitive type=['nil', 'Sys', 'MP27', 'HB27', 'Ana3'] | sys - : nil: don't bind Ruby | - : Sys: use OS-bundled Ruby [2.0 - 2.6] depending on OS | - : MP27: use Ruby 2.7 from MacPorts | - : HB27: use Ruby 2.7 from Homebrew | - : Ana3: use Ruby 2.5 from Anaconda3 | - [-p|--python ] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | sys - : 'HBAuto'] | - : nil: don't bind Python | - : Sys: use OS-bundled Python 2.7 [ElCapitan -- BigSur] | - : MP38: use Python 3.8 from MacPorts | - : HB38: use Python 3.8 from Homebrew | - : Ana3: use Python 3.7 from Anaconda3 | - : HBAuto: use the latest Python 3.x auto-detected from Homebrew | - [-n|--noqtbinding] : don't create Qt bindings for ruby scripts | disabled - [-m|--make