mirror of
https://github.com/Fennix-Project/Userspace.git
synced 2025-07-10 14:49:22 +00:00
Update userspace
This commit is contained in:
@ -4,13 +4,13 @@
|
||||
#include <stddef.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
__attribute__((visibility("hidden"))) int printf_libinit(const char *format, ...);
|
||||
__attribute__((visibility("hidden"))) int vprintf_libinit(const char *format, va_list arg);
|
||||
__attribute__((visibility("hidden"))) int sprintf_libinit(char *s, const char *format, ...);
|
||||
__attribute__((visibility("hidden"))) int vsprintf_libinit(char *s, const char *format, va_list arg);
|
||||
__attribute__((visibility("hidden"))) int snprintf_libinit(char *s, size_t count, const char *format, ...);
|
||||
__attribute__((visibility("hidden"))) int vsnprintf_libinit(char *s, size_t count, const char *format, va_list arg);
|
||||
int printf_libinit(const char *format, ...);
|
||||
int vprintf_libinit(const char *format, va_list arg);
|
||||
int sprintf_libinit(char *s, const char *format, ...);
|
||||
int vsprintf_libinit(char *s, const char *format, va_list arg);
|
||||
int snprintf_libinit(char *s, size_t count, const char *format, ...);
|
||||
int vsnprintf_libinit(char *s, size_t count, const char *format, va_list arg);
|
||||
|
||||
void init_log(const char *fmt, ...);
|
||||
__attribute__((visibility("default"))) void init_log(const char *fmt, ...);
|
||||
|
||||
#endif // !__FENNIX_LIBS_INIT_H__
|
||||
|
@ -3,49 +3,6 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
enum KCtl
|
||||
{
|
||||
KCTL_NULL,
|
||||
|
||||
KCTL_GET_PID,
|
||||
KCTL_GET_TID,
|
||||
KCTL_GET_UID,
|
||||
KCTL_GET_GID,
|
||||
|
||||
/**
|
||||
* @brief Get the page size
|
||||
*/
|
||||
KCTL_GET_PAGE_SIZE,
|
||||
|
||||
/**
|
||||
* @brief Check whether the current thread is critical
|
||||
*/
|
||||
KCTL_IS_CRITICAL,
|
||||
|
||||
/**
|
||||
* @brief Register an ELF library
|
||||
* @fn int RegisterELFLib(char *Identifier, char *Path)
|
||||
*/
|
||||
KCTL_REGISTER_ELF_LIB,
|
||||
|
||||
/**
|
||||
* @brief Get an ELF library
|
||||
* @fn uintptr_t GetELFLib(char *Identifier);
|
||||
*/
|
||||
KCTL_GET_ELF_LIB_FILE,
|
||||
|
||||
/**
|
||||
* @brief Get an ELF library
|
||||
* @fn uintptr_t GetELFLib(char *Identifier);
|
||||
*/
|
||||
KCTL_GET_ELF_LIB_MEMORY_IMAGE,
|
||||
|
||||
KCTL_GET_FRAMEBUFFER_BUFFER,
|
||||
KCTL_GET_FRAMEBUFFER_WIDTH,
|
||||
KCTL_GET_FRAMEBUFFER_HEIGHT,
|
||||
KCTL_GET_FRAMEBUFFER_SIZE,
|
||||
};
|
||||
|
||||
long DoCtl(uint64_t Command, uint64_t Arg1, uint64_t Arg2, uint64_t Arg3, uint64_t Arg4);
|
||||
|
||||
uintptr_t KrnlRequestPages(size_t Count);
|
||||
|
@ -5,21 +5,21 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void *KernelPrivate;
|
||||
void *KernelPrivate;
|
||||
} File;
|
||||
|
||||
enum FileFlags
|
||||
{
|
||||
FILE_READ = 1,
|
||||
FILE_WRITE = 2,
|
||||
FILE_APPEND = 4,
|
||||
FILE_CREATE = 8,
|
||||
FILE_TRUNCATE = 16,
|
||||
FILE_EXCLUSIVE = 32,
|
||||
FILE_DIRECTORY = 64,
|
||||
FILE_SYMLINK = 128,
|
||||
FILE_NONBLOCK = 256,
|
||||
FILE_CLOEXEC = 512,
|
||||
FILE_READ = 1,
|
||||
FILE_WRITE = 2,
|
||||
FILE_APPEND = 4,
|
||||
FILE_CREATE = 8,
|
||||
FILE_TRUNCATE = 16,
|
||||
FILE_EXCLUSIVE = 32,
|
||||
FILE_DIRECTORY = 64,
|
||||
FILE_SYMLINK = 128,
|
||||
FILE_NONBLOCK = 256,
|
||||
FILE_CLOEXEC = 512,
|
||||
};
|
||||
|
||||
File *FileOpen(const char *Path, uint64_t Flags);
|
||||
|
@ -7,7 +7,7 @@ OBJECT_NAME=lib$(NAME).a
|
||||
|
||||
OUTPUT_DIR=../../out/lib/
|
||||
|
||||
CC = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)gcc
|
||||
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
|
||||
|
||||
CRTBEGIN_PATH = $(shell $(CC) -print-file-name=libgcc.a)
|
||||
|
||||
|
@ -3,23 +3,23 @@ include ../../../Makefile.conf
|
||||
|
||||
NAME=init
|
||||
|
||||
OBJECT_NAME=lib$(NAME).so
|
||||
SO_NAME=$(OBJECT_NAME)
|
||||
ifeq ($(USERSPACE_STATIC_LIBS), 1)
|
||||
OBJECT_NAME := lib$(NAME).a
|
||||
else
|
||||
OBJECT_NAME := lib$(NAME).so
|
||||
endif
|
||||
|
||||
OUTPUT_DIR=../../out/lib/
|
||||
SYSROOT = --sysroot=../../out/
|
||||
|
||||
CC = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)gcc
|
||||
AS = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)as
|
||||
AR = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)ar
|
||||
OBJDUMP = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)objdump
|
||||
NASM = /usr/bin/nasm
|
||||
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
|
||||
AS = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)as
|
||||
AR = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)ar
|
||||
|
||||
C_SOURCES = $(shell find ./ -type f -name '*.c')
|
||||
CPP_SOURCES = $(shell find ./ -type f -name '*.cpp')
|
||||
S_SOURCES = $(shell find ./ -type f -name '*.S')
|
||||
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
|
||||
OBJ = ${C_SOURCES:.c=.o} ${CPP_SOURCES:.cpp=.o} ${ASM_SOURCES:.asm=.o} ${S_SOURCES:.S=.o}
|
||||
OBJ = ${C_SOURCES:.c=.o} ${CPP_SOURCES:.cpp=.o} ${S_SOURCES:.S=.o}
|
||||
|
||||
ifeq ($(OSARCH), amd64)
|
||||
ASM_ARCH := elf64
|
||||
@ -27,16 +27,21 @@ else ifeq ($(OSARCH), i386)
|
||||
ASM_ARCH := elf32
|
||||
endif
|
||||
|
||||
SIMD_FLAGS := -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -mno-sse4 -mno-avx -mno-avx2 -mno-avx512f
|
||||
CFLAGS := -fvisibility=hidden -fPIC -fPIE -I../include -I../../libc/include
|
||||
|
||||
CFLAGS := -fPIC -fPIE -I../include -I../../libc/include $(SIMD_FLAGS)
|
||||
ifeq ($(DEBUG), 1)
|
||||
CFLAGS += -DDEBUG -ggdb3 -O0 -fdiagnostics-color=always -fverbose-asm
|
||||
endif
|
||||
|
||||
build: $(OBJECT_NAME)
|
||||
|
||||
$(OBJECT_NAME): $(OBJ)
|
||||
$(info Linking $@)
|
||||
$(CC) -nostdlib -shared -fPIC -fPIE -Wl,-soname,$(SO_NAME) $(SYSROOT) $(OBJ) -o $(OUTPUT_DIR)$@
|
||||
$(OBJDUMP) -d $(OUTPUT_DIR)$@ > file_dump.map
|
||||
ifeq ($(USERSPACE_STATIC_LIBS), 1)
|
||||
$(AR) rcs $(OUTPUT_DIR)$@ $(OBJ)
|
||||
else
|
||||
$(CC) -nostdlib -shared -fPIC -fPIE -Wl,-soname,$(OBJECT_NAME) $(SYSROOT) $(OBJ) -o $(OUTPUT_DIR)$@
|
||||
endif
|
||||
|
||||
%.o: %.c
|
||||
$(info Compiling $<)
|
||||
@ -50,9 +55,5 @@ $(OBJECT_NAME): $(OBJ)
|
||||
$(info Compiling $<)
|
||||
$(AS) -c $< -o $@
|
||||
|
||||
%.o: %.asm
|
||||
$(info Compiling $<)
|
||||
$(NASM) $< -f $(ASM_ARCH) -o $@
|
||||
|
||||
clean:
|
||||
rm -f file_dump.map $(OBJ)
|
||||
rm -f $(OBJ)
|
||||
|
@ -1,13 +1,22 @@
|
||||
#include <libinit/init.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include "printf.h"
|
||||
|
||||
void init_log(const char *fmt, ...)
|
||||
{
|
||||
printf_libinit("\eCCCCCC[\e0088FFinit\eCCCCCC] \eAAAAAA");
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vprintf_libinit(fmt, args);
|
||||
va_end(args);
|
||||
printf_libinit("\eCCCCCC");
|
||||
static short log_lock = 0;
|
||||
while (log_lock)
|
||||
usleep(1);
|
||||
__sync_synchronize();
|
||||
log_lock = 1;
|
||||
|
||||
printf_libinit("\eCCCCCC[\e0088FFinit\eCCCCCC] \eAAAAAA");
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vprintf_libinit(fmt, args);
|
||||
va_end(args);
|
||||
printf_libinit("\eCCCCCC");
|
||||
|
||||
log_lock = 0;
|
||||
__sync_synchronize();
|
||||
}
|
||||
|
@ -3,18 +3,23 @@ include ../../../Makefile.conf
|
||||
|
||||
NAME=ssp
|
||||
|
||||
OBJECT_NAME=lib$(NAME).a
|
||||
ifeq ($(USERSPACE_STATIC_LIBS), 1)
|
||||
OBJECT_NAME := lib$(NAME).a
|
||||
else
|
||||
OBJECT_NAME := lib$(NAME).so
|
||||
endif
|
||||
|
||||
OUTPUT_DIR=../../out/lib/
|
||||
SYSROOT = --sysroot=../../out/
|
||||
|
||||
CC = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)gcc
|
||||
AR = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)ar
|
||||
OBJDUMP = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)objdump
|
||||
NASM = /usr/bin/nasm
|
||||
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
|
||||
AS = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)as
|
||||
AR = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)ar
|
||||
|
||||
C_SOURCES = $(shell find ./ -type f -name '*.c')
|
||||
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
|
||||
OBJ = ${C_SOURCES:.c=.o} ${ASM_SOURCES:.asm=.o}
|
||||
CPP_SOURCES = $(shell find ./ -type f -name '*.cpp')
|
||||
S_SOURCES = $(shell find ./ -type f -name '*.S')
|
||||
OBJ = ${C_SOURCES:.c=.o} ${CPP_SOURCES:.cpp=.o} ${S_SOURCES:.S=.o}
|
||||
|
||||
ifeq ($(OSARCH), amd64)
|
||||
ASM_ARCH := elf64
|
||||
@ -22,14 +27,21 @@ else ifeq ($(OSARCH), i386)
|
||||
ASM_ARCH := elf32
|
||||
endif
|
||||
|
||||
CFLAGS := -fPIC -I../include -I../../libc/include
|
||||
CFLAGS := -fvisibility=hidden -fPIC -I../include -I../../libc/include
|
||||
|
||||
ifeq ($(DEBUG), 1)
|
||||
CFLAGS += -DDEBUG -ggdb3 -O0 -fdiagnostics-color=always -fverbose-asm
|
||||
endif
|
||||
|
||||
build: $(OBJECT_NAME)
|
||||
|
||||
$(OBJECT_NAME): $(OBJ)
|
||||
$(info Linking $@)
|
||||
ifeq ($(USERSPACE_STATIC_LIBS), 1)
|
||||
$(AR) rcs $(OUTPUT_DIR)$@ $(OBJ)
|
||||
$(OBJDUMP) -d $(OUTPUT_DIR)$@ > file_dump.map
|
||||
else
|
||||
$(CC) -nostdlib -shared -fPIC -fPIE -Wl,-soname,$(OBJECT_NAME) $(SYSROOT) $(OBJ) -o $(OUTPUT_DIR)$@
|
||||
endif
|
||||
|
||||
%.o: %.c
|
||||
$(info Compiling $<)
|
||||
@ -39,9 +51,9 @@ $(OBJECT_NAME): $(OBJ)
|
||||
$(info Compiling $<)
|
||||
$(CC) $(CFLAGS) -std=c++20 -c $< -o $@
|
||||
|
||||
%.o: %.asm
|
||||
%.o: %.S
|
||||
$(info Compiling $<)
|
||||
$(NASM) $< -f $(ASM_ARCH) -o $@
|
||||
$(AS) -c $< -o $@
|
||||
|
||||
clean:
|
||||
rm -f file_dump.map $(OBJ)
|
||||
rm -f $(OBJ)
|
||||
|
@ -6,30 +6,39 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
__UINTPTR_TYPE__ __stack_chk_guard = 0;
|
||||
|
||||
#ifndef PUBLIC
|
||||
#define PUBLIC __attribute__((visibility("default")))
|
||||
#endif // !PUBLIC
|
||||
|
||||
#ifndef PRIVATE
|
||||
#define PRIVATE __attribute__((visibility("hidden")))
|
||||
#endif // !PRIVATE
|
||||
|
||||
PUBLIC __UINTPTR_TYPE__ __stack_chk_guard = 0;
|
||||
|
||||
static void __attribute__((constructor, no_stack_protector)) __guard_setup(void)
|
||||
{
|
||||
if (__stack_chk_guard == 0)
|
||||
__stack_chk_guard = STACK_CHK_GUARD_VALUE;
|
||||
if (__stack_chk_guard == 0)
|
||||
__stack_chk_guard = STACK_CHK_GUARD_VALUE;
|
||||
}
|
||||
|
||||
__attribute__((weak, noreturn, no_stack_protector)) void __stack_chk_fail(void)
|
||||
PUBLIC __attribute__((weak, noreturn, no_stack_protector)) void __stack_chk_fail(void)
|
||||
{
|
||||
const char *msg = "Stack smashing detected";
|
||||
__asm__ __volatile__("syscall"
|
||||
:
|
||||
: "a"(0), "D"(0x57AC)
|
||||
: "rcx", "r11", "memory");
|
||||
__builtin_unreachable();
|
||||
const char *msg = "Stack smashing detected";
|
||||
__asm__ __volatile__("syscall"
|
||||
:
|
||||
: "a"(0), "D"(0x57AC)
|
||||
: "rcx", "r11", "memory");
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
__attribute__((weak, noreturn, no_stack_protector)) void __chk_fail(void)
|
||||
PUBLIC __attribute__((weak, noreturn, no_stack_protector)) void __chk_fail(void)
|
||||
{
|
||||
const char *msg = "Buffer overflow detected";
|
||||
__asm__ __volatile__("syscall"
|
||||
:
|
||||
: "a"(0), "D"(0xF700)
|
||||
: "rcx", "r11", "memory");
|
||||
__builtin_unreachable();
|
||||
const char *msg = "Buffer overflow detected";
|
||||
__asm__ __volatile__("syscall"
|
||||
:
|
||||
: "a"(0), "D"(0xF700)
|
||||
: "rcx", "r11", "memory");
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
@ -4,15 +4,15 @@
|
||||
|
||||
long DoCtl(uint64_t Command, uint64_t Arg1, uint64_t Arg2, uint64_t Arg3, uint64_t Arg4)
|
||||
{
|
||||
return syscall5(_KernelCTL, Command, Arg1, Arg2, Arg3, Arg4);
|
||||
return syscall5(_KernelCTL, Command, Arg1, Arg2, Arg3, Arg4);
|
||||
}
|
||||
|
||||
uintptr_t KrnlRequestPages(size_t Count)
|
||||
{
|
||||
return syscall1(_RequestPages, Count);
|
||||
return syscall1(_RequestPages, Count);
|
||||
}
|
||||
|
||||
void KrnlFreePages(uintptr_t Address, size_t Count)
|
||||
{
|
||||
syscall2(_FreePages, Address, Count);
|
||||
syscall2(_FreePages, Address, Count);
|
||||
}
|
||||
|
@ -5,41 +5,41 @@
|
||||
|
||||
__attribute__((visibility("hidden"))) long __FILE_GetPageSize()
|
||||
{
|
||||
static long PageSize = 0;
|
||||
if (PageSize == 0)
|
||||
PageSize = DoCtl(KCTL_GET_PAGE_SIZE, 0, 0, 0, 0);
|
||||
return PageSize;
|
||||
static long PageSize = 0;
|
||||
if (PageSize == 0)
|
||||
PageSize = DoCtl(KCTL_GET_PAGE_SIZE, 0, 0, 0, 0);
|
||||
return PageSize;
|
||||
}
|
||||
|
||||
File *FileOpen(const char *Path, uint64_t Flags)
|
||||
{
|
||||
File *FilePtr = (File *)KrnlRequestPages(sizeof(File) / __FILE_GetPageSize() + 1);
|
||||
FilePtr->KernelPrivate = (void *)syscall2(_FileOpen, (uint64_t)Path, Flags);
|
||||
return FilePtr;
|
||||
File *FilePtr = (File *)KrnlRequestPages(sizeof(File) / __FILE_GetPageSize() + 1);
|
||||
FilePtr->KernelPrivate = (void *)syscall2(_FileOpen, (uint64_t)Path, Flags);
|
||||
return FilePtr;
|
||||
}
|
||||
|
||||
void FileClose(File *File)
|
||||
{
|
||||
syscall1(_FileClose, (uint64_t)File->KernelPrivate);
|
||||
KrnlFreePages((uintptr_t)File, sizeof(File) / __FILE_GetPageSize() + 1);
|
||||
syscall1(_FileClose, (uint64_t)File->KernelPrivate);
|
||||
KrnlFreePages((uintptr_t)File, sizeof(File) / __FILE_GetPageSize() + 1);
|
||||
}
|
||||
|
||||
uint64_t FileRead(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size)
|
||||
{
|
||||
return syscall4(_FileRead, (uint64_t)File->KernelPrivate, Offset, (uint64_t)Buffer, Size);
|
||||
return syscall4(_FileRead, (uint64_t)File->KernelPrivate, Offset, (uint64_t)Buffer, Size);
|
||||
}
|
||||
|
||||
uint64_t FileWrite(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size)
|
||||
{
|
||||
return syscall4(_FileWrite, (uint64_t)File->KernelPrivate, Offset, (uint64_t)Buffer, Size);
|
||||
return syscall4(_FileWrite, (uint64_t)File->KernelPrivate, Offset, (uint64_t)Buffer, Size);
|
||||
}
|
||||
|
||||
uint64_t FileSeek(File *File, uint64_t Offset, uint64_t Whence)
|
||||
{
|
||||
return syscall3(_FileSeek, (uint64_t)File->KernelPrivate, Offset, Whence);
|
||||
return syscall3(_FileSeek, (uint64_t)File->KernelPrivate, Offset, Whence);
|
||||
}
|
||||
|
||||
uint64_t FileStatus(File *File)
|
||||
{
|
||||
return syscall1(_FileStatus, (uint64_t)File->KernelPrivate);
|
||||
return syscall1(_FileStatus, (uint64_t)File->KernelPrivate);
|
||||
}
|
||||
|
@ -3,23 +3,23 @@ include ../../../Makefile.conf
|
||||
|
||||
NAME=sys
|
||||
|
||||
OBJECT_NAME=lib$(NAME).so
|
||||
SO_NAME=$(OBJECT_NAME)
|
||||
ifeq ($(USERSPACE_STATIC_LIBS), 1)
|
||||
OBJECT_NAME := lib$(NAME).a
|
||||
else
|
||||
OBJECT_NAME := lib$(NAME).so
|
||||
endif
|
||||
|
||||
OUTPUT_DIR=../../out/lib/
|
||||
SYSROOT = --sysroot=../../out/
|
||||
|
||||
CC = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)gcc
|
||||
AS = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)as
|
||||
AR = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)ar
|
||||
OBJDUMP = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)objdump
|
||||
NASM = /usr/bin/nasm
|
||||
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
|
||||
AS = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)as
|
||||
AR = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)ar
|
||||
|
||||
C_SOURCES = $(shell find ./ -type f -name '*.c')
|
||||
CPP_SOURCES = $(shell find ./ -type f -name '*.cpp')
|
||||
S_SOURCES = $(shell find ./ -type f -name '*.S')
|
||||
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
|
||||
OBJ = ${C_SOURCES:.c=.o} ${CPP_SOURCES:.cpp=.o} ${ASM_SOURCES:.asm=.o} ${S_SOURCES:.S=.o}
|
||||
OBJ = ${C_SOURCES:.c=.o} ${CPP_SOURCES:.cpp=.o} ${S_SOURCES:.S=.o}
|
||||
|
||||
ifeq ($(OSARCH), amd64)
|
||||
ASM_ARCH := elf64
|
||||
@ -27,16 +27,21 @@ else ifeq ($(OSARCH), i386)
|
||||
ASM_ARCH := elf32
|
||||
endif
|
||||
|
||||
SIMD_FLAGS := -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -mno-sse4 -mno-avx -mno-avx2 -mno-avx512f
|
||||
CFLAGS := -fvisibility=hidden -fPIC -I../include -I../../libc/include
|
||||
|
||||
CFLAGS := -fPIC -fPIE -I../include -I../../libc/include $(SIMD_FLAGS)
|
||||
ifeq ($(DEBUG), 1)
|
||||
CFLAGS += -DDEBUG -ggdb3 -O0 -fdiagnostics-color=always -fverbose-asm
|
||||
endif
|
||||
|
||||
build: $(OBJECT_NAME)
|
||||
|
||||
$(OBJECT_NAME): $(OBJ)
|
||||
$(info Linking $@)
|
||||
$(CC) -nostdlib -shared -fPIC -fPIE -Wl,-soname,$(SO_NAME) $(SYSROOT) $(OBJ) -o $(OUTPUT_DIR)$@
|
||||
$(OBJDUMP) -d $(OUTPUT_DIR)$@ > file_dump.map
|
||||
ifeq ($(USERSPACE_STATIC_LIBS), 1)
|
||||
$(AR) rcs $(OUTPUT_DIR)$@ $(OBJ)
|
||||
else
|
||||
$(CC) -nostdlib -shared -fPIC -fPIE -Wl,-soname,$(OBJECT_NAME) $(SYSROOT) $(OBJ) -o $(OUTPUT_DIR)$@
|
||||
endif
|
||||
|
||||
%.o: %.c
|
||||
$(info Compiling $<)
|
||||
@ -50,9 +55,5 @@ $(OBJECT_NAME): $(OBJ)
|
||||
$(info Compiling $<)
|
||||
$(AS) -c $< -o $@
|
||||
|
||||
%.o: %.asm
|
||||
$(info Compiling $<)
|
||||
$(NASM) $< -f $(ASM_ARCH) -o $@
|
||||
|
||||
clean:
|
||||
rm -f file_dump.map $(OBJ)
|
||||
rm -f $(OBJ)
|
||||
|
Reference in New Issue
Block a user