mirror of
https://github.com/raysan5/raylib.git
synced 2026-09-14 01:50:50 +00:00
* Detect the recipe shell in Makefiles GNU Make on Windows may use sh even when invoked from cmd. Probe how echo handles quotes instead of choosing shell syntax from the target OS. Apply this to the library, examples and tools, preserving explicit PLATFORM_SHELL overrides. Stop forcing cmd for library cleanup and fix Win32 recipe indentation. * Pass rlparser variables directly to recursive make The form FORMAT=JSON EXTENSION=json $(MAKE) parse uses sh environment assignments. Under cmd, FORMAT=JSON is treated as a command and fails. Use $(MAKE) parse FORMAT=JSON EXTENSION=json instead. This passes the variables directly to make and works under both shells.
847 lines
30 KiB
Makefile
847 lines
30 KiB
Makefile
#**************************************************************************************************
|
|
#
|
|
# raylib makefile for multiple platforms
|
|
#
|
|
# This file supports building raylib examples for the following platforms:
|
|
#
|
|
# > PLATFORM_DESKTOP
|
|
# - Defaults to PLATFORM_DESKTOP_GLFW
|
|
# > PLATFORM_DESKTOP_GFLW (GLFW backend):
|
|
# - Windows (Win32, Win64)
|
|
# - Linux (X11/Wayland desktop mode)
|
|
# - macOS/OSX (x64, arm64)
|
|
# - FreeBSD, OpenBSD, NetBSD, DragonFly (X11 desktop)
|
|
# > PLATFORM_DESKTOP_SDL (SDL backend):
|
|
# - Windows (Win32, Win64)
|
|
# - Linux (X11/Wayland desktop mode)
|
|
# - Others (not tested)
|
|
# > PLATFORM_DESKTOP_RGFW (RGFW backend):
|
|
# - Windows (Win32, Win64)
|
|
# - Linux (X11 desktop mode)
|
|
# - macOS/OSX (x64, arm64)
|
|
# - Others (not tested)
|
|
# > PLATFORM_DESKTOP_WIN32 (native Win32):
|
|
# - Windows (Win32, Win64)
|
|
# > PLATFORM_WEB_RGFW:
|
|
# - HTML5 (WebAssembly)
|
|
# > PLATFORM_WEB:
|
|
# - HTML5 (WebAssembly)
|
|
# > PLATFORM_DRM:
|
|
# - Raspberry Pi 0-5 (DRM/KMS)
|
|
# - Linux DRM subsystem (KMS mode)
|
|
# > PLATFORM_ANDROID:
|
|
# - Android (ARM, ARM64)
|
|
#
|
|
# Copyright (c) 2013-2026 Ramon Santamaria (@raysan5)
|
|
#
|
|
# This software is provided "as-is", without any express or implied warranty. In no event
|
|
# will the authors be held liable for any damages arising from the use of this software.
|
|
#
|
|
# Permission is granted to anyone to use this software for any purpose, including commercial
|
|
# applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
|
#
|
|
# 1. The origin of this software must not be misrepresented; you must not claim that you
|
|
# wrote the original software. If you use this software in a product, an acknowledgment
|
|
# in the product documentation would be appreciated but is not required.
|
|
#
|
|
# 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
|
# as being the original software.
|
|
#
|
|
# 3. This notice may not be removed or altered from any source distribution.
|
|
#
|
|
#**************************************************************************************************
|
|
|
|
.PHONY: all clean
|
|
|
|
# Define required environment variables
|
|
#------------------------------------------------------------------------------------------------
|
|
# Define target platform: PLATFORM_DESKTOP, PLATFORM_DESKTOP_SDL, PLATFORM_DRM, PLATFORM_ANDROID, PLATFORM_WEB, PLATFORM_WEB_RGFW
|
|
PLATFORM ?= PLATFORM_DESKTOP
|
|
|
|
ifeq ($(PLATFORM),$(filter $(PLATFORM),PLATFORM_DESKTOP_GLFW PLATFORM_DESKTOP_SDL PLATFORM_DESKTOP_RGFW))
|
|
TARGET_PLATFORM := $(PLATFORM)
|
|
override PLATFORM = PLATFORM_DESKTOP
|
|
else
|
|
ifeq ($(PLATFORM), PLATFORM_DESKTOP)
|
|
TARGET_PLATFORM = PLATFORM_DESKTOP_GLFW
|
|
else
|
|
TARGET_PLATFORM = $(PLATFORM)
|
|
endif
|
|
endif
|
|
|
|
# Define required raylib variables
|
|
PROJECT_NAME ?= raylib_examples
|
|
RAYLIB_VERSION ?= 6.0.0
|
|
RAYLIB_PATH ?= ..
|
|
|
|
# Define raylib source code path
|
|
RAYLIB_SRC_PATH ?= ../src
|
|
|
|
# Locations of raylib.h and libraylib.a/libraylib.so
|
|
# NOTE: Those variables are only used for PLATFORM_OS: LINUX, BSD
|
|
DESTDIR ?= /usr/local
|
|
RAYLIB_INCLUDE_PATH ?= $(DESTDIR)/include
|
|
RAYLIB_LIB_PATH ?= $(DESTDIR)/lib
|
|
|
|
# Library type compilation: STATIC (.a) or SHARED (.so/.dll)
|
|
RAYLIB_LIBTYPE ?= STATIC
|
|
|
|
# Build mode for project: DEBUG or RELEASE
|
|
BUILD_MODE ?= RELEASE
|
|
|
|
# Use external GLFW library instead of rglfw module
|
|
USE_EXTERNAL_GLFW ?= FALSE
|
|
|
|
# Enable support for X11 by default on Linux when using GLFW
|
|
# NOTE: Wayland is disabled by default, only enable if you are sure
|
|
GLFW_LINUX_ENABLE_WAYLAND ?= FALSE
|
|
GLFW_LINUX_ENABLE_X11 ?= TRUE
|
|
|
|
# Enable support for X11 by default on Linux when using RGFW
|
|
# NOTE: Wayland is disabled by default, only enable if you are sure
|
|
RGFW_LINUX_ENABLE_WAYLAND ?= FALSE
|
|
RGFW_LINUX_ENABLE_X11 ?= TRUE
|
|
|
|
# PLATFORM_DESKTOP_SDL: It requires SDL library to be provided externally
|
|
# WARNING: Library is not included in raylib, it MUST be configured by users
|
|
SDL_INCLUDE_PATH ?= $(RAYLIB_SRC_PATH)/external/SDL2/include
|
|
SDL_LIBRARY_PATH ?= $(RAYLIB_SRC_PATH)/external/SDL2/lib
|
|
SDL_LIBRARIES ?= -lSDL2 -lSDL2main
|
|
|
|
# Use Wayland display server protocol on Linux desktop (by default it uses X11 windowing system)
|
|
# NOTE: This variable is only used for PLATFORM_OS: LINUX
|
|
USE_WAYLAND_DISPLAY ?= FALSE
|
|
|
|
# PLATFORM_WEB: Default properties
|
|
BUILD_WEB_ASYNCIFY ?= TRUE
|
|
BUILD_WEB_SHELL ?= $(RAYLIB_PATH)/src/minshell.html
|
|
BUILD_WEB_HEAP_SIZE ?= 134217728
|
|
BUILD_WEB_RESOURCES ?= TRUE
|
|
BUILD_WEB_RESOURCES_PATH ?= $(dir $<)resources@resources
|
|
# Use WebGL2 backend (OpenGL 3.0)
|
|
# WARNING: Requires raylib compiled with GRAPHICS_API_OPENGL_ES3
|
|
BUILD_WEB_WEBGL2 ?= FALSE
|
|
|
|
# Detect the shell used by make: cmd preserves quotes, while sh removes them.
|
|
ifndef PLATFORM_SHELL
|
|
PLATFORM_SHELL = sh
|
|
ifeq ($(shell echo "test"),"test")
|
|
PLATFORM_SHELL = cmd
|
|
endif
|
|
endif
|
|
|
|
# Determine PLATFORM_OS when required
|
|
ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW PLATFORM_DESKTOP_SDL PLATFORM_DESKTOP_RGFW PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
# No uname.exe on MinGW!, but OS=Windows_NT on Windows!
|
|
# ifeq ($(UNAME),Msys) -> Windows
|
|
ifeq ($(OS),Windows_NT)
|
|
PLATFORM_OS = WINDOWS
|
|
else
|
|
UNAMEOS = $(shell uname)
|
|
ifeq ($(UNAMEOS),Linux)
|
|
PLATFORM_OS = LINUX
|
|
endif
|
|
ifeq ($(UNAMEOS),FreeBSD)
|
|
PLATFORM_OS = BSD
|
|
endif
|
|
ifeq ($(UNAMEOS),OpenBSD)
|
|
PLATFORM_OS = BSD
|
|
endif
|
|
ifeq ($(UNAMEOS),NetBSD)
|
|
PLATFORM_OS = BSD
|
|
endif
|
|
ifeq ($(UNAMEOS),DragonFly)
|
|
PLATFORM_OS = BSD
|
|
endif
|
|
ifeq ($(UNAMEOS),Darwin)
|
|
PLATFORM_OS = OSX
|
|
endif
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DRM)
|
|
UNAMEOS = $(shell uname)
|
|
ifeq ($(UNAMEOS),Linux)
|
|
PLATFORM_OS = LINUX
|
|
endif
|
|
endif
|
|
|
|
# Default path for raylib on Raspberry Pi
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DRM)
|
|
RAYLIB_PATH ?= /home/pi/raylib
|
|
endif
|
|
|
|
# Define raylib release directory for compiled library
|
|
RAYLIB_RELEASE_PATH ?= $(RAYLIB_PATH)/src
|
|
|
|
ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
# Emscripten required variables
|
|
EMSDK_PATH ?= C:/raylib/emsdk
|
|
EMSCRIPTEN_PATH ?= $(EMSDK_PATH)/upstream/emscripten
|
|
CLANG_PATH = $(EMSDK_PATH)/upstream/bin
|
|
PYTHON_PATH = $(EMSDK_PATH)/python/3.13.3_64bit
|
|
NODE_PATH = $(EMSDK_PATH)/node/22.16.0_64bit/bin
|
|
export PATH = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH):$$(PATH)
|
|
endif
|
|
endif
|
|
|
|
# Define default C compiler: CC
|
|
#------------------------------------------------------------------------------------------------
|
|
CC = gcc
|
|
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW)
|
|
ifeq ($(PLATFORM_OS),OSX)
|
|
# OSX default compiler
|
|
CC = clang
|
|
endif
|
|
ifeq ($(PLATFORM_OS),BSD)
|
|
# FreeBSD, OpenBSD, NetBSD, DragonFly default compiler
|
|
CC = clang
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
# HTML5 emscripten compiler
|
|
# WARNING: To compile to HTML5, code must be redesigned
|
|
# to use emscripten.h and emscripten_set_main_loop()
|
|
CC = emcc
|
|
endif
|
|
|
|
# Define default make program: MAKE
|
|
#------------------------------------------------------------------------------------------------
|
|
MAKE ?= make
|
|
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
MAKE = mingw32-make
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_ANDROID)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
MAKE = mingw32-make
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
MAKE = mingw32-make
|
|
else
|
|
EMMAKE := $(shell command -v emmake)
|
|
ifneq (, $(EMMAKE))
|
|
MAKE = $(EMMAKE) make
|
|
else
|
|
MAKE = mingw32-make
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Define compiler flags: CFLAGS
|
|
#------------------------------------------------------------------------------------------------
|
|
# -O1 defines optimization level
|
|
# -g include debug information on compilation
|
|
# -s strip unnecessary data from build
|
|
# -Wall turns on most, but not all, compiler warnings
|
|
# -std=c99 defines C language mode (standard C from 1999 revision)
|
|
# -std=gnu99 defines C language mode (GNU C from 1999 revision)
|
|
# -Wno-missing-braces ignore invalid warning (GCC bug 53119)
|
|
# -Wno-unused-value ignore unused return values of some functions (i.e. fread())
|
|
# -D_DEFAULT_SOURCE use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
|
|
CFLAGS = -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces -Wno-unused-result
|
|
|
|
ifeq ($(BUILD_MODE),DEBUG)
|
|
CFLAGS += -g -D_DEBUG
|
|
else
|
|
ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
ifeq ($(BUILD_WEB_ASYNCIFY),TRUE)
|
|
CFLAGS += -O3
|
|
else
|
|
CFLAGS += -Os
|
|
endif
|
|
else
|
|
CFLAGS += -O2
|
|
endif
|
|
endif
|
|
|
|
# Additional flags for compiler (if desired)
|
|
# -Wextra enables some extra warning flags that are not enabled by -Wall
|
|
# -Wmissing-prototypes warn if a global function is defined without a previous prototype declaration
|
|
# -Wstrict-prototypes warn if a function is declared or defined without specifying the argument types
|
|
# -Werror=implicit-function-declaration catch function calls without prior declaration
|
|
#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW)
|
|
ifeq ($(PLATFORM_OS),LINUX)
|
|
ifeq ($(RAYLIB_LIBTYPE),STATIC)
|
|
CFLAGS += -D_DEFAULT_SOURCE
|
|
endif
|
|
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
|
# Explicitly enable runtime link to libraylib.so
|
|
CFLAGS += -Wl,-rpath,$(RAYLIB_RELEASE_PATH)
|
|
endif
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DRM)
|
|
CFLAGS += -std=gnu99 -DEGL_NO_X11
|
|
endif
|
|
|
|
# Define include paths for required headers: INCLUDE_PATHS
|
|
# NOTE: Some external/extras libraries could be required (stb, easings...)
|
|
#------------------------------------------------------------------------------------------------
|
|
INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external $(EXTRA_INCLUDE_PATHS)
|
|
|
|
# Define additional directories containing required header files
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW)
|
|
ifeq ($(PLATFORM_OS),BSD)
|
|
INCLUDE_PATHS += -I$(RAYLIB_INCLUDE_PATH) -I/usr/pkg/include -I/usr/X11R7/include
|
|
endif
|
|
ifeq ($(PLATFORM_OS),LINUX)
|
|
INCLUDE_PATHS += -I$(RAYLIB_INCLUDE_PATH)
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_SDL)
|
|
INCLUDE_PATHS += -I$(SDL_INCLUDE_PATH)
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DRM)
|
|
INCLUDE_PATHS += -I$(RAYLIB_INCLUDE_PATH)
|
|
INCLUDE_PATHS += -I/usr/include/libdrm
|
|
endif
|
|
|
|
# Define library paths containing required libs: LDFLAGS
|
|
#------------------------------------------------------------------------------------------------
|
|
LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH)
|
|
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
# NOTE: The resource .rc file contains windows executable icon and properties
|
|
LDFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data
|
|
# -Wl,--subsystem,windows hides the console window
|
|
ifeq ($(BUILD_MODE), RELEASE)
|
|
LDFLAGS += -Wl,--subsystem,windows
|
|
endif
|
|
endif
|
|
ifeq ($(PLATFORM_OS),LINUX)
|
|
LDFLAGS += -L$(RAYLIB_LIB_PATH)
|
|
endif
|
|
ifeq ($(PLATFORM_OS),BSD)
|
|
LDFLAGS += -Lsrc -L$(RAYLIB_LIB_PATH)
|
|
endif
|
|
ifeq ($(PLATFORM_OS),OSX)
|
|
LDFLAGS += -L/opt/homebrew/lib -L$(RAYLIB_LIB_PATH)
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_SDL)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
# NOTE: The resource .rc file contains windows executable icon and properties
|
|
LDFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data
|
|
# -Wl,--subsystem,windows hides the console window
|
|
ifeq ($(BUILD_MODE), RELEASE)
|
|
LDFLAGS += -Wl,--subsystem,windows
|
|
endif
|
|
endif
|
|
LDFLAGS += -L$(SDL_LIBRARY_PATH)
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
# -Os # size optimization
|
|
# -O2 # optimization level 2, if used, also set --memory-init-file 0
|
|
# -sUSE_GLFW=3 # Use glfw3 library (context/input management)
|
|
# -sALLOW_MEMORY_GROWTH=1 # to allow memory resizing -> WARNING: Audio buffers could FAIL!
|
|
# -sTOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) (67108864 = 64MB)
|
|
# -sUSE_PTHREADS=1 # multithreading support
|
|
# -sWASM=0 # disable Web Assembly, emitted by default
|
|
# -sASYNCIFY # lets synchronous C/C++ code interact with asynchronous JS
|
|
# -sFORCE_FILESYSTEM=1 # force filesystem to load/save files data
|
|
# -sASSERTIONS=1 # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
|
|
# -sMINIFY_HTML=0 # minify generated html from shell.html
|
|
# --profiling # include information for code profiling
|
|
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
|
|
# --preload-file resources # specify a resources folder for data compilation
|
|
# --source-map-base # allow debugging in browser with source map
|
|
# --shell-file shell.html # define a custom shell .html and output extension
|
|
LDFLAGS += -sTOTAL_MEMORY=$(BUILD_WEB_HEAP_SIZE) -sFORCE_FILESYSTEM=1 -sEXPORTED_RUNTIME_METHODS=ccall -sMINIFY_HTML=0
|
|
|
|
# Using GLFW3 library (instead of RGFW)
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_WEB)
|
|
LDFLAGS += -sUSE_GLFW=3
|
|
endif
|
|
|
|
# Build using asyncify
|
|
ifeq ($(BUILD_WEB_ASYNCIFY),TRUE)
|
|
LDFLAGS += -sASYNCIFY
|
|
endif
|
|
|
|
# NOTE: Flags required for WebGL 2.0 (OpenGL ES 3.0)
|
|
# WARNING: Requires raylib compiled with GRAPHICS_API_OPENGL_ES3
|
|
ifeq ($(BUILD_WEB_WEBGL2),TRUE)
|
|
LDFLAGS += -sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2
|
|
endif
|
|
|
|
# Add resources building if required
|
|
ifeq ($(BUILD_WEB_RESOURCES),TRUE)
|
|
LDFLAGS += --preload-file $(BUILD_WEB_RESOURCES_PATH)
|
|
endif
|
|
|
|
# Add debug mode flags if required
|
|
ifeq ($(BUILD_MODE),DEBUG)
|
|
LDFLAGS += -sASSERTIONS=1 --profiling
|
|
endif
|
|
|
|
# Define a custom shell .html and output extension
|
|
LDFLAGS += --shell-file $(BUILD_WEB_SHELL)
|
|
EXT = .html
|
|
|
|
# NOTE: Simple raylib examples are compiled to be interpreter with asyncify, that way,
|
|
# we can compile same code for ALL platforms with no change required, but, working on bigger
|
|
# projects, code needs to be refactored to avoid a blocking while() loop, moving Update and Draw
|
|
# logic to a self contained function: UpdateDrawFrame(), check core_basic_window_web.c for reference.
|
|
|
|
endif
|
|
|
|
# Define libraries required on linking: LDLIBS
|
|
# NOTE: To link libraries (lib<name>.so or lib<name>.a), use -l<name>
|
|
#------------------------------------------------------------------------------------------------
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
# Libraries for Windows desktop compilation
|
|
# NOTE: WinMM library required to set high-res timer resolution
|
|
LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
|
|
endif
|
|
ifeq ($(PLATFORM_OS),LINUX)
|
|
# Libraries for Debian GNU/Linux desktop compiling
|
|
# NOTE: Required packages: libegl1-mesa-dev
|
|
LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
|
|
|
|
# On Wayland, additional libraries requires
|
|
ifeq ($(GLFW_LINUX_ENABLE_WAYLAND),TRUE)
|
|
LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
|
|
endif
|
|
|
|
ifeq ($(GLFW_LINUX_ENABLE_X11),TRUE)
|
|
# On X11, additional libraries required
|
|
LDLIBS += -lX11
|
|
# NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
|
|
#LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
|
endif
|
|
# Explicit link to libc
|
|
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
|
LDLIBS += -lc
|
|
endif
|
|
|
|
# NOTE: On ARM 32bit arch, miniaudio requires atomics library
|
|
LDLIBS += -latomic
|
|
endif
|
|
ifeq ($(PLATFORM_OS),OSX)
|
|
# Libraries for OSX 10.9 desktop compiling
|
|
# NOTE: Required packages: libopenal-dev libegl1-mesa-dev
|
|
LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo -framework QuartzCore
|
|
endif
|
|
ifeq ($(PLATFORM_OS),BSD)
|
|
# Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
|
|
# NOTE: Required packages: mesa-libs
|
|
LDFLAGS += -L/usr/X11R7/lib -Wl,-R/usr/X11R7/lib
|
|
LDLIBS = -lraylib -lGL -lm -lpthread
|
|
|
|
# On XWindow requires also below libraries
|
|
LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
|
endif
|
|
ifeq ($(USE_EXTERNAL_GLFW),TRUE)
|
|
# NOTE: It could require additional packages installed: libglfw3-dev
|
|
LDLIBS += -lglfw
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_SDL)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
# Libraries for Windows desktop compilation
|
|
LDLIBS = -lraylib $(SDL_LIBRARIES) -lopengl32 -lgdi32
|
|
endif
|
|
ifeq ($(PLATFORM_OS),LINUX)
|
|
# Libraries for Debian GNU/Linux desktop compiling
|
|
# NOTE: Required packages: libegl1-mesa-dev
|
|
LDLIBS = -lraylib $(SDL_LIBRARIES) -lGL -lm -lpthread -ldl -lrt
|
|
|
|
# On X11, addition libraries required
|
|
LDLIBS += -lX11
|
|
# NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
|
|
#LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
|
|
|
# On Wayland, additional libraries requires
|
|
ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
|
|
LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
|
|
endif
|
|
|
|
# Explicit link to libc
|
|
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
|
LDLIBS += -lc
|
|
endif
|
|
|
|
# NOTE: On ARM 32bit arch, miniaudio requires atomics library
|
|
LDLIBS += -latomic
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_RGFW)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
# Libraries for Windows desktop compilation
|
|
LDFLAGS += -L..\src
|
|
LDLIBS = -lraylib -lgdi32 -lwinmm -lopengl32
|
|
endif
|
|
ifeq ($(PLATFORM_OS),LINUX)
|
|
# Libraries for Debian GNU/Linux desktop compipling
|
|
# NOTE: Required packages: libegl1-mesa-dev
|
|
LDFLAGS += -L../src
|
|
LDLIBS = -lraylib -lm
|
|
|
|
ifeq ($(RGFW_LINUX_ENABLE_X11),TRUE)
|
|
LDLIBS += -lGL -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lpthread -ldl -lrt
|
|
endif
|
|
|
|
ifeq ($(RGFW_LINUX_ENABLE_WAYLAND),TRUE)
|
|
LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
|
|
endif
|
|
|
|
# Explicit link to libc
|
|
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
|
LDLIBS += -lc
|
|
endif
|
|
|
|
# NOTE: On ARM 32bit arch, miniaudio requires atomics library
|
|
LDLIBS += -latomic
|
|
endif
|
|
ifeq ($(PLATFORM_OS),OSX)
|
|
# Libraries for Debian GNU/Linux desktop compiling
|
|
# NOTE: Required packages: libegl1-mesa-dev
|
|
LDFLAGS += -L../src
|
|
LDLIBS = -lraylib -lm
|
|
LDLIBS += -framework Foundation -framework AppKit -framework IOKit -framework OpenGL -framework CoreVideo -framework QuartzCore
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DRM)
|
|
# Libraries for DRM compiling
|
|
# NOTE: Required packages: libasound2-dev (ALSA)
|
|
LDLIBS = -lraylib -lGLESv2 -lEGL -ldrm -lgbm -lpthread -lrt -lm -ldl -latomic
|
|
# TODO: Examples compilation does not define GRAPHICS, is it required?
|
|
#ifeq ($(GRAPHICS),GRAPHICS_API_OPENGL_ES2)
|
|
# LDLIBS += -lGLESv2 -lEGL
|
|
#endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_WIN32)
|
|
# Libraries for Windows desktop compilation
|
|
LDFLAGS += -L..\src
|
|
LDLIBS = -lraylib -lgdi32 -lwinmm -lshcore
|
|
ifneq ($(GRAPHICS),GRAPHICS_API_OPENGL_SOFTWARE)
|
|
LDLIBS += -lopengl32
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
# Libraries for web (HTML5) compiling
|
|
LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.web.a
|
|
endif
|
|
|
|
CURRENT_MAKEFILE = $(lastword $(MAKEFILE_LIST))
|
|
|
|
# Define source code object files required
|
|
#------------------------------------------------------------------------------------------------
|
|
#EXAMPLES_LIST_START
|
|
CORE = \
|
|
core/core_2d_camera \
|
|
core/core_2d_camera_mouse_zoom \
|
|
core/core_2d_camera_platformer \
|
|
core/core_2d_camera_split_screen \
|
|
core/core_3d_camera_first_person \
|
|
core/core_3d_camera_fps \
|
|
core/core_3d_camera_free \
|
|
core/core_3d_camera_mode \
|
|
core/core_3d_camera_split_screen \
|
|
core/core_3d_picking \
|
|
core/core_automation_events \
|
|
core/core_basic_screen_manager \
|
|
core/core_basic_window \
|
|
core/core_clipboard_text \
|
|
core/core_compute_hash \
|
|
core/core_custom_frame_control \
|
|
core/core_custom_logging \
|
|
core/core_delta_time \
|
|
core/core_directory_files \
|
|
core/core_drop_files \
|
|
core/core_highdpi_demo \
|
|
core/core_highdpi_testbed \
|
|
core/core_input_actions \
|
|
core/core_input_gamepad \
|
|
core/core_input_gestures \
|
|
core/core_input_gestures_testbed \
|
|
core/core_input_keys \
|
|
core/core_input_mouse \
|
|
core/core_input_mouse_wheel \
|
|
core/core_input_multitouch \
|
|
core/core_input_virtual_controls \
|
|
core/core_keyboard_testbed \
|
|
core/core_monitor_detector \
|
|
core/core_random_sequence \
|
|
core/core_random_values \
|
|
core/core_render_texture \
|
|
core/core_scissor_test \
|
|
core/core_screen_recording \
|
|
core/core_smooth_pixelperfect \
|
|
core/core_storage_values \
|
|
core/core_text_file_loading \
|
|
core/core_undo_redo \
|
|
core/core_viewport_scaling \
|
|
core/core_vr_simulator \
|
|
core/core_window_flags \
|
|
core/core_window_letterbox \
|
|
core/core_window_should_close \
|
|
core/core_window_web \
|
|
core/core_world_screen
|
|
|
|
SHAPES = \
|
|
shapes/shapes_ball_physics \
|
|
shapes/shapes_basic_shapes \
|
|
shapes/shapes_bouncing_ball \
|
|
shapes/shapes_bullet_hell \
|
|
shapes/shapes_circle_sector_drawing \
|
|
shapes/shapes_clock_of_clocks \
|
|
shapes/shapes_collision_area \
|
|
shapes/shapes_colors_palette \
|
|
shapes/shapes_dashed_line \
|
|
shapes/shapes_digital_clock \
|
|
shapes/shapes_double_pendulum \
|
|
shapes/shapes_easings_ball \
|
|
shapes/shapes_easings_box \
|
|
shapes/shapes_easings_rectangles \
|
|
shapes/shapes_easings_testbed \
|
|
shapes/shapes_following_eyes \
|
|
shapes/shapes_hilbert_curve \
|
|
shapes/shapes_kaleidoscope \
|
|
shapes/shapes_lines_bezier \
|
|
shapes/shapes_lines_drawing \
|
|
shapes/shapes_logo_raylib \
|
|
shapes/shapes_logo_raylib_anim \
|
|
shapes/shapes_math_angle_rotation \
|
|
shapes/shapes_math_sine_cosine \
|
|
shapes/shapes_mouse_trail \
|
|
shapes/shapes_penrose_tile \
|
|
shapes/shapes_pie_chart \
|
|
shapes/shapes_rectangle_advanced \
|
|
shapes/shapes_rectangle_scaling \
|
|
shapes/shapes_recursive_tree \
|
|
shapes/shapes_ring_drawing \
|
|
shapes/shapes_rlgl_color_wheel \
|
|
shapes/shapes_rlgl_triangle \
|
|
shapes/shapes_rounded_rectangle_drawing \
|
|
shapes/shapes_simple_particles \
|
|
shapes/shapes_splines_drawing \
|
|
shapes/shapes_starfield_effect \
|
|
shapes/shapes_top_down_lights \
|
|
shapes/shapes_triangle_strip \
|
|
shapes/shapes_vector_angle
|
|
|
|
TEXTURES = \
|
|
textures/textures_background_scrolling \
|
|
textures/textures_blend_modes \
|
|
textures/textures_bunnymark \
|
|
textures/textures_cellular_automata \
|
|
textures/textures_clipboard_image \
|
|
textures/textures_fog_of_war \
|
|
textures/textures_framebuffer_rendering \
|
|
textures/textures_gif_player \
|
|
textures/textures_image_channel \
|
|
textures/textures_image_drawing \
|
|
textures/textures_image_generation \
|
|
textures/textures_image_kernel \
|
|
textures/textures_image_loading \
|
|
textures/textures_image_processing \
|
|
textures/textures_image_rotate \
|
|
textures/textures_image_text \
|
|
textures/textures_logo_raylib \
|
|
textures/textures_magnifying_glass \
|
|
textures/textures_mouse_painting \
|
|
textures/textures_npatch_drawing \
|
|
textures/textures_particles_blending \
|
|
textures/textures_polygon_drawing \
|
|
textures/textures_raw_data \
|
|
textures/textures_screen_buffer \
|
|
textures/textures_sprite_animation \
|
|
textures/textures_sprite_button \
|
|
textures/textures_sprite_explosion \
|
|
textures/textures_sprite_stacking \
|
|
textures/textures_srcrec_dstrec \
|
|
textures/textures_textured_curve \
|
|
textures/textures_tiled_drawing \
|
|
textures/textures_to_image
|
|
|
|
TEXT = \
|
|
text/text_3d_drawing \
|
|
text/text_codepoints_loading \
|
|
text/text_font_filters \
|
|
text/text_font_loading \
|
|
text/text_font_sdf \
|
|
text/text_font_spritefont \
|
|
text/text_format_text \
|
|
text/text_inline_styling \
|
|
text/text_input_box \
|
|
text/text_rectangle_bounds \
|
|
text/text_sprite_fonts \
|
|
text/text_strings_management \
|
|
text/text_unicode_emojis \
|
|
text/text_unicode_ranges \
|
|
text/text_words_alignment \
|
|
text/text_writing_anim
|
|
|
|
MODELS = \
|
|
models/models_animation_blend_custom \
|
|
models/models_animation_blending \
|
|
models/models_animation_gpu_skinning \
|
|
models/models_animation_timing \
|
|
models/models_basic_voxel \
|
|
models/models_billboard_rendering \
|
|
models/models_bone_socket \
|
|
models/models_box_collisions \
|
|
models/models_cubicmap_rendering \
|
|
models/models_decals \
|
|
models/models_directional_billboard \
|
|
models/models_first_person_maze \
|
|
models/models_geometric_shapes \
|
|
models/models_heightmap_rendering \
|
|
models/models_loading \
|
|
models/models_loading_gltf \
|
|
models/models_loading_iqm \
|
|
models/models_loading_m3d \
|
|
models/models_loading_vox \
|
|
models/models_mesh_generation \
|
|
models/models_mesh_picking \
|
|
models/models_orthographic_projection \
|
|
models/models_point_rendering \
|
|
models/models_rlgl_solar_system \
|
|
models/models_rotating_cube \
|
|
models/models_skybox_rendering \
|
|
models/models_tesseract_view \
|
|
models/models_textured_cube \
|
|
models/models_waving_cubes \
|
|
models/models_yaw_pitch_roll
|
|
|
|
SHADERS = \
|
|
shaders/shaders_ascii_rendering \
|
|
shaders/shaders_basic_lighting \
|
|
shaders/shaders_basic_pbr \
|
|
shaders/shaders_cel_shading \
|
|
shaders/shaders_color_correction \
|
|
shaders/shaders_custom_uniform \
|
|
shaders/shaders_deferred_rendering \
|
|
shaders/shaders_depth_rendering \
|
|
shaders/shaders_depth_writing \
|
|
shaders/shaders_eratosthenes_sieve \
|
|
shaders/shaders_fog_rendering \
|
|
shaders/shaders_game_of_life \
|
|
shaders/shaders_hot_reloading \
|
|
shaders/shaders_hybrid_rendering \
|
|
shaders/shaders_julia_set \
|
|
shaders/shaders_lightmap_rendering \
|
|
shaders/shaders_mandelbrot_set \
|
|
shaders/shaders_mesh_instancing \
|
|
shaders/shaders_model_shader \
|
|
shaders/shaders_multi_sample2d \
|
|
shaders/shaders_normalmap_rendering \
|
|
shaders/shaders_palette_switch \
|
|
shaders/shaders_postprocessing \
|
|
shaders/shaders_raymarching_rendering \
|
|
shaders/shaders_rlgl_compute \
|
|
shaders/shaders_rounded_rectangle \
|
|
shaders/shaders_shadowmap_rendering \
|
|
shaders/shaders_shapes_textures \
|
|
shaders/shaders_simple_mask \
|
|
shaders/shaders_spotlight_rendering \
|
|
shaders/shaders_texture_outline \
|
|
shaders/shaders_texture_rendering \
|
|
shaders/shaders_texture_tiling \
|
|
shaders/shaders_texture_waves \
|
|
shaders/shaders_vertex_displacement
|
|
|
|
AUDIO = \
|
|
audio/audio_mixed_processor \
|
|
audio/audio_module_playing \
|
|
audio/audio_music_stream \
|
|
audio/audio_raw_stream \
|
|
audio/audio_sound_loading \
|
|
audio/audio_sound_multi \
|
|
audio/audio_sound_positioning \
|
|
audio/audio_spectrum_visualizer \
|
|
audio/audio_stream_callback \
|
|
audio/audio_stream_effects
|
|
#EXAMPLES_LIST_END
|
|
|
|
# Define processes to execute
|
|
#------------------------------------------------------------------------------------------------
|
|
# Default target entry
|
|
all: $(CORE) $(SHAPES) $(TEXT) $(TEXTURES) $(MODELS) $(SHADERS) $(AUDIO)
|
|
|
|
core: $(CORE)
|
|
shapes: $(SHAPES)
|
|
textures: $(TEXTURES)
|
|
text: $(TEXT)
|
|
models: $(MODELS)
|
|
shaders: $(SHADERS)
|
|
audio: $(AUDIO)
|
|
|
|
# Generic compilation pattern
|
|
# NOTE: Examples must be ready for Android compilation!
|
|
%: %.c
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_ANDROID)
|
|
$(MAKE) -f Makefile.Android PROJECT_NAME=$@ PROJECT_SOURCE_FILES=$<
|
|
else ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
$(MAKE) -f Makefile.Web $@
|
|
else
|
|
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -D$(TARGET_PLATFORM)
|
|
endif
|
|
|
|
# Clean everything
|
|
clean:
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
ifeq ($(PLATFORM_SHELL),cmd)
|
|
del *.o *.exe /s
|
|
else
|
|
find . -type f '(' -name '*.o' -o -name '*.exe' ')' -exec rm -f {} +
|
|
endif
|
|
endif
|
|
ifeq ($(PLATFORM_OS),BSD)
|
|
find . -type f -perm -ugo+x -delete
|
|
rm -fv *.o
|
|
endif
|
|
ifeq ($(PLATFORM_OS),LINUX)
|
|
find . -type f -executable -delete
|
|
rm -fv *.o
|
|
endif
|
|
ifeq ($(PLATFORM_OS),OSX)
|
|
find . -type f -perm +ugo+x -delete
|
|
rm -f *.o
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_WIN32)
|
|
ifeq ($(PLATFORM_OS),WINDOWS)
|
|
ifeq ($(PLATFORM_SHELL),cmd)
|
|
del *.o *.exe /s
|
|
else
|
|
find . -type f '(' -name '*.o' -o -name '*.exe' ')' -exec rm -f {} +
|
|
endif
|
|
endif
|
|
ifeq ($(PLATFORM_OS),BSD)
|
|
find . -type f -perm -ugo+x -delete
|
|
rm -fv *.o
|
|
endif
|
|
ifeq ($(PLATFORM_OS),LINUX)
|
|
find . -type f -executable -delete
|
|
rm -fv *.o
|
|
endif
|
|
ifeq ($(PLATFORM_OS),OSX)
|
|
find . -type f -perm +ugo+x -delete
|
|
rm -f *.o
|
|
endif
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),PLATFORM_DRM)
|
|
find . -type f -executable -delete
|
|
rm -fv *.o
|
|
endif
|
|
ifeq ($(TARGET_PLATFORM),$(filter $(TARGET_PLATFORM),PLATFORM_WEB PLATFORM_WEB_RGFW))
|
|
ifeq ($(PLATFORM_SHELL),cmd)
|
|
del *.wasm *.html *.js *.data
|
|
else
|
|
rm -f */*.wasm */*.html */*.js */*.data
|
|
endif
|
|
endif
|
|
@echo Cleaning done
|