GDC on psptoolchain

Kostas Karanikolas k_karanikolas at hotmail.com
Wed Jul 23 04:39:31 PDT 2008


Hi, 
I was intrigued enough to have another go at compiling GDC for the PSP (my previous attempt half a year ago did not get me very far), and I can say that at least the toolchain builds fine (for D 1.0) with a working compiler and a libgphobos. (When I enabled D 2.0, the toolchain build stopped with compiler errors)

Here's what my psp-gdc -v produces:

Using built-in specs.
Target: psp
Configured with: ../configure --prefix=/pspdev --target=psp --enable-languages=c,d,c++ --with-newlib --enable-cxx-flags=-G0 --disable-libssp --enable-static --disable-shared
Thread model: single
gcc version 4.1.0 20060228 ( gdc 0.24, using dmd 1.030) (PSPDEV 20060507)

BTW you can also see the configure flags I used.

I wanted to see if I could get a working executable. So my test was, to have D function be called from a C main function (because the PSP sdk has some special initialization macros that I guess need to be defined to get a working executable). However when linking the program I got a lot of linker errors, originating from libphobos/std/math.d and libphobos/gcc/cbridge_math.c. My guess is that these come from the lack of double support on the psp toolchain. Could that be the case, or is it some kind of misconfiguration? Also is there some way of fixing this?

Thanks!

Here is the test program:
----------------------------------
testd.d:
import std.stdio;

extern(C) void dfunc()
{
        printf("Hello from D");
}

