cmake_minimum_required(VERSION 3.16)
project(libvec LANGUAGES C)
set(CMAKE_C_STANDARD 23)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

add_library(libvec STATIC
    src/libvec.c
    src/lib/char/char.c
    src/lib/utils/utils.c
    # Add your other types here as you implement them:
    # src/lib/float/float.c
    # src/lib/int/int.c
    # src/lib/string/string.c
)

target_include_directories(libvec
    # PRIVATE: Internal headers under src/lib are only visible
    # to files being compiled into libvec (char.c, utils.c, libvec.c).
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/src/lib

    # PUBLIC: Consumers (and test_runner) are granted access ONLY to include/
    PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}/include
)

add_executable(test_runner src/main.c)

# Linking libvec privately gives test_runner access to include/libvec.h,
# but strictly hides src/lib/char/char.h and src/lib/utils/utils.h.
target_link_libraries(test_runner PRIVATE libvec)
