From 7eb59b5c03cfeb3113f6f464ead96d379906701a Mon Sep 17 00:00:00 2001 From: Xamora Date: Mon, 14 Sep 2026 17:34:13 +0200 Subject: [PATCH] Makefile done, main to test, ft_strlen done --- Makefile | 38 ++++++++++++++++++++++++++++++++++++++ main.c | 7 +++++++ main.h | 6 ++++++ src/ft_strlen.s | 29 +++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 Makefile create mode 100644 main.c create mode 100644 main.h create mode 100644 src/ft_strlen.s diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f85d629 --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ +CC := gcc +AS := nasm +ASFLAGS := -g -Wall +CFLAGS := -g -Wall -Wextra -Wno-override-init -std=c2x +MAIN := $(wildcard *.c) +SRC := $(wildcard src/*.s) +OBJ_DIR := build +OBJ_CC := $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o, $(MAIN))) +OBJ_AS := $(addprefix $(OBJ_DIR)/, $(patsubst %.s,%.o, $(SRC))) +DIR := . +NAME := main +LIB_NAME:= asm + +LD := $(CC) +LDFLAGS := -L$(OBJ_DIR) -l$(LIB_NAME) + + +all: $(NAME) + +$(NAME): $(OBJ_CC) $(OBJ_AS) + ar rcs $(OBJ_DIR)/lib$(LIB_NAME).a $(OBJ_AS) + $(LD) $(OBJ_CC) $(LDFLAGS) -o $(DIR)/$(NAME) + +$(OBJ_DIR)/%.o: %.c + @mkdir -p $(@D) + $(CC) $(CFLAGS) -c -o $@ $< + +$(OBJ_DIR)/%.o: %.s + @mkdir -p $(@D) + $(AS) $(ASFLAGS) -f elf64 $< -o $@ + +clean: + @rm -f $(NAME) + @rm -rf $(OBJ_DIR) + +re: + @make --no-print clean + @make --no-print all diff --git a/main.c b/main.c new file mode 100644 index 0000000..bb12edd --- /dev/null +++ b/main.c @@ -0,0 +1,7 @@ +#include "main.h" + +int main(void) { + size_t size = ft_strlen("test\n"); + printf("size: %ld\n", size); + return 0; +} diff --git a/main.h b/main.h new file mode 100644 index 0000000..41b0c97 --- /dev/null +++ b/main.h @@ -0,0 +1,6 @@ +#pragma once + +#include +#include + +extern size_t ft_strlen(const char *s); diff --git a/src/ft_strlen.s b/src/ft_strlen.s new file mode 100644 index 0000000..f0c6aa7 --- /dev/null +++ b/src/ft_strlen.s @@ -0,0 +1,29 @@ +bits 64 + +%define STDOUT 1 +%define SYS_WRITE 1 +%define SYS_EXIT 60 + +section .text + global ft_strlen + ft_strlen: + + ; empilement + push rbp + + ; code + mov rbx, rdi + mov rsi, -1 + + loop: + inc rsi + mov al, [rbx + rsi] + cmp al, 0 + jne loop + + ; rétablissement + pop rbp + + ; return + mov rax, rsi + ret