Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize Makefile #197

Merged
merged 2 commits into from
Apr 12, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
132 changes: 66 additions & 66 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,77 +1,77 @@
# do not forget that to build pvsneslib, you have to install compiler and tools first !
# define variables
COMPILER_PATH := compiler
TOOLS_PATH := tools
SNES_EXAMPLES_PATH := snes-examples
PVSNESLIB_PATH := pvsneslib
RELEASE_PATH := release/pvsneslib
DOXYGEN_INSTALLED := $(shell command -v doxygen 2> /dev/null)
ARCH := x86_32

#---------------------------------------------------------------------------------
all:
cd compiler && \
make && \
make install && \
cd ../tools && \
make && \
make install && \
cd ../pvsneslib && \
make && \
cd ../snes-examples && \
make && \
make install && \
echo && \
echo Build finished successfully ! && \
echo

clean:
cd compiler ; \
make clean ; \
cd ../tools ; \
make clean ; \
cd ../pvsneslib ; \
make clean ; \
cd ../devkitsnes/bin ; \
rm -f ../bin/* \
rm -f ../tools/* ; \
cd ../../snes-examples ; \
make clean ; \
rm -rf release


# requirements to launch the "release" rule
doxygenInstalled := $(shell command -v doxygen 2> /dev/null)
operatingSystem=
OPERATING_SYSTEM := $(shell uname -s | tr '[:upper:]' '[:lower:]')
ifeq ($(OS),Windows_NT)
operatingSystem=windows
else
# only for linux platforms, we use the os-release file
ifneq (,$(wildcard /etc/os-release))
include /etc/os-release
# convert to lower case the result
operatingSystem=linux_$(shell echo $(NAME) | tr A-Z a-z)
OPERATING_SYSTEM := windows
else
ifeq ($(shell uname -s),Darwin)
operatingSystem=darwin
else
$(error "Unable to detect your operating system, please update the code in global pvsneslib Makefile to continue")
endif
endif
ifneq (,$(wildcard /etc/os-release))
include /etc/os-release
OPERATING_SYSTEM := linux_$(shell echo $(NAME) | tr '[:upper:]' '[:lower:]')
endif
endif

#---------------------------------------------------------------------------------
# to create the release version for github containing binaries and all snes-examples :
release: all
ifndef doxygenInstalled
# default target
all: clean
ifndef DOXYGEN_INSTALLED
$(error "doxygen is not installed but is mandatory to create the release version.")
endif
ifeq ($(operatingSystem),)

# build compiler
$(MAKE) -C $(COMPILER_PATH)
$(MAKE) -C $(COMPILER_PATH) install

# build tools
$(MAKE) -C $(TOOLS_PATH)
$(MAKE) -C $(TOOLS_PATH) install

# build pvsneslib
$(MAKE) -C $(PVSNESLIB_PATH)

# build snes-examples and install them
$(MAKE) -C $(SNES_EXAMPLES_PATH)
$(MAKE) -C $(SNES_EXAMPLES_PATH) install

@echo
@echo "* Build finished successfully !"
@echo

# clean everything
clean:
$(MAKE) -C $(COMPILER_PATH) clean
$(MAKE) -C $(TOOLS_PATH) clean
$(MAKE) -C $(PVSNESLIB_PATH) clean
$(MAKE) -C $(SNES_EXAMPLES_PATH) clean
@rm -rf release

# create a release version
release: clean all
ifeq ($(OPERATING_SYSTEM),)
$(error "Unable to detect your operating system to create the release version.")
endif
rm -rf release && mkdir -p release/pvsneslib && \
cp -r devkitsnes release/pvsneslib/devkitsnes && \
mkdir release/pvsneslib/pvsneslib && cp -r pvsneslib/include release/pvsneslib/pvsneslib/include && \
cp -r pvsneslib/lib release/pvsneslib/pvsneslib/lib && \
mkdir release/pvsneslib/pvsneslib/docs && cp -r pvsneslib/docs/html release/pvsneslib/pvsneslib/docs/html && \
cp pvsneslib/PVSnesLib_Logo.png release/pvsneslib/pvsneslib/PVSnesLib_Logo.png && \
cp pvsneslib/pvsneslib_license.txt release/pvsneslib/pvsneslib/pvsneslib_license.txt && \
cp pvsneslib/pvsneslib_snesmod.txt release/pvsneslib/pvsneslib/pvsneslib_snesmod.txt && \
cp pvsneslib/pvsneslib_version.txt release/pvsneslib/pvsneslib/pvsneslib_version.txt && \
cp -r snes-examples release/pvsneslib/snes-examples && \
cd release && zip -r -m pvsneslib_32b_$(operatingSystem).zip pvsneslib && \
echo && echo Release created successfully ! && echo
@mkdir -p $(RELEASE_PATH)/$(PVSNESLIB_PATH)
@cp -r devkitsnes $(RELEASE_PATH)
@cp -r $(PVSNESLIB_PATH)/include $(RELEASE_PATH)/$(PVSNESLIB_PATH)
@cp -r $(PVSNESLIB_PATH)/lib $(RELEASE_PATH)/$(PVSNESLIB_PATH)
@cp -r $(PVSNESLIB_PATH)/docs/html $(RELEASE_PATH)/$(PVSNESLIB_PATH)
@cp $(PVSNESLIB_PATH)/PVSnesLib_Logo.png $(RELEASE_PATH)/$(PVSNESLIB_PATH)/PVSnesLib_Logo.png
@cp $(PVSNESLIB_PATH)/pvsneslib_license.txt $(RELEASE_PATH)/$(PVSNESLIB_PATH)/pvsneslib_license.txt
@cp $(PVSNESLIB_PATH)/pvsneslib_snesmod.txt $(RELEASE_PATH)/$(PVSNESLIB_PATH)/pvsneslib_snesmod.txt
@cp $(PVSNESLIB_PATH)/pvsneslib_version.txt $(RELEASE_PATH)/$(PVSNESLIB_PATH)/pvsneslib_version.txt
@cp -r $(SNES_EXAMPLES_PATH) $(RELEASE_PATH)/snes-examples
@cd release && zip -q -y -r -m pvsneslib_$(ARCH)_$(OPERATING_SYSTEM).zip pvsneslib

@echo "* Release pvsneslib_$(ARCH)_$(OPERATING_SYSTEM) created successfully !"
@echo

# define phony targets
.PHONY: all

# Set the default target
.DEFAULT_GOAL := all