Files
raylib/src/Makefile

494 lines
18 KiB
Makefile
Raw Normal View History

#******************************************************************************
#
2017-05-08 00:47:15 +02:00
# raylib makefile
2017-03-24 03:32:07 -05:00
#
2017-05-08 00:47:15 +02:00
# Platforms supported:
# PLATFORM_DESKTOP: Windows (Win32, Win64)
2017-05-08 00:47:15 +02:00
# PLATFORM_DESKTOP: Linux
# PLATFORM_DESKTOP: OSX/macOS
2017-10-28 17:30:02 +02:00
# PLATFORM_DESKTOP: FreeBSD
# PLATFORM_ANDROID: Android (ARM, ARM64)
2017-05-08 00:47:15 +02:00
# PLATFORM_RPI: Raspberry Pi (Raspbian)
# PLATFORM_WEB: HTML5 (Chrome, Firefox)
#
2017-05-08 00:47:15 +02:00
# Many thanks to Milan Nikolic (@gen2brain) for implementing Android platform pipeline.
# Many thanks to Emanuele Petriglia for his contribution on GNU/Linux pipeline.
#
# Copyright (c) 2014-2017 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.
#
#******************************************************************************
# Please read the wiki to know how to compile raylib, because there are
# different methods.
2017-05-08 00:47:15 +02:00
.PHONY: all clean install uninstall
2017-10-14 00:13:23 +02:00
# Define required raylib variables
PLATFORM ?= PLATFORM_DESKTOP
2017-10-14 00:13:23 +02:00
RAYLIB_PATH ?= ..
2017-10-14 00:13:23 +02:00
# Library type used for raylib and OpenAL Soft: STATIC (.a) or SHARED (.so/.dll)
2017-10-02 14:12:03 +02:00
# NOTE: OpenAL Soft library should be provided in the selected form
2017-10-22 20:00:38 +02:00
RAYLIB_LIBTYPE ?= STATIC
2017-10-14 00:13:23 +02:00
OPENAL_LIBTYPE ?= STATIC
2017-10-14 00:13:23 +02:00
# On PLATFORM_WEB force OpenAL Soft shared library
2016-11-17 12:55:30 +01:00
ifeq ($(PLATFORM),PLATFORM_WEB)
2017-10-02 14:12:03 +02:00
OPENAL_LIBTYPE = SHARED
endif
2016-11-17 12:55:30 +01:00
2017-10-22 20:00:38 +02:00
# Use cross-compiler for PLATFORM_RPI
ifeq ($(PLATFORM),PLATFORM_RPI)
RPI_CROSS_COMPILE ?= NO
ifeq ($(RPI_CROSS_COMPILE),YES)
RPI_TOOLCHAIN ?= C:/SysGCC/Raspberry
RPI_TOOLCHAIN_SYSROOT ?= $(RPI_TOOLCHAIN)/arm-linux-gnueabihf/sysroot
endif
2017-10-22 20:00:38 +02:00
endif
2017-10-14 00:13:23 +02:00
# Determine if the file has root access (only for installing raylib)
# "whoami" prints the name of the user that calls him (so, if it is the root
# user, "whoami" prints "root").
ROOT = $(shell whoami)
2017-10-14 00:13:23 +02:00
# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
# No uname.exe on MinGW!, but OS=Windows_NT on Windows!
# ifeq ($(UNAME),Msys) -> Windows
ifeq ($(OS),Windows_NT)
PLATFORM_OS=WINDOWS
else
2017-10-14 00:13:23 +02:00
UNAMEOS=$(shell uname)
ifeq ($(UNAMEOS),Linux)
2017-03-24 03:28:12 -05:00
PLATFORM_OS=LINUX
2017-10-28 17:30:02 +02:00
endif
ifeq ($(UNAMEOS),FreeBSD)
PLATFORM_OS=FREEBSD
endif
ifeq ($(UNAMEOS),Darwin)
PLATFORM_OS=OSX
endif
endif
endif
2017-11-30 16:59:09 +01:00
ifeq ($(PLATFORM),PLATFORM_RPI)
UNAMEOS=$(shell uname)
ifeq ($(UNAMEOS),Linux)
PLATFORM_OS=LINUX
endif
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
# Emscripten required variables
2017-10-02 14:12:03 +02:00
EMSDK_PATH = C:/emsdk
EMSCRIPTEN_VERSION = 1.37.21
CLANG_VERSION=e1.37.21_64bit
PYTHON_VERSION=2.7.5.3_64bit
NODE_VERSION=4.1.1_64bit
export PATH=$(EMSDK_PATH);$(EMSDK_PATH)\clang\$(CLANG_VERSION);$(EMSDK_PATH)\node\$(NODE_VERSION)\bin;$(EMSDK_PATH)\python\$(PYTHON_VERSION);$(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION);C:\raylib\MinGW\bin:$$(PATH)
EMSCRIPTEN=$(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION)
endif
ifeq ($(PLATFORM),PLATFORM_ANDROID)
# Android required path variables
ANDROID_NDK = C:/android-ndk
ANDROID_TOOLCHAIN = C:/android_toolchain_arm_api16
# Android architecture: ARM or ARM64
ANDROID_ARCH ?= ARM
endif
RAYLIB_RELEASE_PATH ?= $(RAYLIB_PATH)/release/libs
2017-10-14 00:13:23 +02:00
# Define output directory for compiled library
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),WINDOWS)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/win32/mingw32
endif
ifeq ($(PLATFORM_OS),LINUX)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/linux
endif
ifeq ($(PLATFORM_OS),OSX)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/osx
endif
2017-10-28 17:30:02 +02:00
ifeq ($(PLATFORM_OS),FREEBSD)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/freebsd
endif
2017-10-14 00:13:23 +02:00
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/rpi
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/html5
endif
ifeq ($(PLATFORM),PLATFORM_ANDROID)
ifeq ($(ANDROID_ARCH),ARM)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/android/armeabi-v7a
endif
ifeq ($(ANDROID_ARCH),ARM64)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/android/arm64-v8a
endif
endif
# Define raylib graphics api depending on selected platform
2017-05-08 00:47:15 +02:00
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
2017-10-14 00:13:23 +02:00
# By default use OpenGL 3.3 on desktop platforms
GRAPHICS ?= GRAPHICS_API_OPENGL_33
#GRAPHICS = GRAPHICS_API_OPENGL_11 # Uncomment to use OpenGL 1.1
2016-06-16 20:25:50 +02:00
#GRAPHICS = GRAPHICS_API_OPENGL_21 # Uncomment to use OpenGL 2.1
endif
2017-10-02 14:12:03 +02:00
2017-05-08 00:47:15 +02:00
ifeq ($(PLATFORM),PLATFORM_RPI)
2017-10-14 00:13:23 +02:00
# On RPI OpenGL ES 2.0 must be used
2017-05-08 00:47:15 +02:00
GRAPHICS = GRAPHICS_API_OPENGL_ES2
endif
2017-10-02 14:12:03 +02:00
ifeq ($(PLATFORM),PLATFORM_WEB)
2017-10-14 00:13:23 +02:00
# On HTML5 OpenGL ES 2.0 is used, emscripten translates it to WebGL 1.0
2017-05-08 00:47:15 +02:00
GRAPHICS = GRAPHICS_API_OPENGL_ES2
endif
2017-10-02 14:12:03 +02:00
2017-05-08 00:47:15 +02:00
ifeq ($(PLATFORM),PLATFORM_ANDROID)
2017-10-14 00:13:23 +02:00
# By default use OpenGL ES 2.0 on Android
GRAPHICS = GRAPHICS_API_OPENGL_ES2
endif
2017-10-14 00:13:23 +02:00
# Default C compiler: gcc
# NOTE: define g++ compiler if using C++
2017-01-26 20:58:00 +01:00
CC = gcc
2017-07-18 22:23:43 -04:00
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),OSX)
2017-10-02 14:12:03 +02:00
# OSX default compiler
CC = clang
2017-10-14 12:25:36 +02:00
endif
2017-10-28 17:30:02 +02:00
ifeq ($(PLATFORM_OS),FREEBSD)
2017-10-28 18:41:29 +02:00
# FreeBSD default compiler
2017-10-28 17:30:02 +02:00
CC = clang
endif
2017-07-18 22:23:43 -04:00
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
2017-10-02 14:12:03 +02:00
ifeq ($(RPI_CROSS_COMPILE),YES)
2017-10-22 20:00:38 +02:00
# Define RPI cross-compiler
#CC = armv6j-hardfloat-linux-gnueabi-gcc
CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
endif
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
2017-10-02 14:12:03 +02:00
# HTML5 emscripten compiler
2016-07-18 17:07:50 +02:00
CC = emcc
2017-01-26 20:58:00 +01:00
endif
2017-10-02 14:12:03 +02:00
ifeq ($(PLATFORM),PLATFORM_ANDROID)
# Android toolchain (must be provided for desired architecture and compiler)
2017-10-14 00:13:23 +02:00
# NOTE: gcc compiler is being deprecated in Android NDK r16
2017-10-02 14:12:03 +02:00
ifeq ($(ANDROID_ARCH),ARM)
2017-10-03 15:02:32 +02:00
CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-gcc
2017-10-02 14:12:03 +02:00
endif
ifeq ($(ANDROID_ARCH),ARM64)
2017-10-03 15:02:32 +02:00
CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-gcc
2017-10-02 14:12:03 +02:00
endif
endif
2017-10-14 00:13:23 +02:00
# Default archiver program to pack libraries
2017-01-26 20:58:00 +01:00
AR = ar
2017-10-22 20:00:38 +02:00
ifeq ($(PLATFORM),PLATFORM_RPI)
ifeq ($(RPI_CROSS_COMPILE),YES)
# Define RPI cross-archiver
#CC = armv6j-hardfloat-linux-gnueabi-gcc
AR = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-ar
endif
endif
2017-10-02 14:12:03 +02:00
# Android archiver (also depends on desired architecture)
2017-01-26 20:58:00 +01:00
ifeq ($(PLATFORM),PLATFORM_ANDROID)
ifeq ($(ANDROID_ARCH),ARM)
AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
endif
ifeq ($(ANDROID_ARCH),ARM64)
AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
endif
endif
2017-10-14 00:13:23 +02:00
# Define compiler flags:
2017-03-24 03:42:10 -05:00
# -O1 defines optimization level
2017-11-30 16:59:09 +01:00
# -g enable debugging
2017-10-02 14:12:03 +02:00
# -s strip unnecessary data from build
2016-06-01 12:38:06 +02:00
# -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)
# -fgnu89-inline declaring inline functions support (GCC optimized)
2016-06-01 12:38:06 +02:00
# -Wno-missing-braces ignore invalid warning (GCC bug 53119)
# -D_DEFAULT_SOURCE use with -std=c99
2017-10-03 15:02:32 +02:00
CFLAGS += -O1 -Wall -std=c99 -D_DEFAULT_SOURCE -fgnu89-inline -Wno-missing-braces
2017-10-14 00:13:23 +02:00
# Additional flags for compiler (if desired)
2017-10-02 14:12:03 +02:00
#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
2017-03-24 03:28:12 -05:00
ifeq ($(PLATFORM),PLATFORM_WEB)
2017-03-29 16:04:29 -05:00
# -O2 # if used, also set --memory-init-file 0
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
# -s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing
# -s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB)
# -s USE_PTHREADS=1 # multithreading support
2017-10-02 14:12:03 +02:00
CFLAGS += -s USE_GLFW=3 -s ASSERTIONS=1 --profiling
2017-03-24 03:28:12 -05:00
endif
2017-09-23 18:40:30 +02:00
ifeq ($(PLATFORM),PLATFORM_ANDROID)
2017-09-29 13:57:00 +02:00
# Compiler flags for arquitecture
2017-09-23 18:40:30 +02:00
CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
2017-09-29 13:57:00 +02:00
# Compilation functions attributes options
CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC
# Compiler options for the linker
CFLAGS += -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes
# Preprocessor macro definitions
CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=16
2017-09-23 18:40:30 +02:00
endif
2017-10-14 00:13:23 +02:00
# Define required compilation flags for raylib SHARED lib
2017-10-02 14:12:03 +02:00
ifeq ($(RAYLIB_LIBTYPE),SHARED)
# make sure code is compiled as position independent
# BE CAREFUL: It seems that for gcc -fpic si not the same as -fPIC
# MinGW32 just doesn't need -fPIC, it shows warnings
CFLAGS += -fPIC -DBUILD_LIBTYPE_SHARED
endif
# Define required compilation flags for OpenAL Soft STATIC lib
ifeq ($(OPENAL_LIBTYPE),STATIC)
ALFLAGS = -DAL_LIBTYPE_STATIC -Wl,-allow-multiple-definition
endif
2017-10-14 00:13:23 +02:00
# Define include paths for required headers
# NOTE: Several external required libraries (stb and others)
2017-11-30 16:59:09 +01:00
INCLUDE_PATHS = -I. -Iexternal -Iexternal/include -Iexternal/glfw/include
2017-05-11 16:45:49 +02:00
2017-10-28 17:30:02 +02:00
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),FREEBSD)
INCLUDE_PATHS += -I/usr/local/include
LDFLAGS += -L. -Lsrc -L/usr/local/lib -L$(RAYLIB_RELEASE_PATH)
endif
endif
2017-10-14 00:13:23 +02:00
# Define additional directories containing required header files
ifeq ($(PLATFORM),PLATFORM_RPI)
2017-05-08 00:47:15 +02:00
# RPI requried libraries
2017-10-22 20:00:38 +02:00
INCLUDE_PATHS += -I$(RPI_TOOLCHAIN_SYSROOT)/opt/vc/include
INCLUDE_PATHS += -I$(RPI_TOOLCHAIN_SYSROOT)/opt/vc/include/interface/vmcs_host/linux
INCLUDE_PATHS += -I$(RPI_TOOLCHAIN_SYSROOT)/opt/vc/include/interface/vcos/pthreads
INCLUDE_PATHS += -I$(RPI_TOOLCHAIN_SYSROOT)/opt/vc/include/interface/vcos/pthreads
2017-05-08 00:47:15 +02:00
endif
ifeq ($(PLATFORM),PLATFORM_ANDROID)
# Android required libraries
2017-10-02 14:12:03 +02:00
INCLUDE_PATHS += -I$(ANDROID_TOOLCHAIN)/sysroot/usr/include
2017-05-08 00:47:15 +02:00
# Include android_native_app_glue.h
2017-10-02 14:12:03 +02:00
INCLUDE_PATHS += -Iexternal/android/native_app_glue
#INCLUDE_PATHS += -I$(ANDROID_NDK)/sources/android/native_app_glue
endif
2017-10-14 00:13:23 +02:00
# Define linker options
2017-10-03 15:02:32 +02:00
ifeq ($(PLATFORM),PLATFORM_ANDROID)
LDFLAGS = -Wl,-soname,libraylib.so -Wl,--exclude-libs,libatomic.a
LDFLAGS += -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings
# Force linking of library module to define symbol
LDFLAGS += -u ANativeActivity_onCreate
# Library paths containing required libs
LDFLAGS += -L. -Lsrc -L$(RAYLIB_RELEASE_PATH)
2017-10-03 15:02:32 +02:00
LDLIBS = -lopenal -llog -landroid -lEGL -lGLESv2 -lOpenSLES -latomic -lc -lm
endif
2017-10-14 00:13:23 +02:00
# Define all object files required with a wildcard
# The wildcard takes all files that finish with ".c",
# and replaces extentions with ".o", that are the object files
2017-11-30 16:59:09 +01:00
# NOTE: Some objects depend on the PLATFORM to be added or not!
# OBJS = $(patsubst %.c, %.o, $(wildcard *.c))
# Define object required on compilation
OBJS = core.o \
rlgl.o \
shapes.o \
textures.o \
text.o \
models.o \
audio.o \
stb_vorbis.o \
utils.o
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
OBJS += rglfw.o
endif
2017-10-14 00:13:23 +02:00
# Default target entry
2017-05-08 00:47:15 +02:00
all: raylib
2017-01-26 20:58:00 +01:00
2017-10-14 00:13:23 +02:00
# Generate standalone Android toolchain
2017-05-08 00:47:15 +02:00
# NOTE: Android toolchain could already be provided
2017-10-14 00:13:23 +02:00
generate_android_toolchain:
2017-01-26 20:58:00 +01:00
ifeq ($(PLATFORM),PLATFORM_ANDROID)
ifeq ($(ANDROID_ARCH),ARM)
$(ANDROID_NDK)/build/tools/make-standalone-toolchain.sh --platform=android-9 --toolchain=arm-linux-androideabi-4.9 --use-llvm --install-dir=$(ANDROID_TOOLCHAIN)
endif
ifeq ($(ANDROID_ARCH),ARM64)
$(ANDROID_NDK)/build/tools/make-standalone-toolchain.sh --platform=android-21 --toolchain=aarch64-linux-androideabi-4.9 --use-llvm --install-dir=$(ANDROID_TOOLCHAIN)
endif
endif
2016-07-18 17:07:50 +02:00
2017-10-14 00:13:23 +02:00
# Compile raylib library
2016-07-18 17:07:50 +02:00
raylib: $(OBJS)
ifeq ($(PLATFORM),PLATFORM_WEB)
2017-10-14 00:13:23 +02:00
# Compile raylib for web.
emcc -O1 $(OBJS) -o $(RAYLIB_RELEASE_PATH)/libraylib.bc
2017-10-02 14:12:03 +02:00
@echo "raylib library generated (libraylib.bc)!"
2016-07-18 17:07:50 +02:00
else
2017-10-02 14:12:03 +02:00
ifeq ($(RAYLIB_LIBTYPE),SHARED)
2017-07-17 14:16:23 +02:00
# NOTE: If using OpenAL Soft as static library, all its dependencies must be also linked in the shared library
ifeq ($(PLATFORM_OS),WINDOWS)
2017-11-30 16:59:09 +01:00
$(CC) -shared -o $(RAYLIB_RELEASE_PATH)/raylib.dll $(OBJS) -L$(RAYLIB_RELEASE_PATH) -lgdi32 -lopenal32 -lwinmm -Wl,--out-implib,$(RAYLIB_RELEASE_PATH)/libraylibdll.a
2017-07-17 14:16:23 +02:00
@echo "raylib dynamic library (raylib.dll) and import library (libraylibdll.a) generated!"
@echo "expected OpenAL Soft static library linking"
2017-07-17 14:16:23 +02:00
endif
2017-03-24 03:28:12 -05:00
ifeq ($(PLATFORM_OS),LINUX)
2017-10-14 00:13:23 +02:00
# Compile raylib to shared library version for GNU/Linux.
2017-03-24 03:32:07 -05:00
# WARNING: you should type "make clean" before doing this target
2017-11-30 16:59:09 +01:00
$(CC) -shared -o $(RAYLIB_RELEASE_PATH)/libraylib.so $(OBJS) -lGL -lopenal -lm -lpthread -ldl
2017-07-17 14:16:23 +02:00
@echo "raylib shared library generated (libraylib.so)!"
endif
2017-07-17 14:16:23 +02:00
ifeq ($(PLATFORM_OS),OSX)
2017-11-30 16:59:09 +01:00
$(CC) -dynamiclib -o $(RAYLIB_RELEASE_PATH)/libraylib.dylib $(OBJS) -L/usr/local/Cellar/glfw/3.2.1/lib -framework OpenGL -framework OpenAL -framework Cocoa
2017-10-14 00:13:23 +02:00
install_name_tool -id "libraylib.dylib" $(RAYLIB_RELEASE_PATH)/libraylib.dylib
2017-07-18 22:23:43 -04:00
@echo "raylib shared library generated (libraylib.dylib)!"
endif
2017-10-28 17:30:02 +02:00
ifeq ($(PLATFORM_OS),FREEBSD)
2017-10-28 18:41:29 +02:00
# WARNING: you should type "gmake clean" before doing this target
2017-11-30 16:59:09 +01:00
$(CC) -shared -o $(RAYLIB_RELEASE_PATH)/libraylib.so $(OBJS) -lGL -lopenal -lpthread
@echo "raylib shared library generated (libraylib.so)!"
2017-10-28 17:30:02 +02:00
endif
2017-01-26 20:58:00 +01:00
ifeq ($(PLATFORM),PLATFORM_ANDROID)
2017-10-14 00:13:23 +02:00
$(CC) -shared -o $(RAYLIB_RELEASE_PATH)/libraylib.so $(OBJS) $(LDFLAGS) $(LDLIBS)
2017-05-10 19:37:48 +02:00
@echo "raylib shared library generated (libraylib.so)!"
2017-01-26 20:58:00 +01:00
endif
2016-07-18 17:07:50 +02:00
else
2017-10-22 20:00:38 +02:00
# Compile raylib static library
@echo raylib library release path is $(RAYLIB_RELEASE_PATH)
2017-10-14 00:13:23 +02:00
$(AR) rcs $(RAYLIB_RELEASE_PATH)/libraylib.a $(OBJS)
2017-05-10 19:37:48 +02:00
@echo "raylib static library generated (libraylib.a)!"
2017-10-02 14:12:03 +02:00
ifeq ($(OPENAL_LIBTYPE),STATIC)
@echo "expected OpenAL Soft static library linking"
else
@echo "expected OpenAL Soft shared library linking"
endif
2016-07-18 17:07:50 +02:00
endif
endif
2017-10-14 00:13:23 +02:00
# Compile all modules with their prerequisites
2017-10-14 00:13:23 +02:00
# Compile core module
core.o : core.c raylib.h rlgl.h utils.h raymath.h gestures.h
2017-10-02 14:12:03 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS)
2017-11-30 16:59:09 +01:00
# Compile rglfw module
rglfw.o : rglfw.c
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS)
2017-10-14 00:13:23 +02:00
# Compile rlgl module
2016-07-18 17:07:50 +02:00
rlgl.o : rlgl.c rlgl.h raymath.h
2017-10-02 14:12:03 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS)
2017-03-24 03:32:07 -05:00
2017-10-14 00:13:23 +02:00
# Compile shapes module
shapes.o : shapes.c raylib.h rlgl.h
2017-10-02 14:12:03 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS)
2017-03-24 03:32:07 -05:00
2017-10-14 00:13:23 +02:00
# Compile textures module
2016-07-18 17:07:50 +02:00
textures.o : textures.c rlgl.h utils.h
2017-10-02 14:12:03 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS)
2017-10-14 00:13:23 +02:00
# Compile text module
text.o : text.c raylib.h utils.h
2017-10-02 14:12:03 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS)
2017-10-14 00:13:23 +02:00
# Compile models module
2016-07-18 17:07:50 +02:00
models.o : models.c raylib.h rlgl.h raymath.h
2017-10-02 14:12:03 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS)
2017-10-14 00:13:23 +02:00
# Compile audio module
2016-07-18 17:07:50 +02:00
audio.o : audio.c raylib.h
2017-10-03 15:02:32 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) $(ALFLAGS)
2017-03-24 03:32:07 -05:00
2017-10-14 00:13:23 +02:00
# Compile stb_vorbis library
2017-10-03 15:02:32 +02:00
stb_vorbis.o: external/stb_vorbis.c external/stb_vorbis.h
2017-10-02 14:12:03 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM)
2017-10-14 00:13:23 +02:00
# Compile utils module
2016-07-18 17:07:50 +02:00
utils.o : utils.c utils.h
2017-10-02 14:12:03 +02:00
$(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM)
2016-07-18 17:07:50 +02:00
2017-10-14 00:13:23 +02:00
# Install generated and needed files to required directories
# TODO: add other platforms.
install :
ifeq ($(ROOT),root)
2017-03-24 03:28:12 -05:00
ifeq ($(PLATFORM_OS),LINUX)
# On GNU/Linux there are some standard directories that contain
# libraries and header files. These directory (/usr/local/lib and
# /usr/local/include/) are for libraries that are installed
# manually (without a package manager).
2017-10-02 14:12:03 +02:00
ifeq ($(RAYLIB_LIBTYPE),SHARED)
2017-10-14 00:13:23 +02:00
cp --update $(RAYLIB_RELEASE_PATH)/libraylib.so /usr/local/lib/libraylib.so
else
2016-07-18 15:13:43 +02:00
cp --update raylib.h /usr/local/include/raylib.h
2017-10-14 00:13:23 +02:00
cp --update $(RAYLIB_RELEASE_PATH)/libraylib.a /usr/local/lib/libraylib.a
endif
@echo "raylib dev files installed/updated!"
else
@echo "This function works only on GNU/Linux systems"
endif
else
@echo "Error: no root permissions"
endif
2017-10-14 00:13:23 +02:00
# Remove raylib dev files installed on the system
# TODO: see 'install' target.
2017-05-08 00:47:15 +02:00
uninstall :
ifeq ($(ROOT),root)
2017-03-24 03:28:12 -05:00
ifeq ($(PLATFORM_OS),LINUX)
rm --force /usr/local/include/raylib.h
2017-10-02 14:12:03 +02:00
ifeq ($(RAYLIB_LIBTYPE),SHARED)
rm --force /usr/local/lib/libraylib.so
else
rm --force /usr/local/lib/libraylib.a
endif
2017-10-02 14:12:03 +02:00
@echo "raylib development files removed!"
else
2017-10-02 14:12:03 +02:00
@echo "This function works only on GNU/Linux systems"
endif
else
@echo "Error: no root permissions"
endif
2017-10-14 00:13:23 +02:00
# Clean everything
clean:
ifeq ($(PLATFORM_OS),WINDOWS)
2017-10-14 00:13:23 +02:00
del *.o $(RAYLIB_RELEASE_PATH)/libraylib.a $(RAYLIB_RELEASE_PATH)/libraylib.bc $(RAYLIB_RELEASE_PATH)/libraylib.so external/stb_vorbis.o
else
2017-10-14 00:13:23 +02:00
rm -f *.o $(RAYLIB_RELEASE_PATH)/libraylib.a $(RAYLIB_RELEASE_PATH)/libraylib.bc $(RAYLIB_RELEASE_PATH)/libraylib.so external/stb_vorbis.o
2017-01-26 20:58:00 +01:00
endif
ifeq ($(PLATFORM),PLATFORM_ANDROID)
rm -rf $(ANDROID_TOOLCHAIN)
endif
@echo "removed all generated files!"