GDC on psptoolchain
John Grindstaff
perfectcell14 at yahoo.com
Wed Jul 23 11:23:24 PDT 2008
Thanks for listing the compile flags. I successfully built an executable
but there was no libgphobos.a appearing--which prevented me from
instantiating any classes or structs in my test example (which operates
similar to yours--an extern'd d function called from C).
Would it be possible to use a stripped down version of Tango or Phobos,
perhaps something that has the base type/classinfo and memory management
stuff and leave the rest alone? I just need auto memory management and
classes and I can use all the sce* psp sdk functions for other things.
BTW, you might want to use pspDebugScreenPrintf and pspDebugScreenInit
instead of printf for the C code. Last time I checked, they are very
different and printf doesn't work.
Kostas Karanikolas wrote:
> 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'
>
More information about the D.gnu
mailing list