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 " } ,
{ " openges3 " , " OpenGL ES3 " }
} ,
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 " } ,
{ " rgfw " , " RGFW " }
} ,
default = " glfw "
}
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
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
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-12-18 08:08:43 -08:00
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 "
filter { " platforms:Arm64 " }
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) "
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 " } ,
2025-07-21 09:40:09 +10:00
[ " Windows Resource Files/* " ] = { " ../src/**.rc " , " src/**.ico " } ,
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 " }
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 " }
includedirs { raylib_dir .. " /src/external " }
includedirs { raylib_dir .. " /src/external/glfw/include " }
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 "
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 { }
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} "
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 { }