From afc836902be35e37b5860d42029514cef6394454 Mon Sep 17 00:00:00 2001 From: zv0n Date: Sun, 22 Nov 2020 21:58:37 +0100 Subject: [PATCH] Make dynamic library work on macos --- .gitignore | 1 + sdlpp/Makefile | 23 +++++++++++++++++++++-- sdlpp/sdlpp_linerenderer.cpp | 1 + sdlpp/sdlpp_rectrenderer.cpp | 1 + tetris/Makefile | 24 ++++++++++++++++++++++-- 5 files changed, 46 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 91600cf..9f435c9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.o *.so *.so.* +*.dylib demo test tetris/tetris diff --git a/sdlpp/Makefile b/sdlpp/Makefile index 1f7ca37..7e72384 100644 --- a/sdlpp/Makefile +++ b/sdlpp/Makefile @@ -1,12 +1,24 @@ CXX ?= g++ CPPFLAGS = -std=c++14 -Wall -Wextra -pedantic -LIBRARYFLAGS = -fPIC MAJOR ?= 1 MINOR ?= 0 RELEASE ?= 0 +ifeq ($(OS),Windows_NT) +UNAME_S := Windows +else +UNAME_S := $(shell uname -s) +endif + +ifeq ($(UNAME_S),Linux) SDLPPLIBRARY = libsdlpp.so.${MAJOR}.${MINOR}.${RELEASE} +LIBRARYFLAGS = -fPIC +endif +ifeq ($(UNAME_S),Darwin) +SDLPPLIBRARY = libsdlpp.dylib +LIBRARYFLAGS = +endif OBJECTFILES = sdlpp_circlecolider.o sdlpp_circlerenderer.o sdlpp_collision.o sdlpp_common.o sdlpp_font.o sdlpp_linerenderer.o sdlpp_rectcolider.o sdlpp_rectrenderer.o sdlpp_renderer.o sdlpp_renderobject.o sdlpp_scene.o sdlpp_textrenderer.o sdlpp_texture.o sdlpp_window.o @@ -15,13 +27,20 @@ all: ${SDLPPLIBRARY} %.o: %.cpp ${CXX} ${CPPFLAGS} ${LIBRARYFLAGS} -c $< -o $@ +ifeq ($(UNAME_S),Linux) ${SDLPPLIBRARY}: ${OBJECTFILES} ${CXX} ${CPPFLAGS} -shared -Wl,-soname,libsdlpp.so.${MAJOR}\ -o ${SDLPPLIBRARY} $^ ln -sf ${SDLPPLIBRARY} libsdlpp.so ln -sf ${SDLPPLIBRARY} libsdlpp.so.${MAJOR} +endif +ifeq ($(UNAME_S),Darwin) +${SDLPPLIBRARY}: ${OBJECTFILES} + ${CXX} ${CPPFLAGS} -dynamiclib -install_name ${SDLPPLIBRARY}\ + -current_version ${MAJOR}.${MINOR} $^ -lSDL2 -lSDL2_image -lSDL2_gfx -lSDL2_ttf -o $@ +endif clean: - ${RM} *.so* *.o + ${RM} *.so* *.o *.dylib .PHONY: all clean test diff --git a/sdlpp/sdlpp_linerenderer.cpp b/sdlpp/sdlpp_linerenderer.cpp index db9f717..2b74b1c 100644 --- a/sdlpp/sdlpp_linerenderer.cpp +++ b/sdlpp/sdlpp_linerenderer.cpp @@ -1,3 +1,4 @@ +#include #include "sdlpp_linerenderer.hpp" namespace SDLPP { diff --git a/sdlpp/sdlpp_rectrenderer.cpp b/sdlpp/sdlpp_rectrenderer.cpp index 8d4c8bf..50aff61 100644 --- a/sdlpp/sdlpp_rectrenderer.cpp +++ b/sdlpp/sdlpp_rectrenderer.cpp @@ -1,3 +1,4 @@ +#include #include "sdlpp_rectrenderer.hpp" namespace SDLPP { diff --git a/tetris/Makefile b/tetris/Makefile index 589e993..4f6ae24 100644 --- a/tetris/Makefile +++ b/tetris/Makefile @@ -3,11 +3,28 @@ CFLAGS ?= -O2 -Wall -Wextra -std=c++14 PREFIX ?= /usr/local/bin LDFLAGS ?= -lSDL2 -lSDL2_image -lSDL2_gfx -lSDL2_ttf -pthread +ifeq ($(OS),Windows_NT) +UNAME_S := Windows +else +UNAME_S := $(shell uname -s) +endif + +TETRIS_OBJECTS = tetris.o scenes.o config.o functions.o global_vars.o + +ifeq ($(UNAME_S),Linux) +TETRIS_OBJECTS += libsdlpp.so +SDLLIB = libsdlpp +endif +ifeq ($(UNAME_S),Darwin) +TETRIS_OBJECTS += libsdlpp.dylib +SDLLIB = sdlpp +endif + .PHONY: default default: tetris -tetris: tetris.o scenes.o config.o functions.o global_vars.o libsdlpp.so - $(CXX) $(CFLAGS) -o $@ $^ ${LDFLAGS} -L -llibsdlpp +tetris: ${TETRIS_OBJECTS} + $(CXX) $(CFLAGS) -o $@ $^ ${LDFLAGS} -L $(shell pwd) -l${SDLLIB} tetris.o: tetris.cpp ../sdlpp/sdlpp.hpp config.hpp custom_classes.hpp scenes.hpp global_vars.hpp functions.hpp $(CXX) $(CFLAGS) -c -o $@ $< @@ -23,6 +40,9 @@ libsdlpp.so: ../sdlpp $(MAKE) -C ../sdlpp cp ../sdlpp/libsdlpp.so . ln -sf libsdlpp.so libsdlpp.so.1 +libsdlpp.dylib: ../sdlpp + $(MAKE) -C ../sdlpp + cp ../sdlpp/libsdlpp.dylib . start: LD_LIBRARY_PATH=$$(pwd) ./tetris