From 4b12d8855a5582c707759da258d2b1a57fa71373 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Wed, 13 May 2020 20:37:03 +0100 Subject: [PATCH] Added libmagenta and file io support to magenta platform --- CMakeLists.txt | 29 +++++++++++++++++++++++---- photon/libc/include/stdio.h | 6 ++++++ photon/libc/sys/magenta/__fio.h | 4 ++++ photon/libc/sys/magenta/__syscall.h | 17 ---------------- photon/libc/sys/magenta/config.cmake | 3 +++ photon/libc/sys/magenta/fio.c | 1 - photon/libc/sys/magenta/sys/_fconst.h | 8 +++++--- photon/libc/sys/magenta/syscall.c | 3 --- 8 files changed, 43 insertions(+), 28 deletions(-) delete mode 100644 photon/libc/sys/magenta/__syscall.h create mode 100644 photon/libc/sys/magenta/config.cmake delete mode 100644 photon/libc/sys/magenta/syscall.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 84457e5..4abdfb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,8 @@ platform_config(${PHOTON_TARGET}) message(STATUS "Target: ${machine}-${platform}") +include(${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/config.cmake) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ffreestanding -nostdlib -lgcc") @@ -47,6 +49,19 @@ file(GLOB platform_sources ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/machine/${machine}/*.c ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/machine/${machine}/*.s) +foreach (platform_source_dir ${photon_platform_extra_source_dirs}) + file(GLOB dir_sources + ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/${platform_source_dir}/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/${platform_source_dir}/*.h) + set(platform_sources ${platform_sources} ${dir_sources}) +endforeach (platform_source_dir) + +foreach (platform_include_dir ${photon_platform_extra_include_dirs}) + file(GLOB dir_sources + ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/${platform_include_dir}/*.h) + set(platform_sources ${platform_sources} ${dir_sources}) +endforeach (platform_include_dir) + foreach (crt_source ${photon_libc_crt}) list(REMOVE_ITEM platform_sources ${crt_source}) endforeach (crt_source) @@ -65,11 +80,17 @@ else () endif () target_compile_options(c PRIVATE -ffreestanding -nostdlib) -target_link_libraries(c crt) +target_link_libraries(c crt ${photon_platform_libs}) + +target_include_directories(c PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/include + ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/ + ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/include) + +foreach (platform_include_dir ${photon_platform_extra_include_dirs}) + target_include_directories(c PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/${platform_include_dir}) +endforeach (platform_include_dir) -target_include_directories(c PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/include) -target_include_directories(c PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/photon/libc/sys/${platform}/) -target_include_directories(c PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/sysroot/usr/include) add_custom_target(local-root DEPENDS ${photon_libc_headers} diff --git a/photon/libc/include/stdio.h b/photon/libc/include/stdio.h index 1856b09..f58b5f1 100644 --- a/photon/libc/include/stdio.h +++ b/photon/libc/include/stdio.h @@ -27,6 +27,12 @@ extern FILE *stdin; extern FILE *stdout; extern FILE *stderr; +extern FILE *fopen(const char *path, const char *mode); +extern FILE *freopen(const char *path, const char *mode, FILE *fp); +extern FILE *fdopen(int fd, const char *mode); +extern int fclose(FILE *fp); +extern int fflush(FILE *fp); + extern int fileno(FILE *fp); extern int fputs(const char *str, FILE *fp); extern int fputc(char c, FILE *fp); diff --git a/photon/libc/sys/magenta/__fio.h b/photon/libc/sys/magenta/__fio.h index 22dfbbd..aa7c3b2 100644 --- a/photon/libc/sys/magenta/__fio.h +++ b/photon/libc/sys/magenta/__fio.h @@ -22,6 +22,10 @@ extern unsigned int __fio_write(struct __io_file *f, const char *buf, unsigned i extern unsigned int __fio_flush(struct __io_file *f); extern int __fio_error(struct __io_file *f); +extern int __fio_fopen(const char *path, const char *mode, struct __io_file *out); +extern int __fio_fclose(struct __io_file *in); +extern int __fio_fdopen(int fd, const char *mode, struct __io_file *out); + #if defined(__cplusplus) } #endif diff --git a/photon/libc/sys/magenta/__syscall.h b/photon/libc/sys/magenta/__syscall.h deleted file mode 100644 index 49121c6..0000000 --- a/photon/libc/sys/magenta/__syscall.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef SYS_LINUX___SYSCALL_H_ -#define SYS_LINUX___SYSCALL_H_ - -#include - -extern intptr_t __syscall0(uintptr_t id); -extern intptr_t __syscall1(uintptr_t id, uintptr_t p0); -extern intptr_t __syscall2(uintptr_t id, uintptr_t p0, uintptr_t p1); -extern intptr_t __syscall3(uintptr_t id, uintptr_t p0, uintptr_t p1, uintptr_t p2); -extern intptr_t __syscall4(uintptr_t id, uintptr_t p0, uintptr_t p1, uintptr_t p2, - uintptr_t p3); -extern intptr_t __syscall5(uintptr_t id, uintptr_t p0, uintptr_t p1, uintptr_t p2, - uintptr_t p3, uintptr_t p4); -extern intptr_t __syscall6(uintptr_t id, uintptr_t p0, uintptr_t p1, uintptr_t p2, - uintptr_t p3, uintptr_t p4, uintptr_t p5); - -#endif diff --git a/photon/libc/sys/magenta/config.cmake b/photon/libc/sys/magenta/config.cmake new file mode 100644 index 0000000..383e863 --- /dev/null +++ b/photon/libc/sys/magenta/config.cmake @@ -0,0 +1,3 @@ +set(photon_platform_extra_source_dirs libmagenta/libmagenta) +set(photon_platform_extra_include_dirs libmagenta/libmagenta/arch/${machine}) +set(photon_platform_libs magenta) diff --git a/photon/libc/sys/magenta/fio.c b/photon/libc/sys/magenta/fio.c index e07477a..f1feb6f 100644 --- a/photon/libc/sys/magenta/fio.c +++ b/photon/libc/sys/magenta/fio.c @@ -1,6 +1,5 @@ #include "sys/types.h" #include "__fio.h" -#include "__syscall.h" struct __io_file __stdin = {}; struct __io_file __stdout = {}; diff --git a/photon/libc/sys/magenta/sys/_fconst.h b/photon/libc/sys/magenta/sys/_fconst.h index 1733158..21e0975 100644 --- a/photon/libc/sys/magenta/sys/_fconst.h +++ b/photon/libc/sys/magenta/sys/_fconst.h @@ -1,10 +1,12 @@ #ifndef SYS_LINUX_SYS__FCONST_H_ #define SYS_LINUX_SYS__FCONST_H_ +#include + #define __FILENAME_MAX 1024 -#define __SEEK_SET 0 -#define __SEEK_CUR 1 -#define __SEEK_END 2 +#define __SEEK_SET MX_SEEK_START +#define __SEEK_CUR MX_SEEK_CURRENT +#define __SEEK_END MX_SEEK_END #endif diff --git a/photon/libc/sys/magenta/syscall.c b/photon/libc/sys/magenta/syscall.c deleted file mode 100644 index 750fd0f..0000000 --- a/photon/libc/sys/magenta/syscall.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "sys/syscall.h" -#include "__syscall.h" -