<div dir="ltr"><div dir="ltr"><div dir="ltr">Hello there,<div><br></div><div>I am looking for some help with how to relocate prebuilt modules.</div><div>My desired workflow is:</div><div>- prebuild modules on host</div><div>- copy modules to a target</div><div>- use the prebuilt modules on target through `<span style="font-family:monospace,monospace">-fprebuilt-module-path`</span>.</div><div>My attempts are failing, as it seems the absolute path to the modules when compiled is embedded in the PCMs.</div><div><br></div><div>Recreating the target path to prebuilt modules on the host does not look like an option, as:</div><div>- the target path would be within a path that users do not have permissions to on the host</div><div>- I'd rather not touch anything out of the project build tree.</div><div><br></div><div>Am I missing the correct way to do this?</div><div><br></div><div>For reference, below is a simple test-case highlighting the issue.</div><div><br></div><div>Cheers!</div><div><br></div><div>Alexandre</div><div><br></div><div><br></div><div><div>#!/bin/bash</div><div><br></div><div>set -x</div><div><br></div><div>rm -rf build prebuilt_modules</div><div><br></div><div><font face="monospace, monospace">cat << EOF > module.modulemap</font></div><div><font face="monospace, monospace">module foo { header "foo.h" }</font></div><div><font face="monospace, monospace">module bar { header "bar.h" }</font></div><div><font face="monospace, monospace">EOF</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">cat << EOF > foo.h</font></div><div><font face="monospace, monospace">// empty</font></div><div><font face="monospace, monospace">EOF</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">cat << EOF > bar.h</font></div><div><font face="monospace, monospace">#include "foo.h"</font></div><div><font face="monospace, monospace">EOF</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">cat <<EOF > use.c</font></div><div><font face="monospace, monospace">#include "bar.h"</font></div><div><font face="monospace, monospace">EOF</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># Prebuild modules</font></div><div><font face="monospace, monospace">clang -cc1 -x c -fmodules -fno-implicit-modules module.modulemap -fmodule-name=foo -emit-module -o build/prebuilt_modules/foo.pcm</font></div><div><font face="monospace, monospace">clang -cc1 -x c -fmodules -fno-implicit-modules module.modulemap -fmodule-name=bar -emit-module -o build/prebuilt_modules/bar.pcm -fprebuilt-module-path=build/prebuilt_modules</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># Using them in-place works fine.</font></div><div><font face="monospace, monospace">clang -cc1 -x c -fmodules -fmodule-map-file=module.modulemap -fno-implicit-modules use.c -o /dev/null -fprebuilt-module-path=build/prebuilt_modules</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># Relocating and using fails.</font></div><div><font face="monospace, monospace">mv build/prebuilt_modules prebuilt_modules</font></div><div><font face="monospace, monospace">clang -cc1 -x c -fmodules -fmodule-map-file=module.modulemap -fno-implicit-modules use.c -o /dev/null -fprebuilt-module-path=prebuilt_modules</font></div><div><font face="monospace, monospace">#     use.c:1:2: fatal error: module file './build/prebuilt_modules/foo.pcm' not found: module file not found</font></div><div><font face="monospace, monospace">#     #include "bar.h"</font></div><div><font face="monospace, monospace">#      ^</font></div><div><font face="monospace, monospace">#     use.c:1:2: note: imported by module 'bar' in '/Volumes/work/topics/modules/relocation/example/prebuilt_modules/bar.pcm'</font></div></div></div></div></div>