newoption { trigger = "graphics", value = "OPENGL_VERSION", description = "version of OpenGL to build raylib against", allowed = { { "opengl11", "OpenGL 1.1"}, { "opengl21", "OpenGL 2.1"}, { "opengl33", "OpenGL 3.3"}, { "opengl43", "OpenGL 4.3"}, { "openges2", "OpenGL ES2"}, { "openges3", "OpenGL ES3"} }, default = "opengl33" } function download_progress(total, current) local ratio = current / total; ratio = math.min(math.max(ratio, 0), 1); local percent = math.floor(ratio * 100); print("Download progress (" .. percent .. "%/100%)") end function check_raylib() os.chdir("external") if(os.isdir("raylib-master") == false) then if(not os.isfile("raylib-master.zip")) then print("Raylib not found, downloading from github") local result_str, response_code = http.download("https://github.com/raysan5/raylib/archive/refs/heads/master.zip", "raylib-master.zip", { progress = download_progress, headers = { "From: Premake", "Referer: Premake" } }) end print("Unzipping to " .. os.getcwd()) zip.extract("raylib-master.zip", os.getcwd()) os.remove("raylib-master.zip") end os.chdir("../") end function build_externals() print("calling externals") check_raylib() end function platform_defines() filter {"configurations:Debug or Release"} defines{"PLATFORM_DESKTOP"} filter {"configurations:Debug_RGFW or Release_RGFW"} defines{"PLATFORM_DESKTOP_RGFW"} filter {"options:graphics=opengl43"} defines{"GRAPHICS_API_OPENGL_43"} filter {"options:graphics=opengl33"} defines{"GRAPHICS_API_OPENGL_33"} filter {"options:graphics=opengl21"} defines{"GRAPHICS_API_OPENGL_21"} filter {"options:graphics=opengl11"} defines{"GRAPHICS_API_OPENGL_11"} filter {"options:graphics=openges3"} defines{"GRAPHICS_API_OPENGL_ES3"} filter {"options:graphics=openges2"} defines{"GRAPHICS_API_OPENGL_ES2"} filter {"system:macosx"} disablewarnings {"deprecated-declarations"} filter {"system:linux"} defines {"_GLFW_X11"} defines {"_GNU_SOURCE"} -- This is necessary, otherwise compilation will fail since -- there is no CLOCK_MONOTOMIC. raylib claims to have a workaround -- to compile under c99 without -D_GNU_SOURCE, but it didn't seem -- to work. raylib's Makefile also adds this flag, probably why it went -- unnoticed for so long. -- It compiles under c11 without -D_GNU_SOURCE, because c11 requires -- to have CLOCK_MONOTOMIC -- See: https://github.com/raysan5/raylib/issues/2729 filter{} end -- if you don't want to download raylib, then set this to false, and set the raylib dir to where you want raylib to be pulled from, must be full sources. downloadRaylib = true raylib_dir = "external/raylib-master" workspaceName = 'MyGame' baseName = path.getbasename(path.getdirectory(os.getcwd())); --if (baseName ~= 'raylib-quickstart') then workspaceName = baseName --end if (os.isdir('build_files') == false) then os.mkdir('build_files') end if (os.isdir('external') == false) then os.mkdir('external') end workspace (workspaceName) location "../" configurations { "Debug", "Release", "Debug_RGFW", "Release_RGFW"} platforms { "x64", "x86", "ARM64"} defaultplatform ("x64") filter "configurations:Debug or Debug_RGFW" defines { "DEBUG" } symbols "On" filter "configurations:Release or Release_RGFW" defines { "NDEBUG" } optimize "On" filter { "platforms:x64" } architecture "x86_64" filter { "platforms:Arm64" } architecture "ARM64" filter {} targetdir "bin/%{cfg.buildcfg}/" if (downloadRaylib) then build_externals() end startproject(workspaceName) project (workspaceName) kind "ConsoleApp" location "build_files/" targetdir "../bin/%{cfg.buildcfg}" filter {"system:windows", "configurations:Release or Release_RGFW", "action:gmake*"} kind "WindowedApp" buildoptions { "-Wl,--subsystem,windows" } filter {"system:windows", "configurations:Release or Release_RGFW", "action:vs*"} kind "WindowedApp" entrypoint "mainCRTStartup" filter "action:vs*" debugdir "$(SolutionDir)" filter{} vpaths { ["Header Files/*"] = { "../include/**.h", "../include/**.hpp", "../src/**.h", "../src/**.hpp"}, ["Source Files/*"] = {"../src/**.c", "src/**.cpp"}, } files {"../src/**.c", "../src/**.cpp", "../src/**.h", "../src/**.hpp", "../include/**.h", "../include/**.hpp"} includedirs { "../src" } includedirs { "../include" } links {"raylib"} cdialect "C17" cppdialect "C++17" includedirs {raylib_dir .. "/src" } includedirs {raylib_dir .."/src/external" } includedirs { raylib_dir .."/src/external/glfw/include" } flags { "ShadowedVariables"} platform_defines() filter "action:vs*" defines{"_WINSOCK_DEPRECATED_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS"} dependson {"raylib"} links {"raylib.lib"} characterset ("Unicode") buildoptions { "/Zc:__cplusplus" } filter "system:windows" defines{"_WIN32"} links {"winmm", "gdi32", "opengl32"} libdirs {"../bin/%{cfg.buildcfg}"} filter "system:linux" links {"pthread", "m", "dl", "rt", "X11"} filter "system:macosx" links {"OpenGL.framework", "Cocoa.framework", "IOKit.framework", "CoreFoundation.framework", "CoreAudio.framework", "CoreVideo.framework", "AudioToolbox.framework"} filter{} project "raylib" kind "StaticLib" platform_defines() location "build_files/" language "C" targetdir "../bin/%{cfg.buildcfg}" filter "action:vs*" defines{"_WINSOCK_DEPRECATED_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS"} characterset ("Unicode") buildoptions { "/Zc:__cplusplus" } filter{} includedirs {raylib_dir .. "/src", raylib_dir .. "/src/external/glfw/include" } vpaths { ["Header Files"] = { raylib_dir .. "/src/**.h"}, ["Source Files/*"] = { raylib_dir .. "/src/**.c"}, } files {raylib_dir .. "/src/*.h", raylib_dir .. "/src/*.c"} removefiles {raylib_dir .. "/src/rcore_*.c"} filter { "system:macosx", "files:" .. raylib_dir .. "/src/rglfw.c" } compileas "Objective-C" filter{}