require "plugins/ecc"

workspace "SakuraVNE"
    architecture "x64"
    startproject "SakuraVNE"

    configurations{
        "Debug",
        "Release"
    }

    outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"

    IncludeDir = {}
    IncludeDir["ImGui"] = "/libs/imgui"
    IncludeDir["ImGuiNodeEditor"] = "/libs/imgui-node-editor"
    IncludeDir["SDL3"] = "/libs/sdl3"
    IncludeDir["spdlog"] = "/libs/spdlog"

    include "libs/imgui"
    include "libs/imgui-node-editor"

project "SakuraVNE"
    kind "ConsoleApp"
    language "C++"
    cppdialect "C++20"

    ignoredefaultlibraries { "MSVCRT" }

    targetdir ("build/bin/" .. outputdir .. "/%{prj.name}")
    objdir ("build/bin-int/" ..outputdir .. "/%{prj.name}")

    local root_path = os.getcwd():gsub("\\", "/")

    prebuildcommands {
        "echo ==== Building SDL3 via CMake ====",
        
        "cmake -E make_directory \"" .. root_path .. "/build/bin/" .. outputdir .. "/SDL3\"",
        
        "cmake -S libs/sdl3 -B \"" .. root_path .. "/build/bin-int/" .. outputdir .. "/SDL3\" -DCMAKE_BUILD_TYPE=Release " ..
        "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=\"" .. root_path .. "/build/bin/" .. outputdir .. "/SDL3\" " ..
        "-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=\"" .. root_path .. "/build/bin/" .. outputdir .. "/SDL3\" " ..
        "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=\"" .. root_path .. "/build/bin/" .. outputdir .. "/SDL3\"",
        
        "cmake --build \"" .. root_path .. "/build/bin-int/" .. outputdir .. "/SDL3\" --config Release -j"
    }

    prebuildcommands{
        "echo ==== Building spdlog via CMake ====",
        "cmake -E make_directory \"" .. root_path .. "/build/bin/" ..outputdir .. "/spdlog\"",
        "cmake -S libs/spdlog -B \"" .. root_path .. "/build/bin-int/" ..outputdir .. "/spdlog\" -DCMAKE_BUILD_TYPE=Release",
        "cmake --build \"" .. root_path .. "/build/bin-int/" ..outputdir .. "/spdlog\"",
        "cmake -E copy \"" .. root_path .. "/build/bin-int/" .. outputdir .. "/spdlog/\"libspdlog* \"" .. root_path .. "/build/bin/" .. outputdir .. "/spdlog/\""  
    }


    files{
        "%{prj.name}/src/**.h",
        "%{prj.name}/src/**.cpp"
    }

    includedirs{
        "%{prj.name}/src",
        "libs/spdlog/include",
        "libs/imgui",
        "libs/imgui/misc",
        "libs/imgui/backends",
        "libs/imgui-node-editor",
        "libs/sdl3/include"
    }

    libdirs{
        "build/bin/" .. outputdir .. "/ImGui",
	    "build/bin/" .. outputdir .. "/ImGuiNodeEditor",
        "build/bin/" .. outputdir .. "/SDL3",
        "build/bin/" .. outputdir .. "/spdlog"
    }

    links{
        "ImGui",
        "ImGuiNodeEditor",
        "SDL3",
        "spdlog"
    }

    filter "system:windows"
        system "windows"
        cppdialect "C++20"
        staticruntime "off"
        runtime "Release"
        systemversion "latest"

        defines{
            "PLATFORM_WINDOWS"
        }  

    filter "system:linux"
        system "linux"
        cppdialect "C++20"
        staticruntime "off"
        runtime "Release"
        systemversion "latest"

        defines{
            "PLATFORM_LINUX"
        }
        
        links {
            "dl",      
            "pthread"  
        }    

    filter "configurations:Debug"
        defines "DEBUG"
        symbols "On"

    filter "configurations:Release"
        defines "RELEASE"
        optimize "On"
        symbols "off"