Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ifeq ($(strip $(DEVKITPRO)),)
- $(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
- endif
- # -----------------------------------------------
- APP_TITLE =
- APP_AUTHOR =
- APP_ICON =
- APP_VERSION =
- APP_TITLEID =
- TARGET = $(notdir $(CURDIR))
- EXTENSION = nro
- OUT = out
- BUILD = build
- SOURCES = src
- INCLUDES = include
- CUSTOM_LIBS =
- ROMFS = res
- DEFINES = __SWITCH__ DEBUG
- ARCH = -march=armv8-a+crc+crypto+simd -mtune=cortex-a57 -mtp=soft -fpie
- FLAGS = -Wall -pipe -g -O2 -ffunction-sections -fdata-sections
- CFLAGS = -std=gnu11
- CXXFLAGS = -std=gnu++17 -fno-rtti
- ASFLAGS =
- LDFLAGS = -Wl,-pie -specs=$(DEVKITPRO)/libnx/switch.specs -g
- LINKS = -lnx
- PREFIX = aarch64-none-elf-
- CC = $(PREFIX)gcc
- CXX = $(PREFIX)g++
- AS = $(PREFIX)as
- LD = $(PREFIX)g++
- NM = $(PREFIX)gcc-nm
- # -----------------------------------------------
- CFILES = $(shell find $(SOURCES) -name *.c)
- CPPFILES = $(shell find $(SOURCES) -name *.cpp)
- SFILES = $(shell find $(SOURCES) -name *.s -or -name *.S)
- OFILES = $(CFILES:%=$(BUILD)/%.nx.o) $(CPPFILES:%=$(BUILD)/%.nx.o) $(SFILES:%=$(BUILD)/%.nx.o)
- DFILES = $(OFILES:.o=.d)
- NX_TARGET = $(if $(OUT:=), $(OUT)/$(TARGET).$(EXTENSION), .$(OUT)/$(TARGET).$(EXTENSION))
- ELF_TARGET = $(if $(OUT:=), $(OUT)/$(TARGET)-nx.elf, .$(OUT)/$(TARGET)-nx.elf)
- NACP_TARGET = $(if $(OUT:=), $(OUT)/$(TARGET).nacp, .$(OUT)/$(TARGET).nacp)
- NRO_TARGET = $(if $(OUT:=), $(OUT)/$(TARGET).nro, .$(OUT)/$(TARGET).nro)
- DEFINE_FLAGS = $(addprefix -D,$(DEFINES))
- INCLUDE_FLAGS = $(addprefix -I,$(INCLUDES)) $(foreach dir,$(LIBS),-I$(dir)/include)
- LIB_FLAGS = $(foreach dir,$(LIBS),-L$(dir)/lib)
- # -----------------------------------------------
- export PATH := $(DEVKITPRO)/tools/bin:$(DEVKITPRO)/devkitA64/bin:$(PORTLIBS)/bin:$(PATH)
- PORTLIBS = $(DEVKITPRO)/portlibs/switch
- LIBNX = $(DEVKITPRO)/libnx
- LIBS = $(CUSTOM_LIBS) $(LIBNX) $(PORTLIBS)
- ifeq ($(strip $(APP_TITLE)),)
- APP_TITLE = $(TARGET)
- endif
- ifeq ($(strip $(APP_AUTHOR)),)
- APP_AUTHOR = Unspecified
- endif
- ifeq ($(strip $(APP_VERSION)),)
- APP_VERSION = Unspecified
- endif
- ifneq ($(APP_TITLEID),)
- NACPFLAGS += --titleid=$(strip $(APP_TITLEID))
- endif
- ifeq ($(strip $(APP_ICON)),)
- APP_ICON = $(LIBNX)/default_icon.jpg
- endif
- NROFLAGS = --icon=$(strip $(APP_ICON)) --nacp=$(strip $(NACP_TARGET))
- ifneq ($(ROMFS),)
- NROFLAGS += --romfsdir=$(strip $(ROMFS))
- endif
- # -----------------------------------------------
- .SUFFIXES:
- .PHONY: all libs clean mrproper
- all: libs $(NX_TARGET)
- libs:
- @for dir in $(CUSTOM_LIBS); do $(MAKE) --no-print-directory -C $$dir -f Makefile.nx; done
- $(NX_TARGET): $(ELF_TARGET) $(NACP_TARGET)
- @echo " NRO " $@
- @mkdir -p $(dir $@)
- @elf2nro $< $@ $(NROFLAGS)
- @echo "Built" $(notdir $@)
- $(ELF_TARGET): $(OFILES)
- @echo " LD " $@
- @mkdir -p $(dir $@)
- @$(LD) $(ARCH) $(LDFLAGS) -Wl,-Map,$(BUILD)/$(TARGET)-nx.map $(LIB_FLAGS) $^ $(LINKS) -o $@
- @$(NM) -CSn $@ > $(BUILD)/$(TARGET)-nx.lst
- $(BUILD)/%.c.nx.o: %.c
- @echo " CC " $@
- @mkdir -p $(dir $@)
- @$(CC) -MMD -MP $(ARCH) $(FLAGS) $(CFLAGS) $(DEFINE_FLAGS) $(INCLUDE_FLAGS) -c $< -o $@
- $(BUILD)/%.cpp.nx.o: %.cpp
- @echo " CXX " $@
- @mkdir -p $(dir $@)
- @$(CXX) -MMD -MP $(ARCH) $(FLAGS) $(CXXFLAGS) $(DEFINE_FLAGS) $(INCLUDE_FLAGS) -c $< -o $@
- $(BUILD)/%.s.nx.o: %.s %.S
- @echo " AS " $@
- @mkdir -p $(dir $@)
- @$(AS) -MMD -MP -x assembler-with-cpp $(ARCH) $(FLAGS) $(ASFLAGS) $(INCLUDE_FLAGS) -c $< -o $@
- %.nacp:
- @echo " NACP" $@
- @mkdir -p $(dir $@)
- @nacptool --create "$(APP_TITLE)" "$(APP_AUTHOR)" "$(APP_VERSION)" $@ $(NACPFLAGS)
- clean:
- @echo Cleaning...
- @rm -rf $(shell find $(BUILD) $(OUT) -name "*nx*") $(OUT)/*.nro $(OUT)/*.nacp
- mrproper: clean
- @for dir in $(CUSTOM_LIBS); do $(MAKE) clean --no-print-directory -C $$dir -f Makefile.nx; done
- pc:
- @:
- -include $(DFILES)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement