From 37fa527d75658e5ff363c83c31d1b7e079e7f87d Mon Sep 17 00:00:00 2001 From: Marek Karcz Date: Fri, 4 Jan 2019 23:36:40 -0500 Subject: [PATCH] Add automatic detection of 32/64-bit platform on linux (makefile) --- ReadMe.txt | 19 ++++++++++++++++--- makefile | 25 +++++++++++++++++++------ 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/ReadMe.txt b/ReadMe.txt index d399bfb..bc75c9c 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -18,8 +18,9 @@ MOS-6502-compatible virtual computer featuring BASIC interpreter, machine code monitor, input/output device emulation etc. Main UI of the program works in DOS/shell console. Graphics display emulation requires SDL2. -Makefile are included to build under Windows 32/64 (mingw compiler required) -and under Linux Ubuntu or Ubuntu based distro. +The best way is to download source code of SDL2 and build it. +Makefile-s are included to build under Windows 32/64 (mingw compiler required) +and under Linux Ubuntu or Ubuntu based distro (GNU make). SDL2 library must be on your execution path in order to run program. E.g.: set PATH=C:\src\SDL\lib\x64;%PATH% @@ -28,6 +29,7 @@ To build under Windows 32/64: * Install MINGW64 under C:\mingw-w64\x86_64-5.3.0 folder. * Run mingw terminal. +* Build SDL2 library. * Change current directory to that of this project. * Set environment variable SDLDIR. (E.g.: set SDLDIR=C:\src\SDL) * Run: makeming.bat @@ -35,9 +37,20 @@ To build under Windows 32/64: To build under Linux: * Make sure C++11 compliant version of GCC compiler is installed. + NOTE: Under older distros, e.g.: Ubuntu Server 12.04, the newest c++ + compiler installed may not be modern enough. Follow instructions + for your distro to install compatible c++ compiler. + E.g.: + https://gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91 +* Build SDL2 library (make, make install) or download C/C++ headers and + install SDL2 from binary installation package. * Change current directory to that of this project. -* Set environment variable SDLDIR. +* Set environment variable SDLDIR. Your C/C++ headers for SDL2 should exist + in $SDLDIR/include folder. * Run: make clean all +NOTE: To run the emulator under Linux, it may be necessary to set env. + variable LD_LIBRARY_PATH, e.g.: + export LD_LIBRARY_PATH=/usr/local/lib Program passed following tests: diff --git a/makefile b/makefile index d5abb93..7d04424 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -# Project: MKBasic +# Project: VM65 SDLBASE = $(SDLDIR) SDLINCS = -I"$(SDLBASE)/include" @@ -8,13 +8,27 @@ OBJ = main.o VMachine.o MKCpu.o Memory.o Display.o GraphDisp.o MemMapDev.o LINKOBJ = main.o VMachine.o MKCpu.o Memory.o Display.o GraphDisp.o MemMapDev.o MKGenException.o ConsoleIO.o MassStorage.o BIN = vm65 SDLLIBS = -L/usr/local/lib -lSDL2main -lSDL2 -LIBS = -static-libgcc -m32 -g3 -ltermcap -lncurses -CLIBS = -static-libgcc -m32 -g3 INCS = CXXINCS = -CXXFLAGS = $(CXXINCS) -m32 -std=c++0x -Wall -pedantic -g3 -fpermissive +ifeq ($(SDLBASE),) + $(error ***** SDLDIR not set) +endif +$(eval $(export HOSTTYPE = $(arch))) +$(info ***** SDLDIR = $(SDLDIR)) +$(info ***** HOSTTYPE = $(HOSTTYPE)) +ifeq ($(HOSTTYPE),x86_64) + $(info ***** 64-bit) + LIBS = -static-libgcc -g3 -ltermcap -lncurses -lpthread + CLIBS = -static-libgcc -g3 + CXXFLAGS = $(CXXINCS) -std=c++11 -pthread -Wall -pedantic -g3 -fpermissive +else + $(info ***** 32-bit) + LIBS = -static-libgcc -m32 -g3 -ltermcap -lncurses + CLIBS = -static-libgcc -m32 -g3 + CXXFLAGS = $(CXXINCS) -m32 -std=c++11 -pthread -Wall -pedantic -g3 -fpermissive +endif #CFLAGS = $(INCS) -m32 -std=c++0x -Wall -pedantic -g3 -CFLAGS = $(INCS) -m32 -Wall -pedantic -g3 +CFLAGS = $(INCS) -Wall -pedantic -g3 RM = rm -f .PHONY: all all-before all-after clean clean-custom @@ -32,7 +46,6 @@ main.o: main.cpp VMachine.o: VMachine.cpp $(CPP) -c VMachine.cpp -o VMachine.o $(CXXFLAGS) $(SDLINCS) - MKBasic.o: MKBasic.cpp $(CPP) -c MKBasic.cpp -o MKBasic.o $(CXXFLAGS)