get_filename_component(PackageName ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(${PackageName})

add_library(${PROJECT_NAME} STATIC)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20)

file(GLOB_RECURSE BIN2CPPLIB_SOURCES
        CONFIGURE_DEPENDS
        ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
)

file(GLOB_RECURSE BIN2CPPLIB_HEADERS
        CONFIGURE_DEPENDS
        ${CMAKE_CURRENT_SOURCE_DIR}/*.h
        ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp
)

file(GLOB_RECURSE BIN2CPPLIB_OTHERS
        CONFIGURE_DEPENDS
        ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp.in
)

target_sources(${PROJECT_NAME}
    PRIVATE
        ${BIN2CPPLIB_SOURCES}
    PUBLIC
        FILE_SET HEADERS
        BASE_DIRS
            ${CMAKE_CURRENT_SOURCE_DIR}/Include
        FILES
            ${BIN2CPPLIB_HEADERS}
)

target_link_libraries(${PROJECT_NAME}
        PRIVATE
                Bin2CPPCompileAndLinkFlags
        PUBLIC
                quill::quill
                $<$<CONFIG:Debug,RelWithDebInfo>:cpptrace::cpptrace>
                magic_enum::magic_enum)

target_compile_definitions(${PROJECT_NAME}
        PUBLIC
                QUILL_DISABLE_NON_PREFIXED_MACROS)

set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/MimallocImpl.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Src FILES ${BIN2CPPLIB_SOURCES} ${BIN2CPPLIB_HEADERS} ${BIN2CPPLIB_OTHERS})

set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Bin2CPP/${ParentFolder})