2025-12-03 05:16:23 +00:00
-- Export Compile Commands module for clangd support
require " ecc/ecc "
2024-08-14 17:09:43 -07:00
newoption
{
2025-05-18 09:05:17 -07:00
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 " } ,
2025-10-23 08:33:09 -07:00
{ " openges3 " , " OpenGL ES3 " } ,
{ " software " , " OpenGL 1.1 Software Render " }
2025-05-18 09:05:17 -07:00
} ,
default = " opengl33 "
2024-08-14 17:09:43 -07:00
}
2025-10-01 16:01:35 -07:00
newoption
{
trigger = " backend " ,
value = " BACKEND_TYPE " ,
description = " Backend Platform to use " ,
allowed = {
{ " glfw " , " GLFW " } ,
2025-10-23 08:33:09 -07:00
{ " rgfw " , " RGFW " } ,
{ " win32 " , " WIN32 " } ,
2025-10-01 16:01:35 -07:00
} ,
default = " glfw "
}
2025-11-05 20:00:58 -08:00
newoption
{
trigger = " wayland " ,
value = " WAYLAND " ,
description = " build for wayland " ,
allowed = {
{ " off " , " Off " } ,
{ " on " , " On " }
} ,
default = " off "
}
2024-08-20 16:16:17 -07:00
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
2024-08-14 17:09:43 -07:00
function platform_defines ( )
2025-10-01 16:01:35 -07:00
filter { " options:backend=glfw " }
2024-11-18 09:07:12 -08:00
defines { " PLATFORM_DESKTOP " }
2025-10-01 16:01:35 -07:00
filter { " options:backend=rgfw " }
2024-11-18 09:07:12 -08:00
defines { " PLATFORM_DESKTOP_RGFW " }
2024-08-14 17:09:43 -07:00
2025-10-23 08:33:09 -07:00
filter { " options:backend=win32 " }
defines { " PLATFORM_DESKTOP_WIN32 " }
2024-08-14 17:09:43 -07:00
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 " }
2025-10-23 08:33:09 -07:00
filter { " options:graphics=software " }
defines { " GRAPHICS_API_OPENGL_11_SOFTWARE " }
2024-08-14 17:09:43 -07:00
filter { " system:macosx " }
disablewarnings { " deprecated-declarations " }
2025-11-20 20:27:59 -03:00
filter { " system:linux " , " options:wayland=off " }
2024-08-14 17:09:43 -07:00
defines { " _GLFW_X11 " }
2025-11-20 20:27:59 -03:00
filter { " system:linux " , " options:wayland=on " }
defines { " _GLFW_WAYLAND " }
filter { }
2024-08-14 17:09:43 -07:00
end
2024-12-18 08:08:43 -08:00
-- 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 "
2024-08-14 17:09:43 -07:00
workspaceName = ' MyGame '
baseName = path.getbasename ( path.getdirectory ( os.getcwd ( ) ) ) ;
2024-08-14 18:01:58 -07:00
--if (baseName ~= 'raylib-quickstart') then
2024-08-14 17:09:43 -07:00
workspaceName = baseName
2024-08-14 18:01:58 -07:00
--end
2024-08-14 17:09:43 -07:00
if ( os.isdir ( ' build_files ' ) == false ) then
os.mkdir ( ' build_files ' )
end
2024-08-20 16:16:17 -07:00
if ( os.isdir ( ' external ' ) == false ) then
os.mkdir ( ' external ' )
end
2024-08-14 17:09:43 -07:00
workspace ( workspaceName )
location " ../ "
2025-10-01 16:01:35 -07:00
configurations { " Debug " , " Release " }
2024-08-14 17:09:43 -07:00
platforms { " x64 " , " x86 " , " ARM64 " }
defaultplatform ( " x64 " )
2025-10-01 16:01:35 -07:00
filter " configurations:Debug "
2024-08-14 17:09:43 -07:00
defines { " DEBUG " }
symbols " On "
2025-10-01 16:01:35 -07:00
filter " configurations:Release "
2024-08-14 17:09:43 -07:00
defines { " NDEBUG " }
optimize " On "
2025-10-01 16:01:35 -07:00
filter { " configurations:Release " , " action:vs* " }
linktimeoptimization " On "
2024-08-14 17:09:43 -07:00
filter { " platforms:x64 " }
architecture " x86_64 "
2025-10-24 13:11:10 +02:00
filter { " platforms:ARM64 " }
2024-08-14 17:09:43 -07:00
architecture " ARM64 "
filter { }
targetdir " bin/%{cfg.buildcfg}/ "
2024-12-18 08:08:43 -08:00
if ( downloadRaylib ) then
2024-08-14 17:09:43 -07:00
build_externals ( )
2025-05-18 09:05:17 -07:00
end
2024-08-14 17:09:43 -07:00
2024-08-20 16:16:17 -07:00
startproject ( workspaceName )
2024-08-14 17:09:43 -07:00
project ( workspaceName )
kind " ConsoleApp "
location " build_files/ "
targetdir " ../bin/%{cfg.buildcfg} "
2025-10-01 16:01:35 -07:00
filter { " system:windows " , " configurations:Release " , " action:gmake* " }
2024-11-25 09:50:12 -08:00
kind " WindowedApp "
buildoptions { " -Wl,--subsystem,windows " }
2024-10-15 19:47:15 -07:00
2025-10-01 16:01:35 -07:00
filter { " system:windows " , " configurations:Release " , " action:vs* " }
2024-08-14 17:09:43 -07:00
kind " WindowedApp "
entrypoint " mainCRTStartup "
2024-11-25 09:50:12 -08:00
filter " action:vs* "
debugdir " $(SolutionDir) "
2025-10-21 08:45:16 -07:00
filter { " action:gmake* " } -- Uncoment if you need to force StaticLib
-- buildoptions { "-static" }
2024-08-14 17:09:43 -07:00
filter { }
vpaths
{
[ " Header Files/* " ] = { " ../include/**.h " , " ../include/**.hpp " , " ../src/**.h " , " ../src/**.hpp " } ,
[ " Source Files/* " ] = { " ../src/**.c " , " src/**.cpp " } ,
2026-01-07 18:49:51 -08:00
[ " Windows Resource Files/* " ] = { " ../src/**.rc " , " ../src/**.ico " } ,
[ " Game Resource Files/* " ] = { " ../resources/** " } ,
2024-08-14 17:09:43 -07:00
}
2025-05-18 09:05:17 -07:00
2024-08-14 17:09:43 -07:00
files { " ../src/**.c " , " ../src/**.cpp " , " ../src/**.h " , " ../src/**.hpp " , " ../include/**.h " , " ../include/**.hpp " }
2025-05-18 09:01:50 -07:00
2025-05-26 15:53:34 -07:00
filter { " system:windows " , " action:vs* " }
2025-05-18 09:01:50 -07:00
files { " ../src/*.rc " , " ../src/*.ico " }
2026-01-07 18:49:51 -08:00
files { " ../resources/** " }
2025-05-18 09:01:50 -07:00
filter { }
2025-05-18 09:05:17 -07:00
2024-08-14 17:09:43 -07:00
includedirs { " ../src " }
includedirs { " ../include " }
links { " raylib " }
2025-01-14 16:21:54 -08:00
cdialect " C17 "
2024-10-15 19:47:15 -07:00
cppdialect " C++17 "
2024-08-14 17:09:43 -07:00
includedirs { raylib_dir .. " /src " }
2025-11-18 09:13:38 -08:00
2024-09-23 09:04:07 -07:00
flags { " ShadowedVariables " }
2024-08-14 17:09:43 -07:00
platform_defines ( )
filter " action:vs* "
defines { " _WINSOCK_DEPRECATED_NO_WARNINGS " , " _CRT_SECURE_NO_WARNINGS " }
dependson { " raylib " }
links { " raylib.lib " }
2024-08-20 16:16:17 -07:00
characterset ( " Unicode " )
2024-08-14 17:09:43 -07:00
buildoptions { " /Zc:__cplusplus " }
filter " system:windows "
defines { " _WIN32 " }
2024-11-18 09:07:12 -08:00
links { " winmm " , " gdi32 " , " opengl32 " }
2024-08-14 17:09:43 -07:00
libdirs { " ../bin/%{cfg.buildcfg} " }
filter " system:linux "
2025-11-20 20:27:59 -03:00
links { " pthread " , " m " , " dl " , " rt " }
filter { " system:linux " , " options:wayland=off " }
links { " X11 " }
filter { " system:linux " , " options:wayland=on " }
links { " wayland-client " , " wayland-cursor " , " wayland-egl " , " xkbcommon " }
2024-08-14 17:09:43 -07:00
filter " system:macosx "
links { " OpenGL.framework " , " Cocoa.framework " , " IOKit.framework " , " CoreFoundation.framework " , " CoreAudio.framework " , " CoreVideo.framework " , " AudioToolbox.framework " }
filter { }
2025-05-18 09:05:17 -07:00
2024-08-14 17:09:43 -07:00
project " raylib "
kind " StaticLib "
platform_defines ( )
location " build_files/ "
language " C "
targetdir " ../bin/%{cfg.buildcfg} "
2025-11-20 20:27:59 -03:00
2025-11-05 20:00:58 -08:00
filter { " options:wayland=on " }
defines { " GLFW_LINUX_ENABLE_WAYLAND=TRUE " }
2025-11-20 20:28:53 -03:00
filter { " options:wayland=on " , " system:linux " }
prebuildcommands {
" @echo Generating Wayland protocols... " ,
-- Core Wayland & Shell
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/wayland.xml ../ " .. raylib_dir .. " /src/wayland-client-protocol.h " ,
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/xdg-shell.xml ../ " .. raylib_dir .. " /src/xdg-shell-client-protocol.h " ,
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/xdg-decoration-unstable-v1.xml ../ " .. raylib_dir .. " /src/xdg-decoration-unstable-v1-client-protocol.h " ,
-- Viewporter
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/viewporter.xml ../ " .. raylib_dir .. " /src/viewporter-client-protocol.h " ,
-- Relative Pointer
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/relative-pointer-unstable-v1.xml ../ " .. raylib_dir .. " /src/relative-pointer-unstable-v1-client-protocol.h " ,
-- Pointer Constraints
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/pointer-constraints-unstable-v1.xml ../ " .. raylib_dir .. " /src/pointer-constraints-unstable-v1-client-protocol.h " ,
-- Fractional Scale
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/fractional-scale-v1.xml ../ " .. raylib_dir .. " /src/fractional-scale-v1-client-protocol.h " ,
-- XDG Activation
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/xdg-activation-v1.xml ../ " .. raylib_dir .. " /src/xdg-activation-v1-client-protocol.h " ,
-- Idle Inhibit
" @wayland-scanner client-header ../ " .. raylib_dir .. " /src/external/glfw/deps/wayland/idle-inhibit-unstable-v1.xml ../ " .. raylib_dir .. " /src/idle-inhibit-unstable-v1-client-protocol.h " ,
}
filter { }
2024-08-14 17:09:43 -07:00
filter " action:vs* "
defines { " _WINSOCK_DEPRECATED_NO_WARNINGS " , " _CRT_SECURE_NO_WARNINGS " }
2024-08-20 16:16:17 -07:00
characterset ( " Unicode " )
2024-08-14 17:09:43 -07:00
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 { }