----------------------------------
#include <pspkernel.h>
#include <stdio.h>
PSP_MODULE_INFO("test", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
extern void dfunc();
int main(int argc, char *argv[])
{
        printf("Hello World\n");
        dfunc();
        return 0;
}

----------------------------------
Here are the actual errors:

psp-gcc -I. -I/pspdev/psp/sdk/include -O0 -g -G0 -Wall -D_PSP_FW_VERSION=150  -L. -L/pspdev/psp/sdk/lib -specs=/pspdev/psp/sdk/lib/prxspecs -Wl,-q,-T/pspdev/psp/sdk/lib/linkfile.prx   main.o testd.o /pspdev/psp/sdk/lib/prxexports.o -lgphobos -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -o test.elf
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4exp2FeZe':
../../../libphobos/std/math.d:785: undefined reference to `pow'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math9nextafterFddZd':
../../../libphobos/std/math.d:2137: undefined reference to `nextafter'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math9nextafterFffZf':
../../../libphobos/std/math.d:2126: undefined reference to `nextafterf'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math9nextafterFeeZe':
../../../libphobos/std/math.d:2115: undefined reference to `nextafter'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math3powFeeZe':
../../../libphobos/std/math.d:2371: undefined reference to `pow'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math9remainderFeeZe':
../../../libphobos/std/math.d:1574: undefined reference to `remainder'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math5truncFeZe':
../../../libphobos/std/math.d:1550: undefined reference to `trunc'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math5roundFeZe':
../../../libphobos/std/math.d:1509: undefined reference to `round'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math9nearbyintFeZe':
../../../libphobos/std/math.d:1431: undefined reference to `nearbyint'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math5floorFeZe':
../../../libphobos/std/math.d:1417: undefined reference to `floor'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4ceilFeZe':
../../../libphobos/std/math.d:1411: undefined reference to `ceil'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math6tgammaFeZe':
../../../libphobos/std/math.d:1402: undefined reference to `tgamma'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math6lgammaFeZe':
../../../libphobos/std/math.d:1365: undefined reference to `lgamma'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4erfcFeZe':
../../../libphobos/std/math.d:1345: undefined reference to `erfc'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math3erfFeZe':
../../../libphobos/std/math.d:1337: undefined reference to `erf'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4cbrtFeZe':
../../../libphobos/std/math.d:1196: undefined reference to `cbrt'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4logbFeZe':
../../../libphobos/std/math.d:1137: undefined reference to `logb'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4log2FeZe':
../../../libphobos/std/math.d:1120: undefined reference to `log'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math3logFeZe':
../../../libphobos/std/math.d:1077: undefined reference to `log'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math5log1pFeZe':
../../../libphobos/std/math.d:1107: undefined reference to `log1p'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math5log10FeZe':
../../../libphobos/std/math.d:1090: undefined reference to `log10'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math5ilogbFeZi':
../../../libphobos/std/math.d:1052: undefined reference to `ilogb'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4expiFeZc':
../../../libphobos/std/math.d:832: undefined reference to `cos'
../../../libphobos/std/math.d:832: undefined reference to `sin'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math5expm1FeZe':
../../../libphobos/std/math.d:804: undefined reference to `expm1'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math3expFeZe':
../../../libphobos/std/math.d:774: undefined reference to `exp'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4sqrtFeZe':
../../../libphobos/std/math.d:721: undefined reference to `sqrt'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4sqrtFdZd':
../../../libphobos/std/math.d:719: undefined reference to `sqrt'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4sqrtFfZf':
../../../libphobos/std/math.d:717: undefined reference to `sqrtf'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4tanhFeZe':
../../../libphobos/std/math.d:585: undefined reference to `tanh'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4sinhFeZe':
../../../libphobos/std/math.d:574: undefined reference to `sinh'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4coshFeZe':
../../../libphobos/std/math.d:563: undefined reference to `cosh'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math5atan2FeeZe':
../../../libphobos/std/math.d:553: undefined reference to `atan2'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4atanFeZe':
../../../libphobos/std/math.d:530: undefined reference to `atan'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4asinFeZe':
../../../libphobos/std/math.d:518: undefined reference to `asin'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(math.o): In function `_D3std4math4acosFeZe':
../../../libphobos/std/math.d:505: undefined reference to `acos'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(cbridge_math.o): In function `_D3gcc5fpcls7signbitFfZi':
../../../libphobos/gcc/cbridge_math.c:39: undefined reference to `__signbitf'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(cbridge_math.o): In function `_D3gcc5fpcls7signbitFdZi':
../../../libphobos/gcc/cbridge_math.c:39: undefined reference to `__signbitd'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(cbridge_math.o): In function `_D3gcc5fpcls7signbitFeZi':
../../../libphobos/gcc/cbridge_math.c:39: undefined reference to `__signbitd'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(cbridge_math.o): In function `_D3gcc5fpcls10fpclassifyFfZi':
../../../libphobos/gcc/cbridge_math.c:38: undefined reference to `__fpclassifyf'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(cbridge_math.o): In function `_D3gcc5fpcls10fpclassifyFdZi':
../../../libphobos/gcc/cbridge_math.c:38: undefined reference to `__fpclassifyd'
/pspdev/lib/gcc/psp/4.1.0/../../../../psp/lib/libgphobos.a(cbridge_math.o): In function `_D3gcc5fpcls10fpclassifyFeZi':
../../../libphobos/gcc/cbridge_math.c:38: undefined reference to `__fpclassifyd'


David Friedman Wrote:

> Yes, the very latest -- checked in last night.  I'm not sure what you 
> mean by config 'files'.  You should use the commands in the psptoolchain 
> build scripts.  The only difference is that the --enable-languages 
> option should be
> 
>    --enable-languages=c,c++,d
> 
> or
> 
>    --enable-languages=c,d
> 
> David
> 
> FreekSh0w86 wrote:
> > The very latest? I checked out svn last week but I didn't know what to 
> > put in the configuration files in order to make it build. The 
> > psptoolchain works by compiling PSP binaries on a POSIX system, so 
> > setting the configuration file might be tricky.
> > 
> > Thanks
> > 
> > David Friedman wrote:
> >> John Grindstaff wrote:
> >>> Building GDC for the psptoolchain (as psp-gdc) is it possible? I get 
> >>> compile errors such as this:
> >>>
> >>> http://paste.dprogramming.com/dppq5raf
> >>>
> >>> Even though I did apply PSP patches and ran d language setup.sh
> >>>
> >>> I'm not sure how to patch gdc for PSP use. I like programming on 
> >>> Playstation Portable, but I only desire to return to that scene if I 
> >>> can program in a sensible, modern language such as D.
> >>>
> >>>
> >>>       
> >>
> >> The latest SVN version has fixes that will allow GDC to build with 
> >> psptoolchain (and MIPS, in general).  I do not have a PSP, so I cannot 
> >> really test it beyond this.
> >>
> >> David



More information about the D.gnu mailing list