-- Phanes build configuration VERSION = "1.0.0" -- Override with specific platform if necessary PLATFORM = os.target() -- architecture. ARCH = "x86_64" -- SSE options: -- SSE4: SSE -- AVX: AVX -- AVX2: AVX2 -- No SSE: FPU -- None: Automatically detect SSE during build SSE = "None" phanesRoot = path.getabsolute(".") phanesBin = path.join(phanesRoot, "bin") phanesInt = path.join(phanesRoot, ".int") phanesBuildFiles = path.join(phanesRoot, "build") PhanesEngine = path.join(phanesRoot, "Engine") PhanesRuntime = path.join(PhanesEngine, "Source/Runtime") PhanesThirdParty = path.join(PhanesEngine, "Source/ThirdParty") workspace "PhanesEngine" cppdialect "C++20" architecture (ARCH) toolset "gcc" flags { "MultiProcessorCompile" } clangtidy "On" debugger "gdb" startproject "MathTestFPU" configurations { "Debug", "Release" } function linux_sse() if SSE == "SSE" then defines {"P_SSE__"} buildoptions {"-msse4", "-msse2", "-msse3"} elseif SSE == "AVX" then defines { "P_AVX__" } buildoptions {"-mavx", "-msse4", "-msse2", "-msse3"} elseif SSE == "AVX2" then defines { "P_AVX2__" } buildoptions {"-mavx2", "-mavx", "-msse4", "-msse2", "-msse3"} elseif SSE == "FPU" then defines { "P_FORCE_FPU" } end end function boilerplate() language "C++" location (phanesBuildFiles .. "/%{prj.name}") targetdir (phanesBin .. "/" .. VERSION .. "/%{cfg.buildcfg}/%{prj.name}") objdir (phanesInt .. "/" .. VERSION .. "/%{cfg.buildcfg}/%{prj.name}") if PLATFORM == "linux" then defines { "P_LINUX_BUILD" } buildoptions {"-Wall", "-Wextra", "-Werror"} linux_sse() buildoptions { "-Wno-unused-parameter" , "-fms-extensions" } end filter "configurations:Debug" defines { "DEBUG", "TRACE", "P_DEBUG"} symbols "On" buildmessage("Building %{prj.name} in debug mode") filter "configurations:Release" defines { "NDEBUG", "P_RELEASE" } linktimeoptimization "On" optimize "On" intrinsics "On" buildmessage("Building %{prj.name} in release mode") filter{} end function third_party_boilerplate() language "C++" location (phanesBuildFiles .. "/%{prj.name}") targetdir (phanesBin .. "/" .. VERSION .. "/%{cfg.buildcfg}/%{prj.name}") objdir (phanesInt .. "/" .. VERSION .. "/%{cfg.buildcfg}/%{prj.name}") if PLATFORM == "linux" then buildoptions {"-Wall", "-Wextra", "-Werror"} linux_sse() end filter "configurations:Debug" defines { "DEBUG", "TRACE", "P_DEBUG"} symbols "On" buildmessage("Building %{prj.name} in debug mode") filter "configurations:Release" defines { "NDEBUG", "P_RELEASE" } linktimeoptimization "On" optimize "On" intrinsics "On" buildmessage("Building %{prj.name} in release mode") filter{} end -- actions function action_clean() os.rmdir(phanesBin) os.rmdir(phanesInt) os.rmdir(phanesBuildFiles) os.remove(phanesRoot .. "/Makefile") end newaction { trigger = "clean", description = "Clean the build", execute = action_clean, } -- includeProjects here include (phanesRoot .. "/Engine/Source/Runtime/Core/premake5.lua") include (phanesRoot .. "/DevPlayground/premake5.lua") include (PhanesRuntime .. "/Core/Tests/Math/MathTestFPU/premake5.lua")