On Saturday, 10 March 2018 at 07:54:33 UTC, Mike Franklin wrote:
On Saturday, 10 March 2018 at 02:25:38 UTC, Richard wrote:
Hi,
I've been trying to see if I can get an mbed project to work with Dlang
basically compiling D code for use on a Cortex-M Proccessor


You might be interested in the following, if you're not already aware:
 * https://github.com/JinShil/stm32f42_discovery_demo
 * https://bitbucket.org/timosi/minlibd

The STM32 demo only supports GDC right now, but I'll be updating it to support LDC when 2.079.0 lands there. 2.079.0 removes some coupling of the compiler to the runtime, so I should be able to avoid the following bugs:

https://github.com/ldc-developers/ldc/issues/created_by/JinShil

so I tried this instead
```
extern (C) int _d_run_main(int argc, char **argv, void* mainFunc) {
    MainFuncType mFunc = cast(MainFuncType) mainFunc;
    return mFunc(null);
}
```

but nope that didn't seem to work ether, compiles okay but the code in main() (D space) isn't called I'd imagine this should be a simple thing, anyone got any ideas?

The following worked fine for me on my x64 Linux desktop with LDC version 1.8.0 (DMD v2.078.3, LLVM 5.0.1)

``` main.d
import core.stdc.stdio;

private alias extern(C) int function(char[][] args) MainFuncType; extern (C) int _d_run_main(int argc, char **argv, void* mainFunc)
{
    MainFuncType mFunc = cast(MainFuncType) mainFunc;
    return mFunc(null);
}

void main()
{
    printf("Hello, World!\n");
}
```

Compile with: ldc2 -defaultlib= -debuglib= -betterC main.d

Mike


Based on the above this seems to work fine so I'll use this since it's the simplest option.
```
extern(C) int main(int argc, char** argv) {
    return d_main();
}

int d_main() {
  // Do stuff
}
```


This compiles but main() is never called btw
```
import core.stdc.stdio;

private alias extern(C) int function(char[][] args) MainFuncType;
extern (C) int _d_run_main(int argc, char **argv, void* mainFunc)
{
    MainFuncType mFunc = cast(MainFuncType) mainFunc;
    return mFunc(null);
}

int main() {
  // Do stuff
}
```
I tried compiling with
ldc2 -defaultlib= -debuglib= -mtriple=thumb-none-linux-eabi -mcpu=cortex-m3 --od=. -c -betterC main.d

Reply via email to