Sorry to be slow replying, things have been busy. > Did you run this from the emsdk directory?
No. I don't read Python well and didn't realise it was necessary. Silly of me. Can you add `print(os.stat('upstream/emscripten/cache')` too? Sure, and the missing ')'. $ echo $EMSDK /local/kernel_webasm/tools/emsdk $ pushd $EMSDK /local/kernel_webasm/tools/emsdk ~/regimes/tools_webasm/patssy/lx86 $ cat ~/regimes/tools_webasm/pytest.sh python3 -c "import os; print(os.stat('upstream/emscripten/cache'))" python3 -c "import os; print(os.access('upstream/emscripten/cache', os.W_OK))" $ source ~/regimes/tools_webasm/pytest.sh os.stat_result(st_mode=16893, st_ino=101453189, st_dev=64774, st_nlink=4, st_uid=5790, st_gid=5200, st_size=4096, st_atime=1730862972, st_mtime=1730455667, st_ctime=1730455667) True Thanks very much, John On Fri, Nov 1, 2024 at 5:49 PM 'Sam Clegg' via emscripten-discuss < emscripten-discuss@googlegroups.com> wrote: > > > On Fri, Nov 1, 2024 at 3:18 AM John Dallman <jgdatsiem...@gmail.com> > wrote: > >> > Are you able to touch a new file in `upstream/emscripten/cache`? >> >> Yes: >> >> $ echo $EMSDK >> /local/kernel_webasm/tools/emsdk >> $ echo $EMCC_CACHE >> <blank line> >> $ touch >> /local/kernel_webasm/tools/emsdk/upstream/emscripten/cache/test.jgd >> $ ls -l >> /local/kernel_webasm/tools/emsdk/upstream/emscripten/cache/test.jgd >> -rw-rw-r-- 1 jgd UK-Parasolid-GG 0 Nov 1 10:07 >> /local/kernel_webasm/tools/emsdk/upstream/emscripten/cache/test.jgd >> >> > What does python show when you run: python3 -c "import os; >> print(os.access('upstream/emscripten/cache', os.W_OK))" >> >> $> cat ../../pytest.sh >> python3 -c "import os; print(os.access('upstream/emscripten/cache', >> os.W_OK))" >> $ source ../../pytest.sh >> > > Did you run this from the emsdk directory? > > Can you add `print(os.stat('upstream/emscripten/cache')` too? > > >> > False >> >> Is my Python too old? It's the one that came with Rocky Linux 8.10. >> >> $ python3 --version >> Python 3.6.8 >> >> Thanks very much, >> >> John >> >> On Thu, Oct 31, 2024 at 6:43 PM 'Sam Clegg' via emscripten-discuss < >> emscripten-discuss@googlegroups.com> wrote: >> >>> Interesting. It seems like `os.access(path, os.W_OK)` must be returning >>> `False` in our python code for `upstream/emscripten/cache`. >>> >>> Are you able to touch a new file in `upstream/emscripten/cache`? >>> >>> What does python show when you run: python3 -c "import os; >>> print(os.access('upstream/emscripten/cache', os.W_OK))" >>> >>> On Thu, Oct 31, 2024 at 7:56 AM John Dallman <jgdatsiem...@gmail.com> >>> wrote: >>> >>>> > Can you try running `emcc` with `EMCC_DEBUG=1` as well >>>> as `EMCC_CACHE` set? >>>> >>>> Done. >>>> >>>> > Do you see the ` 'Using home-directory for emscripten cache due to >>>> read-only root` message? >>>> >>>> Yes, I do. I have: >>>> >>>> $ touch $EMCC_CACHE/test.jgd >>>> $ ls -l $EMCC_CACHE >>>> total 0 >>>> -rw-rw-r-- 1 jgd UK-Parasolid-GG 0 Oct 31 14:42 test.jgd >>>> $ ls -ld $EMCC_CACHE >>>> drwxrwxr-x 2 kerman UK-Parasolid-GG 4096 Oct 31 14:42 >>>> /local/kernel_webasm/tools/emcache/ >>>> $ python3 --version >>>> Python 3.6.8 >>>> >>>> > Where is your emscripten config coming from? Are you using `source >>>> emsdk_env.sh`? >>>> >>>> Yes, I'm sourcing that script. I have not altered any config files. >>>> >>>> > Making `emsdk/upstream/emscripten/cache` group writable is the >>>> correct solution, there >>>> > should be no need to serate of alternate cache directories in this >>>> case I think. >>>> >>>> Checking that: >>>> >>>> $ whoami >>>> kerman >>>> $ pwd >>>> /local/kernel_webasm/tools/emsdk >>>> $ ls -ld upstream/emscripten/cache >>>> drwxrwxr-x 4 kerman UK-Parasolid-GG 4096 Oct 24 23:29 >>>> upstream/emscripten/cache >>>> $ ls -l upstream/emscripten/cache >>>> total 12 >>>> drwxr-xr-x 2 kerman UK-Parasolid-GG 4096 Oct 24 23:29 build >>>> -rwxr-xr-x 1 kerman UK-Parasolid-GG 0 Oct 24 23:29 cache.lock >>>> drwxr-xr-x 5 kerman UK-Parasolid-GG 4096 Oct 24 23:18 sysroot >>>> -rw-r--r-- 1 kerman UK-Parasolid-GG 1 Oct 24 23:18 >>>> sysroot_install.stamp >>>> >>>> Those files were extracted with those timestamps: Oct 24 is well before >>>> I installed this Emscripten, and I don't work that late at night. Is the >>>> presence of that cache.lock file the problem? >>>> >>>> Thanks, >>>> >>>> John >>>> >>>> >>>> On Wed, Oct 30, 2024 at 6:33 PM 'Sam Clegg' via emscripten-discuss < >>>> emscripten-discuss@googlegroups.com> wrote: >>>> >>>>> >>>>> >>>>> On Wed, Oct 30, 2024 at 5:46 AM John Dallman <jgdatsiem...@gmail.com> >>>>> wrote: >>>>> >>>>>> This doesn't seem to be working. I'm using two accounts: "kerman" is >>>>>> my system management account, which can sudo, and "jgd" is my personal >>>>>> account. Both are members of the same primary group. >>>>>> >>>>>> I installed 3.1.70, the latest as of today, into >>>>>> /local/kernel_webasm/tools, and made emsdk/upstream/emscripten/cache >>>>>> group-writable. I then did a compile as jgd and found >>>>>> ~jgd/.emscripten_cache was populated and used. I removed that and thought >>>>>> again. >>>>>> >>>>>> I tried making the emsdk directory group-writable, and tried again. >>>>>> ~jgd/.emscripten_cache was populated and used. I removed it again. >>>>>> >>>>>> I created a cache directory, /local/kernel_webasm/tools/emcache/, >>>>>> made sure it was group-writable, and in my jgd session, did: >>>>>> >>>>>> EMCC_CACHE=/local/kernel_webasm/tools/emcache >>>>>> export EMCC_CACHE >>>>>> >>>>>> I tried compiling again, and once again, ~jgd/.emscripten_cache was >>>>>> populated and used. >>>>>> >>>>> >>>>> Something strange must be going on here. Can you try running `emcc` >>>>> with `EMCC_DEBUG=1` as well as `EMCC_CACHE` set? Do you see the ` 'Using >>>>> home-directory for emscripten cache due to read-only root` message? >>>>> >>>>> The `CACHE = os.path.expanduser(os.path.join('~', >>>>> '.emscripten_cache'))` should not even execute when you have an explicit >>>>> cache configured. >>>>> >>>>> Where is your emscripten config coming from? Are you using `source >>>>> emsdk_env.sh`? >>>>> >>>>> Making `emsdk/upstream/emscripten/cache` group writable is the correct >>>>> solution, there should be no need to serate of alternate cache directories >>>>> in this case I think. >>>>> >>>>> cheers, >>>>> sam >>>>> >>>>> P.S. I am about to land a change that completely removes the fallback >>>>> to `$HOME/.emscripten_cache`: >>>>> https://github.com/emscripten-core/emscripten/pull/22801 >>>>> >>>>> >>>>> >>>>>> I'm running Rocky Linux 8.10. I really do want to have many accounts >>>>>> capable of using the same Emscripten installation, because putting it on >>>>>> a >>>>>> network drive makes standardizing development tools very much easier. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> John >>>>>> >>>>>> On Tue, Oct 29, 2024 at 9:28 PM 'Sam Clegg' via emscripten-discuss < >>>>>> emscripten-discuss@googlegroups.com> wrote: >>>>>> >>>>>>> The emscripten cache actually defaults to living inside of the >>>>>>> emscripten directory. The line where this occurs is `CACHE = >>>>>>> path_from_root('cache')`. Then `os.path.expanduser(os.path.join('~', >>>>>>> '.emscripten_cache'))` location is only used when the emscripten >>>>>>> directory >>>>>>> is read only. >>>>>>> >>>>>>> When using emsdk the cache location should always be >>>>>>> `emsdk/upstream/emscripten/cache`. emsdk also shipped with a >>>>>>> pre-populated cache so most system libraries are already built there. >>>>>>> >>>>>>> For those who want to use a different cache location you can use the >>>>>>> `EMCC_CACHE` environment variable or the `CACHE` key in your emscripten >>>>>>> config file (both of these override the default). However, it doesn't >>>>>>> sounds like you need to do either of those things and the default >>>>>>> location >>>>>>> inside the emsdk tree should work for you. Side note: emcc will also >>>>>>> using the $HOME location if the in-tree location is not writable. You >>>>>>> can >>>>>>> set `EMCC_FROZEN_CACHE` if you want to accept this read-only location >>>>>>> (obviously new libraries cannot be placed there in that case though). >>>>>>> See >>>>>>> https://github.com/emscripten-core/emscripten/blob/31f9fb3c71b1aacf5edf65e35515d41b59c10391/tools/config.py#L82-L92 >>>>>>> . >>>>>>> >>>>>>> cheers, >>>>>>> sam >>>>>>> >>>>>>> On Mon, Oct 28, 2024 at 10:25 AM John Dallman < >>>>>>> jgdatsiem...@gmail.com> wrote: >>>>>>> >>>>>>>> Greetings, all! >>>>>>>> >>>>>>>> I have a somewhat unusual first project with Emscripten. I need to >>>>>>>> get a domain-specific C-like language generating WebAssembly. This is >>>>>>>> not >>>>>>>> too bad, because the DSL compiles into C code, which I then feed to >>>>>>>> the C >>>>>>>> compiler for the relevant platform. At this level, WebAssembly is "just >>>>>>>> another platform" but as always, the details are more complicated. >>>>>>>> >>>>>>>> I need to provide declarations for the platform's C run-time >>>>>>>> library functions, types, constants, and so on to the DSL. This is a >>>>>>>> fairly >>>>>>>> routine task, given the platform's C headers, but there are a few >>>>>>>> things >>>>>>>> about the Emscripten headers that are puzzling me. >>>>>>>> >>>>>>>> To forestall the obvious question, no, I can't just use the >>>>>>>> provided headers. The DSL is C-like, but has some syntax differences. >>>>>>>> Unlike C++, many C programs are not valid programs in the DSL, which >>>>>>>> gives >>>>>>>> much more freedom in the language design. It's a separate development >>>>>>>> that >>>>>>>> split from normal C in the mid-eighties and is still very much worth >>>>>>>> using >>>>>>>> for its specialised role. Yes, new hires have to learn it, which takes >>>>>>>> about two days for someone who knows C or C++. Learning about the >>>>>>>> specialised application area it is used for takes much longer. >>>>>>>> >>>>>>>> I'm running Emscripten on Linux. I started by looking at Emscripten >>>>>>>> 3.1.41, since that's the version used by a couple of other product >>>>>>>> teams >>>>>>>> that work on my site. That is fairly simple when I run a few emcc >>>>>>>> compiles >>>>>>>> with -H to get a report of what files are referenced. The top-level >>>>>>>> headers >>>>>>>> come from emsdk/upstream/emscripten/cache/sysroot/include. A few >>>>>>>> Clang-associated ones come from emsdk/upstream/lib/clang/17/include. >>>>>>>> That's >>>>>>>> all fine with me. >>>>>>>> >>>>>>>> Then I decided to check the latest emsdk, and found that with >>>>>>>> 3.1.69, the headers come from a different place. It builds a cache of >>>>>>>> the >>>>>>>> headers and other files it uses under ~/.emscripten_cache. The problems >>>>>>>> with that are: >>>>>>>> >>>>>>>> Storage: It will take 36MB in the user directory of everyone who >>>>>>>> ever compiles with Emscripten. We keep all our user directories on a >>>>>>>> server >>>>>>>> disk, because that's enormously convenient in many ways. But we really >>>>>>>> don't want to burn space with duplicates of that cache. >>>>>>>> >>>>>>>> Version lock: We need to be able to have several Emscripten >>>>>>>> versions in use simultaneously, by the same account, without >>>>>>>> conflicts. Our >>>>>>>> reason for this is that we plan to release products on WebAssembly, and >>>>>>>> from time to time, update the version of Emscripten we use, to get >>>>>>>> access >>>>>>>> to new C and C++ standards, compiler bug fixes, and so on. But we will >>>>>>>> not >>>>>>>> update the tools used to build a product version that's been released >>>>>>>> and >>>>>>>> is under maintenance, because we'd have to re-do a lot of the QA that >>>>>>>> we do >>>>>>>> at a release. So the service accounts that run our builds can't have >>>>>>>> caches >>>>>>>> of version-specific headers in their user directories. >>>>>>>> >>>>>>>> I need a way to tell Emscripten to put that cache somewhere else. I >>>>>>>> did some grep'ing of the Emscripten scripts, and found this line, in >>>>>>>> both >>>>>>>> 3.1.41 and 3.1.69: >>>>>>>> >>>>>>>> upstream/emscripten/tools/config.py: CACHE = >>>>>>>> os.path.expanduser(os.path.join('~', '.emscripten_cache')) >>>>>>>> >>>>>>>> I have not yet attempted to read the Python code and learn how it >>>>>>>> all works, because that could take ages; I don't know Python well at >>>>>>>> all >>>>>>>> and am not keen on it. I'm a naturally low-level programmer, much >>>>>>>> happier >>>>>>>> with assembly code than object orientation >>>>>>>> >>>>>>>> Is there an environment variable I can use to relocate that cache? >>>>>>>> >>>>>>>> Thanks very much, >>>>>>>> >>>>>>>> John >>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "emscripten-discuss" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to emscripten-discuss+unsubscr...@googlegroups.com. >>>>>>>> To view this discussion visit >>>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqgm39n%2B-%3DAeT09zJ38Bp3SMkiWk_TxMK0cEMcinnaaQn4w%40mail.gmail.com >>>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqgm39n%2B-%3DAeT09zJ38Bp3SMkiWk_TxMK0cEMcinnaaQn4w%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "emscripten-discuss" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to emscripten-discuss+unsubscr...@googlegroups.com. >>>>>>> To view this discussion visit >>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/CAL_va2-imxQ2O0x3kKhpRvtanvYLRLEASCx2FrWUwy%3D2PxE94A%40mail.gmail.com >>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAL_va2-imxQ2O0x3kKhpRvtanvYLRLEASCx2FrWUwy%3D2PxE94A%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "emscripten-discuss" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to emscripten-discuss+unsubscr...@googlegroups.com. >>>>>> To view this discussion visit >>>>>> https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqgkjhQF8QVh80-7eCQ2UGU3jqYScoKK44AzU-oAqMuXRXw%40mail.gmail.com >>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqgkjhQF8QVh80-7eCQ2UGU3jqYScoKK44AzU-oAqMuXRXw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "emscripten-discuss" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to emscripten-discuss+unsubscr...@googlegroups.com. >>>>> To view this discussion visit >>>>> https://groups.google.com/d/msgid/emscripten-discuss/CAL_va2_BoKxF%3D40hQGihs4Ay8ht4eNJGyVJvzdR6-W5Q%3DddNhg%40mail.gmail.com >>>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAL_va2_BoKxF%3D40hQGihs4Ay8ht4eNJGyVJvzdR6-W5Q%3DddNhg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "emscripten-discuss" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to emscripten-discuss+unsubscr...@googlegroups.com. >>>> To view this discussion visit >>>> https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqgnNnZBNPwqrT_vEd-6A%3DpuSKt3wE%3DrxaPqz%3DwYLgth0kQ%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqgnNnZBNPwqrT_vEd-6A%3DpuSKt3wE%3DrxaPqz%3DwYLgth0kQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "emscripten-discuss" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to emscripten-discuss+unsubscr...@googlegroups.com. >>> To view this discussion visit >>> https://groups.google.com/d/msgid/emscripten-discuss/CAL_va2837g9UFhYbz9o6r_eF5RYp5--Xog4UbPmuPQX_65j7Pw%40mail.gmail.com >>> <https://groups.google.com/d/msgid/emscripten-discuss/CAL_va2837g9UFhYbz9o6r_eF5RYp5--Xog4UbPmuPQX_65j7Pw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "emscripten-discuss" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to emscripten-discuss+unsubscr...@googlegroups.com. >> To view this discussion visit >> https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqgmpJbfFdmeGLtsTrvAwKAgd8x%2B1jaNGJtuobp8PYVcp7Q%40mail.gmail.com >> <https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqgmpJbfFdmeGLtsTrvAwKAgd8x%2B1jaNGJtuobp8PYVcp7Q%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to emscripten-discuss+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/emscripten-discuss/CAL_va288ZgNXryD78HOp-dTgC9CLJ%3DU5xNFhLOy_DY_HD-50hw%40mail.gmail.com > <https://groups.google.com/d/msgid/emscripten-discuss/CAL_va288ZgNXryD78HOp-dTgC9CLJ%3DU5xNFhLOy_DY_HD-50hw%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/emscripten-discuss/CAH1xqg%3DgisAnDkhFmLz3EVuTVh5pFhkffp_umeCDKk6-CQN_NQ%40mail.gmail.com.