Moved stdlib to a seperate folder and added some more headers that are required for compiling libgcc (no implementation yet).
This commit is contained in:
parent
00f4e0de3a
commit
712b95c9d7
@ -4,15 +4,11 @@ any_target_sources = Split('''
|
||||
src/app/main.cpp
|
||||
|
||||
src/libs/psf.cpp
|
||||
|
||||
src/cstdlib/assert.cpp
|
||||
src/cstdlib/stdio.cpp
|
||||
src/cstdlib/stdlib.cpp
|
||||
src/cstdlib/string.cpp
|
||||
''')
|
||||
|
||||
env.Append(KERNEL_SOURCES = [env.File(f) for f in any_target_sources])
|
||||
|
||||
env = SConscript('kernel/SConscript', exports = 'env')
|
||||
env = SConscript('stdlib/SConscript', exports = 'env')
|
||||
|
||||
Return('env')
|
11
targets/_any/include/os/resources/lat9-08.psf.hpp
Normal file
11
targets/_any/include/os/resources/lat9-08.psf.hpp
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
extern const uint8_t LAT9_08[];
|
||||
extern const unsigned LAT9_08_SIZE;
|
||||
}
|
||||
|
@ -1,35 +0,0 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BAD_APPLE_OS_STDIO_H_INCLUDED)
|
||||
#define BAD_APPLE_OS_STDIO_H_INCLUDED
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include "./detail/common.h"
|
||||
|
||||
#define stdin __stdin
|
||||
|
||||
BA_EXTERN_C_BEGIN
|
||||
|
||||
typedef struct __file FILE;
|
||||
|
||||
extern FILE* __stdin;
|
||||
|
||||
static int EOF = -1;
|
||||
|
||||
int putchar(int chr) BA_CXX_NOEXCEPT;
|
||||
int puts(const char* str) BA_CXX_NOEXCEPT;
|
||||
int printf(const char* format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 1, 2)));
|
||||
int vprintf(const char* format, va_list vlist) BA_CXX_NOEXCEPT;
|
||||
int snprintf(char* buffer, size_t bufferSize, const char* format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 3, 4)));
|
||||
int vsnprintf(char* buffer, size_t bufferSize, const char* format, va_list vlist) BA_CXX_NOEXCEPT;
|
||||
|
||||
int fgetc(FILE* stream) BA_CXX_NOEXCEPT;
|
||||
char* fgets(char* buffer, int count, FILE* stream) BA_CXX_NOEXCEPT;
|
||||
inline int getc(FILE* stream) BA_CXX_NOEXCEPT { return fgetc(stream); }
|
||||
inline int getchar() BA_CXX_NOEXCEPT { return fgetc(stdin); }
|
||||
|
||||
BA_EXTERN_C_END
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_STDIO_H_INCLUDED)
|
13
targets/_any/src/os/resources/lat9-08.psf.s
Normal file
13
targets/_any/src/os/resources/lat9-08.psf.s
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
.section .rodata
|
||||
.global LAT9_08
|
||||
.type LAT9_08 @object
|
||||
|
||||
.section .rodata
|
||||
.global LAT9_08_SIZE
|
||||
.type LAT9_08_SIZE @object
|
||||
LAT9_08:
|
||||
.incbin "/home/mewin/Documents/projects/C++/bad_apple_os/targets/_any/src/os/resources/lat9-08.psf"
|
||||
LAT9_08_END:
|
||||
LAT9_08_SIZE:
|
||||
.int LAT9_08_END - LAT9_08
|
13
targets/_any/stdlib/SConscript
Normal file
13
targets/_any/stdlib/SConscript
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
Import('env')
|
||||
|
||||
stdlib_sources = Split('''
|
||||
src/assert.cpp
|
||||
src/stdio.cpp
|
||||
src/stdlib.cpp
|
||||
src/string.cpp
|
||||
''')
|
||||
|
||||
env.Append(KERNEL_SOURCES = [env.File(f) for f in stdlib_sources])
|
||||
|
||||
Return('env')
|
@ -10,12 +10,14 @@
|
||||
#define BA_CXX_NOEXCEPT noexcept
|
||||
#define BA_EXTERN_C_BEGIN extern "C" {
|
||||
#define BA_EXTERN_C_END }
|
||||
#define BA_C_RESTRICT
|
||||
#else
|
||||
#define BA_CXX_NODISCARD
|
||||
#define BA_CXX_NORETURN
|
||||
#define BA_CXX_NOEXCEPT
|
||||
#define BA_EXTERN_C_BEGIN
|
||||
#define BA_EXTERN_C_END
|
||||
#define BA_C_RESTRICT restrict
|
||||
#endif
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_DETAIL_ATTRIBUTES_H_INCLUDED)
|
7
targets/_any/stdlib/include/errno.h
Normal file
7
targets/_any/stdlib/include/errno.h
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BAD_APPLE_OS_ERRNO_H_INCLUDED)
|
||||
#define BAD_APPLE_OS_ERRNO_H_INCLUDED
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_ERRNO_H_INCLUDED)
|
9
targets/_any/stdlib/include/stdint.h
Normal file
9
targets/_any/stdlib/include/stdint.h
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BAD_APPLE_OS_STDINT_H_INCLUDED)
|
||||
#define BAD_APPLE_OS_STDINT_H_INCLUDED
|
||||
|
||||
#include "stdint-gcc.h" // TODO?
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_STDINT_H_INCLUDED)
|
47
targets/_any/stdlib/include/stdio.h
Normal file
47
targets/_any/stdlib/include/stdio.h
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BAD_APPLE_OS_STDIO_H_INCLUDED)
|
||||
#define BAD_APPLE_OS_STDIO_H_INCLUDED
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include "./detail/common.h"
|
||||
|
||||
#define stdin __stdin
|
||||
|
||||
BA_EXTERN_C_BEGIN
|
||||
|
||||
typedef struct __file FILE;
|
||||
|
||||
extern FILE* __stdin;
|
||||
|
||||
static int EOF = -1;
|
||||
|
||||
int putchar(int chr) BA_CXX_NOEXCEPT;
|
||||
int puts(const char* str) BA_CXX_NOEXCEPT;
|
||||
int printf(const char* BA_C_RESTRICT format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 1, 2)));
|
||||
int vprintf(const char* BA_C_RESTRICT format, va_list vlist) BA_CXX_NOEXCEPT;
|
||||
int sprintf(char* BA_C_RESTRICT buffer, const char* BA_C_RESTRICT format, ...) BA_CXX_NOEXCEPT;
|
||||
int snprintf(char* BA_C_RESTRICT buffer, size_t bufferSize, const char* BA_C_RESTRICT format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 3, 4)));
|
||||
int vsnprintf(char* BA_C_RESTRICT buffer, size_t bufferSize, const char* BA_C_RESTRICT format, va_list vlist) BA_CXX_NOEXCEPT;
|
||||
|
||||
int fclose(FILE* stream) BA_CXX_NOEXCEPT;
|
||||
int fflush(FILE* stream) BA_CXX_NOEXCEPT;
|
||||
int fgetc(FILE* stream) BA_CXX_NOEXCEPT;
|
||||
FILE* fopen(const char* BA_C_RESTRICT filename, const char* BA_C_RESTRICT mode) BA_CXX_NOEXCEPT;
|
||||
char* fgets(char* buffer, int count, FILE* stream) BA_CXX_NOEXCEPT;
|
||||
int fprintf(FILE* BA_C_RESTRICT stream, const char* BA_C_RESTRICT format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 2, 3)));
|
||||
size_t fread(void* BA_C_RESTRICT buffer, size_t size, size_t count, FILE* BA_C_RESTRICT stream) BA_CXX_NOEXCEPT;
|
||||
int fseek(FILE* stream, long offset, int origin) BA_CXX_NOEXCEPT;
|
||||
long ftell(FILE* stream) BA_CXX_NOEXCEPT;
|
||||
size_t fwrite(const void* BA_C_RESTRICT buffer, size_t size, size_t count, FILE* BA_C_RESTRICT stream) BA_CXX_NOEXCEPT;
|
||||
void setbuf(FILE* BA_C_RESTRICT stream, char* BA_C_RESTRICT buffer) BA_CXX_NOEXCEPT;
|
||||
int vfprintf(FILE* BA_C_RESTRICT stream, const char* BA_C_RESTRICT format, va_list vlist) BA_CXX_NOEXCEPT;
|
||||
|
||||
inline int getc(FILE* stream) BA_CXX_NOEXCEPT { return fgetc(stream); }
|
||||
inline int getchar() BA_CXX_NOEXCEPT { return fgetc(stdin); }
|
||||
|
||||
BA_EXTERN_C_END
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_STDIO_H_INCLUDED)
|
@ -10,6 +10,13 @@
|
||||
BA_EXTERN_C_BEGIN
|
||||
|
||||
BA_CXX_NORETURN void abort();
|
||||
int atexit(void (*func)()) BA_CXX_NOEXCEPT;
|
||||
BA_CXX_NODISCARD char* getenv(const char* name) BA_CXX_NOEXCEPT;
|
||||
|
||||
BA_CXX_NODISCARD int abs(int n) BA_CXX_NOEXCEPT;
|
||||
BA_CXX_NODISCARD int atoi(const char* str) BA_CXX_NOEXCEPT;
|
||||
|
||||
BA_CXX_NODISCARD void* calloc(size_t num, size_t size) BA_CXX_NOEXCEPT;
|
||||
BA_CXX_NODISCARD void* malloc(size_t size) BA_CXX_NOEXCEPT;
|
||||
void free(void* ptr) BA_CXX_NOEXCEPT;
|
||||
|
@ -14,6 +14,10 @@ BA_CXX_NODISCARD int memcmp(const void* lhs, const void* rhs, size_t count) BA_C
|
||||
void* memcpy(void* dest, const void* src, size_t count) BA_CXX_NOEXCEPT;
|
||||
void* memmove(void* dest, const void* src, size_t count) BA_CXX_NOEXCEPT;
|
||||
void* memset(void* dest, int value, size_t count) BA_CXX_NOEXCEPT;
|
||||
|
||||
BA_CXX_NODISCARD char* strcat(char* BA_C_RESTRICT dest, const char* BA_C_RESTRICT src) BA_CXX_NOEXCEPT;
|
||||
BA_CXX_NODISCARD char* strchr(const char* str, int ch) BA_CXX_NOEXCEPT;
|
||||
BA_CXX_NODISCARD char* strcpy(char* BA_C_RESTRICT dest, const char* BA_C_RESTRICT src) BA_CXX_NOEXCEPT;
|
||||
BA_CXX_NODISCARD size_t strlen(const char* str) BA_CXX_NOEXCEPT;
|
||||
|
||||
BA_EXTERN_C_END
|
9
targets/_any/stdlib/include/sys/types.h
Normal file
9
targets/_any/stdlib/include/sys/types.h
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BAD_APPLE_OS_SYS_TYPES_H_INCLUDED)
|
||||
#define BAD_APPLE_OS_SYS_TYPES_H_INCLUDED
|
||||
|
||||
typedef int pid_t;
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_SYS_TYPES_H_INCLUDED)
|
7
targets/_any/stdlib/include/time.h
Normal file
7
targets/_any/stdlib/include/time.h
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BAD_APPLE_OS_TIME_H_INCLUDED)
|
||||
#define BAD_APPLE_OS_TIME_H_INCLUDED
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_TIME_H_INCLUDED)
|
22
targets/_any/stdlib/include/unistd.h
Normal file
22
targets/_any/stdlib/include/unistd.h
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BAD_APPLE_OS_UNISTD_H_INCLUDED)
|
||||
#define BAD_APPLE_OS_UNISTD_H_INCLUDED
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "./detail/common.h"
|
||||
|
||||
BA_EXTERN_C_BEGIN
|
||||
|
||||
pid_t fork() BA_CXX_NOEXCEPT;
|
||||
int execv(const char* pathname, char* const argv[]) BA_CXX_NOEXCEPT;
|
||||
int execve(const char* pathname, char* const argv[], char* const envp[]) BA_CXX_NOEXCEPT;
|
||||
int execvp(const char* file, char* const argv[]) BA_CXX_NOEXCEPT;
|
||||
pid_t getpid() BA_CXX_NOEXCEPT;
|
||||
|
||||
BA_EXTERN_C_END
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_UNISTD_H_INCLUDED)
|
@ -11,7 +11,7 @@ kernel_env.Append(CFLAGS = ['-ffreestanding'])
|
||||
kernel_env.Append(CPPDEFINES = ['__baos_kernel_source__=1'])
|
||||
kernel_env.Append(CXXFLAGS = ['-ffreestanding', '-fno-exceptions', '-fno-rtti', '-std=c++20'])
|
||||
kernel_env.Append(LINKFLAGS = ['-T', kernel_env.File('linker.ld').abspath, '-ffreestanding', '-nostdlib', '-mcmodel=large', '-mno-red-zone', '-mno-mmx', '-mno-sse', '-mno-sse2'])
|
||||
kernel_env.Append(CPPPATH = ['#targets/_any/include', '#bastl/include', 'include', '/usr/include/efi', '#targets/_any/kernel/include'])
|
||||
kernel_env.Append(CPPPATH = ['#targets/_any/include', '#bastl/include', 'include', '/usr/include/efi', '#targets/_any/kernel/include', '#targets/_any/stdlib/include'])
|
||||
|
||||
def get_crt_object(name: str) -> str:
|
||||
import subprocess
|
||||
|
@ -213,7 +213,7 @@ void kernel_main()
|
||||
|
||||
for (const MemoryRange& range : ranges)
|
||||
{
|
||||
// std::printf("Start: 0x%lX, Pages: %ld, Type: %s\n", range.pageBase << 12, range.numPages, memoryTypeName(range.type));
|
||||
std::printf("Start: 0x%lX, Pages: %ld, Type: %s\n", range.pageBase << 12, range.numPages, memoryTypeName(range.type));
|
||||
}
|
||||
|
||||
if (!picsInited)
|
||||
|
Loading…
x
Reference in New Issue
Block a user