linkrope / gamma

Extended Affix Grammar Compiler Generator

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Restructure Gamma include files required for the generated compiler

kuniss opened this issue · comments

Currently the implicitly called dmd D compiler fail due to missing gamma includes:

dmd S.d SLex.d -g include/runtime.d src/io.d src/log.d src/epsilon/soag/listacks.d
Error: module runtime is in file 'include/runtime.d' which cannot be read
import path[0] = /usr/include/dmd/phobos
import path[1] = /usr/include/dmd/druntime/import
Error: module io is in file 'src/io.d' which cannot be read
import path[0] = /usr/include/dmd/phobos
import path[1] = /usr/include/dmd/druntime/import
Error: module log is in file 'src/log.d' which cannot be read
import path[0] = /usr/include/dmd/phobos
import path[1] = /usr/include/dmd/druntime/import
Error: module listacks is in file 'src/epsilon/soag/listacks.d' which cannot be read
import path[0] = /usr/include/dmd/phobos
import path[1] = /usr/include/dmd/druntime/import

It would be nice, if the gamma gets an additional command line parameter for specifying D include paths.
Or, the gamma include files are included relative the directory where the generated source code has been created, such that the implicit call would be done as:
dmd S.d SLex.d -g ./runtime.d ./io.d ./log.d ./listacks.d

In that case the gamma vscode extension could copy the include files alongside the generated source code and the implicit compilation could work seamlessly.

@linkrope What to you think about moving all those files to src/gruntime - "gruntime" for gamma runtime, similar to druntime?

The dmd compiler call then could be adjusted to
dmd S.d SLex.d -I=src/gruntime;
and at the generated compiler compilation
dmd S.d SLex.d -I=build/gruntime.

This schema is more flexible for the case the gamma compiler generator is carried with the VScode extension or the Eclipse plugin and temporary extracted to an arbitrary configurable project directory structure.

...I would take over to make this change. Just would like to agree with you, first.

Just thought on how to implement this and it seems to me that having a different include path at the development project and at the generated compiler compilation is not a good idea.

So, maybe, it is better to have them all in include/gruntime. That way, the include directive for the D compiler would be always the same: dmd S.d SLex.d -I=include/gruntime
If the extension/plugin is creating the compiler source code at the build sub directory, e.g., then it only would need to copy all include files in the build/include/gruntime directory.

We could also put all include files directly under include where runtime.d is located today already.

Maybe the last option is the best? What do you think?