From 3a1213ab378bbcbf09b631e4066b3056ec699528 Mon Sep 17 00:00:00 2001 From: Meng Weng Wong Date: Sun, 20 Feb 2022 22:13:26 +0800 Subject: [PATCH 1/3] prepare for GHC 9, base 4.15, by using Buffer constructor interface --- src/compiler/GF/Text/Coding.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/GF/Text/Coding.hs b/src/compiler/GF/Text/Coding.hs index bac7938c0..2a89427fe 100644 --- a/src/compiler/GF/Text/Coding.hs +++ b/src/compiler/GF/Text/Coding.hs @@ -38,7 +38,7 @@ decodeUnicode :: TextEncoding -> ByteString -> String decodeUnicode enc bs = unsafePerformIO $ decodeUnicodeIO enc bs decodeUnicodeIO enc (PS fptr l len) = do - let bbuf = Buffer{bufRaw=fptr, bufState=ReadBuffer, bufSize=len, bufL=l, bufR=l+len} + let bbuf = (emptyBuffer fptr len ReadBuffer) { bufL=l, bufR=l+len } cbuf <- newCharBuffer 128 WriteBuffer case enc of TextEncoding {mkTextDecoder=mk} -> do decoder <- mk From bc14a56f83402f73acd6540c9ec3cd278ddf986e Mon Sep 17 00:00:00 2001 From: Meng Weng Wong Date: Fri, 25 Feb 2022 14:31:10 +0800 Subject: [PATCH 2/3] "now try this" instructions for people flailing with Apple Silicon M1 --- src/runtime/python/README.org | 166 ++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 src/runtime/python/README.org diff --git a/src/runtime/python/README.org b/src/runtime/python/README.org new file mode 100644 index 000000000..8885694b5 --- /dev/null +++ b/src/runtime/python/README.org @@ -0,0 +1,166 @@ +* INSTALL + +You will need the python-devel package or similar. + +You must have installed the PGF C runtime (see ../c/INSTALL) + +#+begin_src sh + $ python setup.py build + $ sudo python setup.py install +#+end_src + +* Apple Silicon + +The following install instructions were written with the following config in mind: + +| OS | Hardware | GF | +|-----------------------+----------+--------------------------+ +| MacOS Monterey 12.2.1 | Apple M1 | 3.11 from binary package | + +We assume that you may have installed GF as a binary package downloaded from Github. + +From that starting point, try all the solutions below, in sequence, until you achieve success. + +** Validation Goal + +Our goal is to be able to +- run python 3 +- import pgf +- type "pgf." +- hit tab + +and get this: + +#+begin_example + >>> import pgf + >>> pgf. + pgf.BIND( pgf.Concr( pgf.Iter( pgf.PGFError( pgf.Type( pgf.readExpr( pgf.readType( + pgf.Bracket( pgf.Expr( pgf.PGF( pgf.ParseError( pgf.TypeError( pgf.readPGF( +#+end_example + +When that works, we can consider the Python PGF bindings to be installed successfully. + +** The GF binary package won't install + +We assume you've tried [[https://github.com/GrammaticalFramework/gf-core/releases][downloading a binary package]]. + +If MacOS is being secure, go to System Preferences, Security & Privacy, General, and click Open Anyway. + +** gu/mem.h file not found + +Maybe you tried running something like ~pip install pgf~ or ~pip3 install pgf~. + +Did you get this error? + +#+begin_example + python3 setup.py build + running build + running build_ext + creating build/temp.macosx-12-arm64-3.9 + clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -I/opt/homebrew/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/include/python3.9 -c pypgf.c -o build/temp.macosx-12-arm64-3.9/pypgf.o -std=c99 + pypgf.c:5:10: fatal error: 'gu/mem.h' file not found + #include + ^~~~~~~~~~ + 1 error generated. + error: command '/usr/bin/clang' failed with exit code 1 +#+end_example + +Solution: + +#+begin_example + $ EXTRA_INCLUDE_DIRS=/usr/local/include EXTRA_LIB_DIRS=/usr/local/lib pip install pgf +#+end_example + +This should tell the build where to find the include and lib files it needs to compile: + +#+begin_example + $ ls /usr/local/include/gu + assert.h choice.h enum.h file.h hash.h map.h out.h seq.h sysdeps.h utf8.h + bits.h defs.h exn.h fun.h in.h mem.h prime.h string.h ucs.h variant.h + + $ ls /usr/local/lib/libgu* + /usr/local/lib/libgu.0.dylib /usr/local/lib/libgu.a /usr/local/lib/libgu.dylib /usr/local/lib/libgu.la +#+end_example + +If those files don't exist, or you get the following error, you will need to rebuild the C runtime. + +** symbol not found in flat namespace + +Did you get this error? + +#+begin_example + Python 3.9.10 (main, Jan 15 2022, 11:40:53) + [Clang 13.0.0 (clang-1300.0.29.3)] on darwin + Type "help", "copyright", "credits" or "license" for more information. + >>> import pgf + Traceback (most recent call last): + File "", line 1, in + ImportError: dlopen(/opt/homebrew/lib/python3.9/site-packages/pgf.cpython-39-darwin.so, 0x0002): symbol not found in flat namespace '_gu_alloc_variant' +#+end_example + +This may be a sign that you're trying to get binaries and libraries compiled with different compilers to play nicely. We're trying to get three things to align: + +- the Python interpreter +- the C runtime libraries +- the Python pgf libraries + +Solution: + +Maybe your Python isn't the Apple-provided Python. In the above error message we see ~python3~ is provided by Homebrew. Assuming you prefer to keep things this way, we'll try to rebuild things to match your Python. + +Rebuilding needs a C compiler. The Apple-provided system ~clang~ is preferred. If you have multiple ~clang~ compilers installed, try disabling the others. For example, if your ~clang~ was provided by nix, run ~nix-env --uninstall clang~. Similarly for brew. + +Then try rebuilding the C runtime. + +** How to re-build the C runtime + +Maybe the C runtime is missing from ~/usr/local/lib~, or maybe the version you have installed is causing the "symbol not found" error. + +Build the C runtime by following the instructions in ~gf-core/src/runtime/c/INSTALL~. + +After a successful ~make install~, rebuild the Python bindings. + +** configure: error: cpu aarch64 not supported + +When building the C runtime, did you get this error? + +#+begin_example + configure: error: cpu aarch64 not supported +#+end_example + +Solution: edit ~src/runtime/c/configure.ac~ to add ~aarch*~ to the ~arm64~ line. + +#+begin_example + aarch* | arm*) cpu=arm; AC_DEFINE(LIGHTNING_ARM, 1, +#+end_example + +** How to re-build the Python bindings using pip + +Sometimes a ~pip install pgf~ will decline to recompile, because a cached wheel exists. + +To return to a more pristine state, + +#+begin_example + pip uninstall pgf + pip cache remove pgf +#+end_example + +You may need to ~sudo~ some of the above commands. + +Then you can repeat + +#+begin_example + $ EXTRA_INCLUDE_DIRS=/usr/local/include EXTRA_LIB_DIRS=/usr/local/lib pip install pgf +#+end_example + +** How to re-build the Python bindings manually + +If the ~pip install pgf~ just isn't working, try building it directly in ~gf-core/src/runtime/python~: + +#+begin_example + $ python setup.py build + $ sudo python setup.py install +#+end_example + +You may need to add the ~EXTRA~ environment prefixes as shown in previous commands. + From b53a102c98ec9693a5cbecb9ade08bc1a1d07742 Mon Sep 17 00:00:00 2001 From: Meng Weng Wong Date: Fri, 25 Feb 2022 14:56:50 +0800 Subject: [PATCH 3/3] if this PR is accepted we don't need these instructions --- src/runtime/python/README.org | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/runtime/python/README.org b/src/runtime/python/README.org index 8885694b5..86584dc01 100644 --- a/src/runtime/python/README.org +++ b/src/runtime/python/README.org @@ -120,20 +120,6 @@ Build the C runtime by following the instructions in ~gf-core/src/runtime/c/INST After a successful ~make install~, rebuild the Python bindings. -** configure: error: cpu aarch64 not supported - -When building the C runtime, did you get this error? - -#+begin_example - configure: error: cpu aarch64 not supported -#+end_example - -Solution: edit ~src/runtime/c/configure.ac~ to add ~aarch*~ to the ~arm64~ line. - -#+begin_example - aarch* | arm*) cpu=arm; AC_DEFINE(LIGHTNING_ARM, 1, -#+end_example - ** How to re-build the Python bindings using pip Sometimes a ~pip install pgf~ will decline to recompile, because a cached wheel exists.