From 77ab536474b1a597b83f028e6a729e7ad05457eb Mon Sep 17 00:00:00 2001 From: Francisco Javier Trujillo Mata Date: Tue, 16 Nov 2021 11:24:36 +0100 Subject: [PATCH] Implement some missings todo, and add libpsprtc as standard library Remove -lm from examples because is also part of standard libraries --- Dockerfile | 3 +- src/libcglue/Makefile.am | 6 +- src/libcglue/glue.c | 91 +++++++++++++------ src/samples/audio/wavegen/Makefile.sample | 2 +- src/samples/gu/beginobject/Makefile.sample | 2 +- src/samples/gu/blit/Makefile.sample | 2 +- src/samples/gu/celshading/Makefile.sample | 2 +- src/samples/gu/cube/Makefile.sample | 2 +- src/samples/gu/envmap/Makefile.sample | 2 +- src/samples/gu/integerdrawing/Makefile.sample | 2 +- src/samples/gu/lights/Makefile.sample | 2 +- src/samples/gu/logic/Makefile.sample | 2 +- src/samples/gu/mipmapping/Makefile.sample | 2 +- src/samples/gu/morph/Makefile.sample | 2 +- src/samples/gu/morphskin/Makefile.sample | 2 +- src/samples/gu/ortho/Makefile.sample | 2 +- src/samples/gu/reflection/Makefile.sample | 2 +- src/samples/gu/rendertarget/Makefile.sample | 2 +- .../gu/shadowprojection/Makefile.sample | 2 +- src/samples/gu/signals/Makefile.sample | 2 +- src/samples/gu/skinning/Makefile.sample | 2 +- src/samples/gu/speed/Makefile.sample | 2 +- src/samples/gu/spharm/Makefile.sample | 2 +- src/samples/gu/splinesurface/Makefile.sample | 2 +- src/samples/gu/sprite/Makefile.sample | 2 +- src/samples/gu/text/Makefile.sample | 2 +- src/samples/gu/timing/Makefile.sample | 2 +- src/samples/gu/vertex/Makefile.sample | 2 +- src/samples/gu/zbufferfog/Makefile.sample | 2 +- 29 files changed, 97 insertions(+), 55 deletions(-) diff --git a/Dockerfile b/Dockerfile index e7f28c4a..f56d109f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,10 +13,11 @@ RUN cd /src && \ make -j $(getconf _NPROCESSORS_ONLN) && \ make -j $(getconf _NPROCESSORS_ONLN) install -## gcc needs to include libcglue libpsputility libpspnet_inet libpspnet_resolver libpspuser libpspkernel +## gcc needs to include libcglue libpsputility libpsprtc libpspnet_inet libpspnet_resolver libpspuser libpspkernel ## from pspsdk to be able to build executables, because they are part of the standard libraries RUN ln -sf "$PSPDEV/psp/sdk/lib/libcglue.a" "$PSPDEV/psp/lib/libcglue.a" || { exit 1; } RUN ln -sf "$PSPDEV/psp/sdk/lib/libpsputility.a" "$PSPDEV/psp/lib/libpsputility.a" || { exit 1; } +RUN ln -sf "$PSPDEV/psp/sdk/lib/libpsprtc.a" "$PSPDEV/psp/lib/libpsprtc.a" || { exit 1; } RUN ln -sf "$PSPDEV/psp/sdk/lib/libpspnet_inet.a" "$PSPDEV/psp/lib/libpspnet_inet.a" || { exit 1; } RUN ln -sf "$PSPDEV/psp/sdk/lib/libpspnet_resolver.a" "$PSPDEV/psp/lib/libpspnet_resolver.a" || { exit 1; } RUN ln -sf "$PSPDEV/psp/sdk/lib/libpspuser.a" "$PSPDEV/psp/lib/libpspuser.a" || { exit 1; } diff --git a/src/libcglue/Makefile.am b/src/libcglue/Makefile.am index 1d2a7f31..5e1f416f 100644 --- a/src/libcglue/Makefile.am +++ b/src/libcglue/Makefile.am @@ -8,9 +8,11 @@ RANLIB = @PSP_RANLIB@ CPPFLAGS = -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/debug \ + -I$(top_srcdir)/src/sdk \ -I$(top_srcdir)/src/kernel \ -I$(top_srcdir)/src/net \ - -I$(top_srcdir)/src/sdk \ + -I$(top_srcdir)/src/user \ + -I$(top_srcdir)/src/rtc \ -I$(top_srcdir)/src/user \ -I$(top_srcdir)/src/utility CFLAGS = @PSPSDK_CFLAGS@ @@ -25,7 +27,7 @@ FDMAN_OBJS = __descriptor_data_pool.o __descriptormap.o __fdman_init.o __fdman_g GLUE_OBJS = __fill_stat.o __psp_heap_blockid.o __psp_free_heap.o _fork.o _wait.o _open.o _close.o _read.o _write.o _fstat.o \ _stat.o lstat.o access.o _fcntl.o _lseek.o chdir.o mkdir.o rmdir.o getdents.o _seekdir.o _link.o _unlink.o \ - _rename.o getcwd.o _getpid.o _kill.o _sbrk.o _gettimeofday.o _times.o _internal_malloc_lock.o _internal_malloc_unlock.o \ + _rename.o _getpid.o _kill.o _sbrk.o _gettimeofday.o _times.o _internal_malloc_lock.o _internal_malloc_unlock.o \ _isatty.o symlink.o truncate.o chmod.o fchmod.o fchmodat.o pathconf.o readlink.o utime.o fchown.o getentropy.o diff --git a/src/libcglue/glue.c b/src/libcglue/glue.c index 7c2a3589..2c93e999 100644 --- a/src/libcglue/glue.c +++ b/src/libcglue/glue.c @@ -36,6 +36,7 @@ #include #include #include +#include #include "fdman.h" @@ -617,13 +618,6 @@ int _rename(const char *old, const char *new) } #endif -#ifdef F_getcwd -char *getcwd(char *buf, size_t len) { - strncpy(buf, __cwd, len); - return buf; -} -#endif - #ifdef F__getpid pid_t _getpid(void) { @@ -642,7 +636,7 @@ int _kill(pid_t pid, int sig) pid_t _fork(void) { errno = ENOSYS; - return (pid_t) -1; + return (pid_t) -1; /* not supported */ } #endif @@ -650,7 +644,7 @@ pid_t _fork(void) pid_t _wait(int *unused) { errno = ENOSYS; - return (pid_t) -1; + return (pid_t) -1; /* not supported */ } #endif @@ -786,45 +780,62 @@ int truncate(const char *path, off_t length) int _isatty(int fd) { errno = ENOTTY; - return 0; + return -1; /* not supported */ } #endif #ifdef F_chmod int chmod(const char *pathname, mode_t mode) { - // TODO: Implement proper functionality - return 0; + SceIoStat psp_stat; + char dest[MAXNAMLEN + 1]; + int ret; + + if(__path_absolute(pathname, dest, MAXNAMLEN) < 0) { + errno = ENAMETOOLONG; + return -1; + } + + ret = sceIoGetstat(dest, &psp_stat); + if (ret < 0) { + return __set_errno(ret); + } + + psp_stat.st_mode = (SceMode)mode; + ret = sceIoChstat(dest, &psp_stat, 0x0001); + if (ret < 0) { + return __set_errno(ret); + } + + return 0; } #endif #ifdef F_fchmod -int fchmod(int filedes, mode_t mode) +int fchmod(int fd, mode_t mode) { - // TODO: Implement proper functionality - return 0; + return chmod(__descriptormap[fd]->filename, mode); } #endif #ifdef F_fchmodat int fchmodat(int fd, const char *path, mode_t mode, int flag) { - // TODO: Implement proper functionality - return 0; + return chmod(path, mode); } #endif #ifdef F_pathconf long int pathconf(const char *path, int name) { - // TODO: Implement proper functionality - return 0; + errno = ENOSYS; + return -1; /* not supported */ } #endif #ifdef F_readlink ssize_t readlink(const char *path, char *buf, size_t bufsiz) { - // TODO: Implement proper functionality - return 0; + errno = ENOSYS; + return -1; /* not supported */ } #endif @@ -834,18 +845,46 @@ struct utimbuf { time_t modtime; /* Modification time */ }; -int utime(const char *path, const struct utimbuf *times) +int utime(const char *pathname, const struct utimbuf *times) { - // TODO: Implement proper functionality - return 0; + SceIoStat psp_stat; + char dest[MAXNAMLEN + 1]; + int ret; + + if(__path_absolute(pathname, dest, MAXNAMLEN) < 0) { + errno = ENAMETOOLONG; + return -1; + } + + ret = sceIoGetstat(dest, &psp_stat); + if (ret < 0) { + return __set_errno(ret); + } + + ret = sceRtcSetTime_t((pspTime *)&psp_stat.sce_st_atime, times->actime); + if (ret < 0) { + return __set_errno(ret); + } + + ret = sceRtcSetTime_t((pspTime *)&psp_stat.sce_st_mtime, times->modtime); + if (ret < 0) { + return __set_errno(ret); + } + + ret = sceIoChstat(dest, &psp_stat, 0x0030); + if (ret < 0) { + return __set_errno(ret); + } + + return 0; } #endif #ifdef F_fchown int fchown(int fd, uid_t owner, gid_t group) { - // TODO: Implement proper functionality - return 0; + errno = ENOSYS; + return -1; /* not supported */ } #endif diff --git a/src/samples/audio/wavegen/Makefile.sample b/src/samples/audio/wavegen/Makefile.sample index 3f2d315d..3a18b5a2 100644 --- a/src/samples/audio/wavegen/Makefile.sample +++ b/src/samples/audio/wavegen/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS = -lpspaudiolib -lpspaudio -lm +LIBS = -lpspaudiolib -lpspaudio EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Audiolib Wave Generator diff --git a/src/samples/gu/beginobject/Makefile.sample b/src/samples/gu/beginobject/Makefile.sample index 5eee8d7f..d99fc20f 100644 --- a/src/samples/gu/beginobject/Makefile.sample +++ b/src/samples/gu/beginobject/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = BeginObject Sample diff --git a/src/samples/gu/blit/Makefile.sample b/src/samples/gu/blit/Makefile.sample index 03ae76ec..bf774758 100644 --- a/src/samples/gu/blit/Makefile.sample +++ b/src/samples/gu/blit/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lpsprtc +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Blit Sample diff --git a/src/samples/gu/celshading/Makefile.sample b/src/samples/gu/celshading/Makefile.sample index ebb786ab..b5066d4b 100644 --- a/src/samples/gu/celshading/Makefile.sample +++ b/src/samples/gu/celshading/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Celshading Sample diff --git a/src/samples/gu/cube/Makefile.sample b/src/samples/gu/cube/Makefile.sample index f9d0019f..161cbfcc 100644 --- a/src/samples/gu/cube/Makefile.sample +++ b/src/samples/gu/cube/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Cube Sample diff --git a/src/samples/gu/envmap/Makefile.sample b/src/samples/gu/envmap/Makefile.sample index 24dc111c..264d3a82 100644 --- a/src/samples/gu/envmap/Makefile.sample +++ b/src/samples/gu/envmap/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Environment Mapping Sample diff --git a/src/samples/gu/integerdrawing/Makefile.sample b/src/samples/gu/integerdrawing/Makefile.sample index f87459bc..07494540 100644 --- a/src/samples/gu/integerdrawing/Makefile.sample +++ b/src/samples/gu/integerdrawing/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Integer Drawing Sample diff --git a/src/samples/gu/lights/Makefile.sample b/src/samples/gu/lights/Makefile.sample index 7a7c454e..22b0b600 100644 --- a/src/samples/gu/lights/Makefile.sample +++ b/src/samples/gu/lights/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Lights Sample diff --git a/src/samples/gu/logic/Makefile.sample b/src/samples/gu/logic/Makefile.sample index 6e83aaeb..21244db0 100644 --- a/src/samples/gu/logic/Makefile.sample +++ b/src/samples/gu/logic/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgu -lm +LIBS= -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Logic Sample diff --git a/src/samples/gu/mipmapping/Makefile.sample b/src/samples/gu/mipmapping/Makefile.sample index cba00aa0..4d56725d 100644 --- a/src/samples/gu/mipmapping/Makefile.sample +++ b/src/samples/gu/mipmapping/Makefile.sample @@ -9,7 +9,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS = -lpspgum -lpspgu -lm +LIBS = -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = MIP Mapping Sample diff --git a/src/samples/gu/morph/Makefile.sample b/src/samples/gu/morph/Makefile.sample index b26528cf..b3b9772e 100644 --- a/src/samples/gu/morph/Makefile.sample +++ b/src/samples/gu/morph/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Morph Sample diff --git a/src/samples/gu/morphskin/Makefile.sample b/src/samples/gu/morphskin/Makefile.sample index c979c7f1..78908a00 100644 --- a/src/samples/gu/morphskin/Makefile.sample +++ b/src/samples/gu/morphskin/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS = -lpspgum -lpspgu -lm +LIBS = -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Simultaneous Morphing and Skinning Sample diff --git a/src/samples/gu/ortho/Makefile.sample b/src/samples/gu/ortho/Makefile.sample index dc3f7994..d0a029ee 100644 --- a/src/samples/gu/ortho/Makefile.sample +++ b/src/samples/gu/ortho/Makefile.sample @@ -9,7 +9,7 @@ CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR = -LIBS = -lpspgum -lpspgu -lm +LIBS = -lpspgum -lpspgu LDFLAGS = EXTRA_TARGETS = EBOOT.PBP diff --git a/src/samples/gu/reflection/Makefile.sample b/src/samples/gu/reflection/Makefile.sample index faad763c..88186b23 100644 --- a/src/samples/gu/reflection/Makefile.sample +++ b/src/samples/gu/reflection/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Reflection Sample diff --git a/src/samples/gu/rendertarget/Makefile.sample b/src/samples/gu/rendertarget/Makefile.sample index 544ebc44..adec5fcd 100644 --- a/src/samples/gu/rendertarget/Makefile.sample +++ b/src/samples/gu/rendertarget/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS = -lpspgum -lpspgu -lm +LIBS = -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Render-To-Texture Sample diff --git a/src/samples/gu/shadowprojection/Makefile.sample b/src/samples/gu/shadowprojection/Makefile.sample index d18f4b56..29971201 100644 --- a/src/samples/gu/shadowprojection/Makefile.sample +++ b/src/samples/gu/shadowprojection/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS = -lpspgum -lpspgu -lm +LIBS = -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Shadow Projection Sample diff --git a/src/samples/gu/signals/Makefile.sample b/src/samples/gu/signals/Makefile.sample index e4b8f026..37d6ccec 100644 --- a/src/samples/gu/signals/Makefile.sample +++ b/src/samples/gu/signals/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Signals Sample diff --git a/src/samples/gu/skinning/Makefile.sample b/src/samples/gu/skinning/Makefile.sample index b59f6830..560f7860 100644 --- a/src/samples/gu/skinning/Makefile.sample +++ b/src/samples/gu/skinning/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS = -lpspgum -lpspgu -lm +LIBS = -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Matrix Skinning Sample diff --git a/src/samples/gu/speed/Makefile.sample b/src/samples/gu/speed/Makefile.sample index df1b4382..f533cdbb 100644 --- a/src/samples/gu/speed/Makefile.sample +++ b/src/samples/gu/speed/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lpsprtc +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Memory Speed Sample diff --git a/src/samples/gu/spharm/Makefile.sample b/src/samples/gu/spharm/Makefile.sample index 64ec8e69..ed944234 100644 --- a/src/samples/gu/spharm/Makefile.sample +++ b/src/samples/gu/spharm/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = convlogo EBOOT.PBP PSP_EBOOT_TITLE = adresd - spharm v1.0 diff --git a/src/samples/gu/splinesurface/Makefile.sample b/src/samples/gu/splinesurface/Makefile.sample index 4b81593f..db31449c 100644 --- a/src/samples/gu/splinesurface/Makefile.sample +++ b/src/samples/gu/splinesurface/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Spline Surface Sample diff --git a/src/samples/gu/sprite/Makefile.sample b/src/samples/gu/sprite/Makefile.sample index fea6d96d..e51f0593 100644 --- a/src/samples/gu/sprite/Makefile.sample +++ b/src/samples/gu/sprite/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Sprite Sample diff --git a/src/samples/gu/text/Makefile.sample b/src/samples/gu/text/Makefile.sample index 9bb3910e..e307f947 100644 --- a/src/samples/gu/text/Makefile.sample +++ b/src/samples/gu/text/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = GUFont Sample by McZonk diff --git a/src/samples/gu/timing/Makefile.sample b/src/samples/gu/timing/Makefile.sample index d762998a..cfaa7344 100644 --- a/src/samples/gu/timing/Makefile.sample +++ b/src/samples/gu/timing/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS = -lpspgum -lpspgu -lm +LIBS = -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Timing Sample diff --git a/src/samples/gu/vertex/Makefile.sample b/src/samples/gu/vertex/Makefile.sample index 9e73ff98..c5fe7d8c 100644 --- a/src/samples/gu/vertex/Makefile.sample +++ b/src/samples/gu/vertex/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm -lpsprtc +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Vertex Speed Sample diff --git a/src/samples/gu/zbufferfog/Makefile.sample b/src/samples/gu/zbufferfog/Makefile.sample index 219fed63..e5b4586d 100644 --- a/src/samples/gu/zbufferfog/Makefile.sample +++ b/src/samples/gu/zbufferfog/Makefile.sample @@ -8,7 +8,7 @@ ASFLAGS = $(CFLAGS) LIBDIR = LDFLAGS = -LIBS= -lpspgum -lpspgu -lm +LIBS= -lpspgum -lpspgu EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Depth Buffer Fog Sample