From dbec22f2df42811216454ffa3e9bdd4d5e4b8d45 Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sat, 16 Jul 2016 17:31:54 +0200 Subject: restyle Makefile of 'src/' folder and fix targets --- src/Makefile | 72 +++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index b37cccf8..b0ddadad 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,25 +1,28 @@ -#************************************************************************************************** +#****************************************************************************** # -# raylib makefile for desktop platforms, Raspberry Pi and HTML5 (emscripten) +# raylib makefile for desktop platforms, Raspberry Pi and HTML5 (emscripten) # -# Copyright (c) 2014 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. +# Copyright (c) 2014 Ramon Santamaria (@raysan5) # -# 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: +# 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. # -# 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. +# 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: # -# 2. Altered source versions must be plainly marked as such, and must not be misrepresented -# as being the original software. +# 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. # -# 3. This notice may not be removed or altered from any source distribution. +# 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 @@ -29,7 +32,8 @@ PLATFORM ?= PLATFORM_DESKTOP # 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 + # No uname.exe on MinGW!, but OS=Windows_NT on Windows! + # ifeq ($(UNAME),Msys) -> Windows ifeq ($(OS),Windows_NT) PLATFORM_OS=WINDOWS else @@ -74,7 +78,7 @@ endif # -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, faster) +# -fgnu89-inline declaring inline functions support (GCC optimized) # -Wno-missing-braces ignore invalid warning (GCC bug 53119) CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces @@ -82,7 +86,9 @@ CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces # define any directories containing required header files ifeq ($(PLATFORM),PLATFORM_RPI) - INCLUDES = -I. -Iexternal -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads + INCLUDES = -I. -Iexternal -I/opt/vc/include \ + -I/opt/vc/include/interface/vmcs_host/linux \ + -I/opt/vc/include/interface/vcos/pthreads else # STB libraries and others INCLUDES = -I. -Iexternal @@ -93,19 +99,29 @@ else endif # define all object files required -OBJS = core.o rlgl.o shapes.o text.o textures.o models.o audio.o utils.o camera.o gestures.o stb_vorbis.o +OBJS = core.o rlgl.o shapes.o text.o textures.o models.o audio.o utils.o \ + camera.o gestures.o stb_vorbis.o -# typing 'make' will invoke the default target entry called 'all', -# in this case, the 'default' target entry is raylib -all: raylib +# typing 'make', it will invoke the first target on the file. +# 'all' target compile raylib into static, web and dynamic library versions. +# WIP: allow compiling of other versions. +all: libraylib.a -# compile raylib library -raylib: $(OBJS) -ifeq ($(PLATFORM),PLATFORM_WEB) - emcc -O1 $(OBJS) -o libraylib.bc -else +# compile raylib static library for desktop platforms +libraylib.a : $(OBJS) ar rcs libraylib.a $(OBJS) -endif + @echo "\t**libraylib.a generated!**" + +libraylib.bc : $(OBJS) + emcc -O1 $(OBJS) -o libraylib.bc + +# compile raylib library +# raylib: $(OBJS) +# ifeq ($(PLATFORM),PLATFORM_WEB) +# emcc -O1 $(OBJS) -o libraylib.bc +#else +# ar rcs libraylib.a $(OBJS) +#endif # compile core module # emcc core.c -o core.bc -DPLATFORM_DESKTOP -- cgit v1.2.3 From 6f335d2c9ea346c44f4000424cc389fd8db6a035 Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sat, 16 Jul 2016 18:38:17 +0200 Subject: add 'install' and 'unistall' target The first target allow makefile to install the dev files (static library and header) to standard directories on GNU/Linux platforms; the second allow it to unistall (remove) the dev files. It needs lot of improvements. --- src/Makefile | 52 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index b0ddadad..c294a813 100644 --- a/src/Makefile +++ b/src/Makefile @@ -24,12 +24,15 @@ # #****************************************************************************** -.PHONY: all clean +.PHONY: all clean install unistall # define raylib platform to compile for # possible platforms: PLATFORM_DESKTOP PLATFORM_RPI PLATFORM_WEB PLATFORM ?= PLATFORM_DESKTOP +# determine if the file has root access (only for installing raylib) +ROOT = $(shell whoami) + # determine PLATFORM_OS in case PLATFORM_DESKTOP selected ifeq ($(PLATFORM),PLATFORM_DESKTOP) # No uname.exe on MinGW!, but OS=Windows_NT on Windows! @@ -103,25 +106,17 @@ OBJS = core.o rlgl.o shapes.o text.o textures.o models.o audio.o utils.o \ camera.o gestures.o stb_vorbis.o # typing 'make', it will invoke the first target on the file. -# 'all' target compile raylib into static, web and dynamic library versions. -# WIP: allow compiling of other versions. +# The target 'all' compile raylib into static, web and dynamic library. +# TODO: add possibility to compile web and dynamic version of raylib. all: libraylib.a - # compile raylib static library for desktop platforms libraylib.a : $(OBJS) ar rcs libraylib.a $(OBJS) - @echo "\t**libraylib.a generated!**" + @echo "libraylib.a generated (static library)!" libraylib.bc : $(OBJS) emcc -O1 $(OBJS) -o libraylib.bc - -# compile raylib library -# raylib: $(OBJS) -# ifeq ($(PLATFORM),PLATFORM_WEB) -# emcc -O1 $(OBJS) -o libraylib.bc -#else -# ar rcs libraylib.a $(OBJS) -#endif + @echo "libraylib.bc generated (web version)!" # compile core module # emcc core.c -o core.bc -DPLATFORM_DESKTOP @@ -168,6 +163,37 @@ gestures.o: gestures.c stb_vorbis.o: external/stb_vorbis.c $(CC) -c external/stb_vorbis.c -O1 $(INCLUDES) -D$(PLATFORM) +# It installs (copy) raylib dev files (static library and header) to standard +# directories on GNU/Linux platform. +# TODO: add other platforms. +install : +ifeq ($(ROOT),root) + ifeq ($(UNAMEOS),Linux) + cp --update libraylib.a /usr/local/lib/libraylib.a + cp --update raylib.h /usr/local/include/raylib.h + @echo "raylib dev files installed/updated!" + else + @echo "This function works only on GNU/Linux systems" + endif +else + @echo "Error: no root permissions" +endif + +# it removes raylib dev files installed on the system. +# TODO: see 'install' target. +unistall : +ifeq ($(ROOT),root) + ifeq ($(UNAMEOS),Linux) + rm --force /usr/local/lib/libraylib.a + rm --force /usr/local/include/raylib.h + @echo "raylib dev files removed!" + else + @echo "This function works only on GNU/Linux systems" + endif +else + @echo "Error: no root permissions" +endif + # clean everything clean: ifeq ($(PLATFORM),PLATFORM_DESKTOP) -- cgit v1.2.3 From e62c30c8b1098d718aa419189c3f86adbe9c9383 Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sat, 16 Jul 2016 20:24:14 +0200 Subject: improve 'clean' target of 'src/' makefile --- src/Makefile | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index c294a813..3a45e73e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -196,24 +196,12 @@ endif # clean everything clean: -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),WINDOWS) - del *.o libraylib.a - else - rm -f *.o libraylib.a - endif -endif -ifeq ($(PLATFORM),PLATFORM_WEB) - ifeq ($(PLATFORM_OS),WINDOWS) - del *.o libraylib.bc - else - rm -f *.o libraylib.bc - endif -endif -ifeq ($(PLATFORM),PLATFORM_RPI) - rm -f *.o libraylib.a +ifeq ($(PLATFORM_OS),WINDOWS) + del *.o libraylib.a libraylib.bc +else + rm -f *.o libraylib.a libraylib.bc endif - @echo Cleaning done + @echo "removed all generated files!" # instead of defining every module one by one, we can define a pattern # this pattern below will automatically compile every module defined on $(OBJS) -- cgit v1.2.3 From 6efaa78058b3ce5f38cdaf7dd53dcbfb044b01ba Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sat, 16 Jul 2016 21:01:43 +0200 Subject: improve the compilation of all modules --- src/Makefile | 61 ++++++++++++++---------------------------------------------- 1 file changed, 14 insertions(+), 47 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index 3a45e73e..39f3c8a3 100644 --- a/src/Makefile +++ b/src/Makefile @@ -101,14 +101,14 @@ else INCLUDES += -Iexternal/openal_soft/include endif -# define all object files required -OBJS = core.o rlgl.o shapes.o text.o textures.o models.o audio.o utils.o \ - camera.o gestures.o stb_vorbis.o +# define all object files required with a wildcard +OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) # typing 'make', it will invoke the first target on the file. # The target 'all' compile raylib into static, web and dynamic library. # TODO: add possibility to compile web and dynamic version of raylib. all: libraylib.a + # compile raylib static library for desktop platforms libraylib.a : $(OBJS) ar rcs libraylib.a $(OBJS) @@ -118,57 +118,24 @@ libraylib.bc : $(OBJS) emcc -O1 $(OBJS) -o libraylib.bc @echo "libraylib.bc generated (web version)!" -# compile core module -# emcc core.c -o core.bc -DPLATFORM_DESKTOP -core.o: core.c - $(CC) -c core.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) - -# compile rlgl module -rlgl.o: rlgl.c - $(CC) -c rlgl.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) - -# compile shapes module -shapes.o: shapes.c - $(CC) -c shapes.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) - -# compile textures module -textures.o: textures.c - $(CC) -c textures.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) - -# compile text module -text.o: text.c - $(CC) -c text.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) - -# compile models module -models.o: models.c - $(CC) -c models.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) - -# compile audio module -audio.o: audio.c - $(CC) -c audio.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) - -# compile utils module -utils.o: utils.c - $(CC) -c utils.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) - -# compile camera module -camera.o: camera.c - $(CC) -c camera.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) - -# compile gestures module -gestures.o: gestures.c - $(CC) -c gestures.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) +# compile all modules +%.o : %.c %.h +ifneq ($(PLATFORM),PLATTFORM_WEB) + $(CC) -c -o $@ $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) +else + emcc $< -o $@ -DPLATFORM_DEKSTOP +endif # compile stb_vorbis library -stb_vorbis.o: external/stb_vorbis.c - $(CC) -c external/stb_vorbis.c -O1 $(INCLUDES) -D$(PLATFORM) +#stb_vorbis.o: external/stb_vorbis.c +# $(CC) -c external/stb_vorbis.c -O1 $(INCLUDES) -D$(PLATFORM) # It installs (copy) raylib dev files (static library and header) to standard # directories on GNU/Linux platform. # TODO: add other platforms. install : ifeq ($(ROOT),root) - ifeq ($(UNAMEOS),Linux) + ifeq ($(PLATFORM_OS),LINUX) cp --update libraylib.a /usr/local/lib/libraylib.a cp --update raylib.h /usr/local/include/raylib.h @echo "raylib dev files installed/updated!" @@ -183,7 +150,7 @@ endif # TODO: see 'install' target. unistall : ifeq ($(ROOT),root) - ifeq ($(UNAMEOS),Linux) + ifeq ($(PLATFORM_OS),LINUX) rm --force /usr/local/lib/libraylib.a rm --force /usr/local/include/raylib.h @echo "raylib dev files removed!" -- cgit v1.2.3 From d38fb9bda278134c749c4ccbd736edf028dd131c Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sat, 16 Jul 2016 21:23:21 +0200 Subject: fix small things on makefile of 'src/' folder --- src/Makefile | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index 39f3c8a3..034bb6a0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -69,11 +69,9 @@ endif # define compiler: gcc for C program, define as g++ for C++ ifeq ($(PLATFORM),PLATFORM_WEB) - # define emscripten compiler - CC = emcc + CC = emcc # emscripten compiler else - # define default gcc compiler - CC = gcc + CC = gcc # default gcc compiler endif # define compiler flags: @@ -106,16 +104,16 @@ OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) # typing 'make', it will invoke the first target on the file. # The target 'all' compile raylib into static, web and dynamic library. -# TODO: add possibility to compile web and dynamic version of raylib. -all: libraylib.a +# TODO: add possibility to compile dynamic version of raylib. +all: libraylib.a libraylib.bc # compile raylib static library for desktop platforms libraylib.a : $(OBJS) - ar rcs libraylib.a $(OBJS) + ar rcs $@ $(OBJS) @echo "libraylib.a generated (static library)!" libraylib.bc : $(OBJS) - emcc -O1 $(OBJS) -o libraylib.bc + emcc -O1 $(OBJS) -o $@ @echo "libraylib.bc generated (web version)!" # compile all modules @@ -123,7 +121,7 @@ libraylib.bc : $(OBJS) ifneq ($(PLATFORM),PLATTFORM_WEB) $(CC) -c -o $@ $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) else - emcc $< -o $@ -DPLATFORM_DEKSTOP + emcc -c -o $@ $< $(CFLAGS) $(INCLUDES) -D$(GRAPHICS) -DPLATFORM_DEKSTOP endif # compile stb_vorbis library -- cgit v1.2.3 From 94a5fc5c2c816c9d38a5065bbc267c339b3845a1 Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sun, 17 Jul 2016 15:54:52 +0200 Subject: add some explanation of makefile in 'src/' --- src/Makefile | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index 034bb6a0..88b9da04 100644 --- a/src/Makefile +++ b/src/Makefile @@ -31,6 +31,8 @@ PLATFORM ?= PLATFORM_DESKTOP # 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) # determine PLATFORM_OS in case PLATFORM_DESKTOP selected @@ -100,6 +102,8 @@ else endif # define all object files required with a wildcard +# The wildcard takes all files that finish with ".c", then it replaces the +# extentions with ".o", that are the object files. OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) # typing 'make', it will invoke the first target on the file. @@ -116,7 +120,13 @@ libraylib.bc : $(OBJS) emcc -O1 $(OBJS) -o $@ @echo "libraylib.bc generated (web version)!" -# compile all modules +# Instead of defining every module one by one, we can define a pattern that +# automatically compiles every module defined on $(OBJS). +# core.o : core.c core.h +# $(CC) -c -o core.o core.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) +# +# The automatic variables "$@" and "$<" are the target and the first +# prerequisite. %.o : %.c %.h ifneq ($(PLATFORM),PLATTFORM_WEB) $(CC) -c -o $@ $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) @@ -125,8 +135,8 @@ else endif # compile stb_vorbis library -#stb_vorbis.o: external/stb_vorbis.c -# $(CC) -c external/stb_vorbis.c -O1 $(INCLUDES) -D$(PLATFORM) +stb_vorbis.o: external/stb_vorbis.c + $(CC) -c external/stb_vorbis.c -O1 $(INCLUDES) -D$(PLATFORM) # It installs (copy) raylib dev files (static library and header) to standard # directories on GNU/Linux platform. @@ -149,6 +159,10 @@ endif unistall : ifeq ($(ROOT),root) 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). rm --force /usr/local/lib/libraylib.a rm --force /usr/local/include/raylib.h @echo "raylib dev files removed!" @@ -167,8 +181,3 @@ else rm -f *.o libraylib.a libraylib.bc endif @echo "removed all generated files!" - -# instead of defining every module one by one, we can define a pattern -# this pattern below will automatically compile every module defined on $(OBJS) -#%.o : %.c -# $(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) -- cgit v1.2.3 From 2272a4722fc22fd700e03511a956d382f391a8dd Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sun, 17 Jul 2016 17:18:34 +0200 Subject: restore the original method to compile all modules This commit restores the original method to compile all modules, but fix prerequisites. --- src/Makefile | 55 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index 88b9da04..6c1a2a7c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -106,37 +106,56 @@ endif # extentions with ".o", that are the object files. OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) +AUDIO_PREREQUISITES = external/stb_vorbis.o external/jar_xm.h \ + external/jar_mod.h + # typing 'make', it will invoke the first target on the file. # The target 'all' compile raylib into static, web and dynamic library. -# TODO: add possibility to compile dynamic version of raylib. -all: libraylib.a libraylib.bc +all: libraylib.a #libraylib.bc #libraylib.so -# compile raylib static library for desktop platforms +# compile raylib static library for desktop platforms. libraylib.a : $(OBJS) ar rcs $@ $(OBJS) @echo "libraylib.a generated (static library)!" +# compile raylib for web. libraylib.bc : $(OBJS) emcc -O1 $(OBJS) -o $@ @echo "libraylib.bc generated (web version)!" -# Instead of defining every module one by one, we can define a pattern that -# automatically compiles every module defined on $(OBJS). -# core.o : core.c core.h -# $(CC) -c -o core.o core.c $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -# -# The automatic variables "$@" and "$<" are the target and the first -# prerequisite. -%.o : %.c %.h -ifneq ($(PLATFORM),PLATTFORM_WEB) - $(CC) -c -o $@ $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) -else - emcc -c -o $@ $< $(CFLAGS) $(INCLUDES) -D$(GRAPHICS) -DPLATFORM_DEKSTOP -endif +camera.o : camera.c camera.h raylib.h + $(CC) -c $< $(CFLAGS) $(INCLUDES) + +core.o : core.c raylib.h rlgl.h utils.h raymath.h + $(CC) -c $< $(CFLAGS) $(INCLUDE) -D$(PLATFORM) + +gestures.o : gestures.c gestures.h raylib.h + $(CC) -c $< $(CFLAGS) $(INCLUDE) + +models.o : models.c raylib.h rlgl.h raymath.h + $(CC) -c $< $(CFLAGS) $(INCLUDE) -D$(PLATFORM) + +rlgl.o : rlgl.c rlgl.h + $(CC) -c $< $(CFLAGS) $(INCLUDE) -D$(GRAPHICS) + +shapes.o : shapes.c raylib.h rlgl.h + $(CC) -c $< $(CFLAGS) $(INCLUDE) + +text.o : text.c raylib.h utils.h + $(CC) -c $< $(CFLAGS) $(INCLUDE) + +textures.o : textures.c rlgl.h utils.h + $(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -D$(GRAPHICS) + +utils.o : utils.c utils.h + $(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) + +audio.o : audio.c audio.h external/stb_vorbis.o + $(CC) -c $< external/stb_vorbis.o $(CFLAGS) $(INCLUDES) -D$(PLATFORM) # compile stb_vorbis library -stb_vorbis.o: external/stb_vorbis.c - $(CC) -c external/stb_vorbis.c -O1 $(INCLUDES) -D$(PLATFORM) +external/stb_vorbis.o: external/stb_vorbis.c external/stb_vorbis.h + $(CC) -c -o $@ $< -O1 $(INCLUDES) -D$(PLATFORM) # It installs (copy) raylib dev files (static library and header) to standard # directories on GNU/Linux platform. -- cgit v1.2.3 From 13c56887f11b0def4e2b55f9514c2aaceeb0e4c7 Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sun, 17 Jul 2016 17:23:41 +0200 Subject: fix 'external/stb_vorbis.c" compilation --- src/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index 6c1a2a7c..29d4f398 100644 --- a/src/Makefile +++ b/src/Makefile @@ -105,9 +105,7 @@ endif # The wildcard takes all files that finish with ".c", then it replaces the # extentions with ".o", that are the object files. OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) - -AUDIO_PREREQUISITES = external/stb_vorbis.o external/jar_xm.h \ - external/jar_mod.h +OBJS += external/stb_vorbis.o # typing 'make', it will invoke the first target on the file. # The target 'all' compile raylib into static, web and dynamic library. @@ -123,6 +121,8 @@ libraylib.bc : $(OBJS) emcc -O1 $(OBJS) -o $@ @echo "libraylib.bc generated (web version)!" +# compile all modules with relative prerequisites (header files of the +# project). camera.o : camera.c camera.h raylib.h $(CC) -c $< $(CFLAGS) $(INCLUDES) @@ -150,8 +150,8 @@ textures.o : textures.c rlgl.h utils.h utils.o : utils.c utils.h $(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -audio.o : audio.c audio.h external/stb_vorbis.o - $(CC) -c $< external/stb_vorbis.o $(CFLAGS) $(INCLUDES) -D$(PLATFORM) +audio.o : audio.c audio.h + $(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM) # compile stb_vorbis library external/stb_vorbis.o: external/stb_vorbis.c external/stb_vorbis.h -- cgit v1.2.3 From ebfb1978b84bc4254b4da663885c1a81993214ae Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Sun, 17 Jul 2016 17:56:57 +0200 Subject: allow to compile shared version of raylib --- src/Makefile | 51 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index 29d4f398..c5465c68 100644 --- a/src/Makefile +++ b/src/Makefile @@ -24,12 +24,18 @@ # #****************************************************************************** +# Please read the wiki to know how to compile raylib, because there are +# different methods. + .PHONY: all clean install unistall # define raylib platform to compile for # possible platforms: PLATFORM_DESKTOP PLATFORM_RPI PLATFORM_WEB PLATFORM ?= PLATFORM_DESKTOP +# define if you want shared or static version of library. +SHARED ?= NO + # 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"). @@ -84,6 +90,9 @@ endif # -fgnu89-inline declaring inline functions support (GCC optimized) # -Wno-missing-braces ignore invalid warning (GCC bug 53119) CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces +ifeq ($(SHARED),YES) + CFLAGS += -fPIC +endif #CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes @@ -107,15 +116,17 @@ endif OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) OBJS += external/stb_vorbis.o -# typing 'make', it will invoke the first target on the file. -# The target 'all' compile raylib into static, web and dynamic library. -all: libraylib.a #libraylib.bc #libraylib.so - # compile raylib static library for desktop platforms. +# The automatic variable "$@" is the target name, while "$<" is the first +# prerequisite. libraylib.a : $(OBJS) ar rcs $@ $(OBJS) @echo "libraylib.a generated (static library)!" +# compile raylib to shared library version. +libraylib.so : $(OBJS) + $(CC) -shared -o $@ $(OBJS) + # compile raylib for web. libraylib.bc : $(OBJS) emcc -O1 $(OBJS) -o $@ @@ -123,13 +134,13 @@ libraylib.bc : $(OBJS) # compile all modules with relative prerequisites (header files of the # project). -camera.o : camera.c camera.h raylib.h +camera.o : camera.c raylib.h $(CC) -c $< $(CFLAGS) $(INCLUDES) core.o : core.c raylib.h rlgl.h utils.h raymath.h $(CC) -c $< $(CFLAGS) $(INCLUDE) -D$(PLATFORM) -gestures.o : gestures.c gestures.h raylib.h +gestures.o : gestures.c raylib.h $(CC) -c $< $(CFLAGS) $(INCLUDE) models.o : models.c raylib.h rlgl.h raymath.h @@ -155,7 +166,7 @@ audio.o : audio.c audio.h # compile stb_vorbis library external/stb_vorbis.o: external/stb_vorbis.c external/stb_vorbis.h - $(CC) -c -o $@ $< -O1 $(INCLUDES) -D$(PLATFORM) + $(CC) -c -o $@ $< -O1 $(CFLAGS) $(INCLUDES) -D$(PLATFORM) # It installs (copy) raylib dev files (static library and header) to standard # directories on GNU/Linux platform. @@ -163,8 +174,16 @@ external/stb_vorbis.o: external/stb_vorbis.c external/stb_vorbis.h install : ifeq ($(ROOT),root) ifeq ($(PLATFORM_OS),LINUX) - cp --update libraylib.a /usr/local/lib/libraylib.a + # 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). cp --update raylib.h /usr/local/include/raylib.h + ifeq ($(SHARED),YES) + cp --update libraylib.so /usr/local/lib/libraylib.so + else + cp --update libraylib.a /usr/local/lib/libraylib.a + endif @echo "raylib dev files installed/updated!" else @echo "This function works only on GNU/Linux systems" @@ -178,12 +197,12 @@ endif unistall : ifeq ($(ROOT),root) 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). - rm --force /usr/local/lib/libraylib.a - rm --force /usr/local/include/raylib.h + rm --force /usr/local/include/raylib.h + ifeq ($(SHARED),YES) + rm --force /usr/local/lib/libraylib.so + else + rm --force /usr/local/lib/libraylib.a + endif @echo "raylib dev files removed!" else @echo "This function works only on GNU/Linux systems" @@ -195,8 +214,8 @@ endif # clean everything clean: ifeq ($(PLATFORM_OS),WINDOWS) - del *.o libraylib.a libraylib.bc + del *.o libraylib.a libraylib.bc libraylib.so external/stb_vorbis.o else - rm -f *.o libraylib.a libraylib.bc + rm -f *.o libraylib.a libraylib.bc libraylib.so external/stb_vorbis.o endif @echo "removed all generated files!" -- cgit v1.2.3 From de865a9b55776ba830c7b7f11ded0cf19ceda49c Mon Sep 17 00:00:00 2001 From: LelixSuper Date: Mon, 18 Jul 2016 15:13:43 +0200 Subject: fix small things on 'src/' makefile --- src/Makefile | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index c5465c68..10f4a2e4 100644 --- a/src/Makefile +++ b/src/Makefile @@ -119,21 +119,27 @@ OBJS += external/stb_vorbis.o # compile raylib static library for desktop platforms. # The automatic variable "$@" is the target name, while "$<" is the first # prerequisite. +# WARNING: you must type "make clean" before doing this target if you have +# done "make libraylib.so". libraylib.a : $(OBJS) ar rcs $@ $(OBJS) @echo "libraylib.a generated (static library)!" -# compile raylib to shared library version. +# compile raylib to shared library version for GNU/Linux. +# WARNING: you must type "make clean" before doing this target if you have +# done "make libraylib.so". libraylib.so : $(OBJS) $(CC) -shared -o $@ $(OBJS) + @echo "libraylib.so generated (shared library)!" # compile raylib for web. +# WARNING: you must type "make clean" before doing this target if you have +# done "make libraylib.a/.bc". libraylib.bc : $(OBJS) emcc -O1 $(OBJS) -o $@ @echo "libraylib.bc generated (web version)!" -# compile all modules with relative prerequisites (header files of the -# project). +# It compile all modules with their prerequisite. camera.o : camera.c raylib.h $(CC) -c $< $(CFLAGS) $(INCLUDES) @@ -168,8 +174,8 @@ audio.o : audio.c audio.h external/stb_vorbis.o: external/stb_vorbis.c external/stb_vorbis.h $(CC) -c -o $@ $< -O1 $(CFLAGS) $(INCLUDES) -D$(PLATFORM) -# It installs (copy) raylib dev files (static library and header) to standard -# directories on GNU/Linux platform. +# It installs generated and needed files to compile projects using raylib. +# The installation works manually. # TODO: add other platforms. install : ifeq ($(ROOT),root) @@ -178,10 +184,10 @@ ifeq ($(ROOT),root) # libraries and header files. These directory (/usr/local/lib and # /usr/local/include/) are for libraries that are installed # manually (without a package manager). - cp --update raylib.h /usr/local/include/raylib.h ifeq ($(SHARED),YES) cp --update libraylib.so /usr/local/lib/libraylib.so else + cp --update raylib.h /usr/local/include/raylib.h cp --update libraylib.a /usr/local/lib/libraylib.a endif @echo "raylib dev files installed/updated!" -- cgit v1.2.3