diff --git a/source/Makefile b/source/Makefile index 6e878f8..1b1913f 100644 --- a/source/Makefile +++ b/source/Makefile @@ -9,8 +9,8 @@ AppletCompanion: $(MAKE) -C $@ -j$(nproc) Sysmodule: - $(MAKE) -C $@ buildSysmodule -j$(nproc) + $(MAKE) -C $@ -j$(nproc) clean: $(MAKE) -C AppletCompanion clean - $(MAKE) -C Sysmodule cleanSysmodule \ No newline at end of file + $(MAKE) -C Sysmodule clean \ No newline at end of file diff --git a/source/Sysmodule/Makefile b/source/Sysmodule/Makefile index 2d83ee6..939f496 100644 --- a/source/Sysmodule/Makefile +++ b/source/Sysmodule/Makefile @@ -1,71 +1,11 @@ #--------------------------------------------------------------------------------- -.SUFFIXES: +# pull in common stratosphere sysmodule configuration #--------------------------------------------------------------------------------- +include $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/../libstratosphere/config/templates/stratosphere.mk -ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") -endif - -TOPDIR ?= $(CURDIR) -include $(DEVKITPRO)/libnx/switch_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# DATA is a list of directories containing data files -# INCLUDES is a list of directories containing header files -# ROMFS is the directory containing data to be added to RomFS, relative to the Makefile (Optional) -# -# NO_ICON: if set to anything, do not use icon. -# NO_NACP: if set to anything, no .nacp file is generated. -# APP_TITLE is the name of the app stored in the .nacp file (Optional) -# APP_AUTHOR is the author of the app stored in the .nacp file (Optional) -# APP_VERSION is the version of the app stored in the .nacp file (Optional) -# APP_TITLEID is the titleID of the app stored in the .nacp file (Optional) -# ICON is the filename of the icon (.jpg), relative to the project folder. -# If not set, it attempts to use one of the following (in this order): -# - .jpg -# - icon.jpg -# - /default_icon.jpg -# -# CONFIG_JSON is the filename of the NPDM config file (.json), relative to the project folder. -# If not set, it attempts to use one of the following (in this order): -# - .json -# - config.json -# If a JSON file is provided or autodetected, an ExeFS PFS0 (.nsp) is built instead -# of a homebrew executable (.nro). This is intended to be used for sysmodules. -# NACP building is skipped as well. -#--------------------------------------------------------------------------------- TARGET := sys-con -SOURCES := source ../ControllerSwitch ../ControllerLib ../ControllerLib/Controllers ../inih -DATA := data -INCLUDES := include ../ControllerSwitch ../ControllerLib ../inih -#ROMFS := romfs - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE - -CFLAGS := -g -Wall -O2 -ffunction-sections \ - $(ARCH) $(DEFINES) $(BUILD_CFLAGS) - -CFLAGS += $(INCLUDE) -D__SWITCH__ - -CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=c++17 - -ASFLAGS := -g $(ARCH) -LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) - -LIBS := -lnx - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(PORTLIBS) $(LIBNX) - +SOURCES += ../ControllerSwitch ../ControllerLib ../ControllerLib/Controllers ../inih +INCLUDES += ../ControllerSwitch ../ControllerLib ../inih #--------------------------------------------------------------------------------- # no real need to edit anything past this point unless you need to add additional @@ -82,9 +22,25 @@ export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ export DEPSDIR := $(CURDIR)/$(BUILD) -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) + +CFILES := $(foreach dir,$(SOURCES),$(filter-out $(notdir $(wildcard $(dir)/*.arch.*.c)) $(notdir $(wildcard $(dir)/*.board.*.c)) $(notdir $(wildcard $(dir)/*.os.*.c)), \ + $(notdir $(wildcard $(dir)/*.c)))) +CFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.arch.$(ATMOSPHERE_ARCH_NAME).c))) +CFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.board.$(ATMOSPHERE_BOARD_NAME).c))) +CFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.os.$(ATMOSPHERE_OS_NAME).c))) + +CPPFILES := $(foreach dir,$(SOURCES),$(filter-out $(notdir $(wildcard $(dir)/*.arch.*.cpp)) $(notdir $(wildcard $(dir)/*.board.*.cpp)) $(notdir $(wildcard $(dir)/*.os.*.cpp)), \ + $(notdir $(wildcard $(dir)/*.cpp)))) +CPPFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.arch.$(ATMOSPHERE_ARCH_NAME).cpp))) +CPPFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.board.$(ATMOSPHERE_BOARD_NAME).cpp))) +CPPFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.os.$(ATMOSPHERE_OS_NAME).cpp))) + +SFILES := $(foreach dir,$(SOURCES),$(filter-out $(notdir $(wildcard $(dir)/*.arch.*.s)) $(notdir $(wildcard $(dir)/*.board.*.s)) $(notdir $(wildcard $(dir)/*.os.*.s)), \ + $(notdir $(wildcard $(dir)/*.s)))) +SFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.arch.$(ATMOSPHERE_ARCH_NAME).s))) +SFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.board.$(ATMOSPHERE_BOARD_NAME).s))) +SFILES += $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.os.$(ATMOSPHERE_OS_NAME).s))) + BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) #--------------------------------------------------------------------------------- @@ -101,10 +57,8 @@ else endif #--------------------------------------------------------------------------------- -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) -export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) -export OFILES := $(OFILES_BIN) $(OFILES_SRC) -export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES))) +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ @@ -112,6 +66,8 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) +export BUILD_EXEFS_SRC := $(TOPDIR)/$(EXEFS_SRC) + ifeq ($(strip $(CONFIG_JSON)),) jsons := $(wildcard *.json) ifneq (,$(findstring $(TARGET).json,$(jsons))) @@ -125,105 +81,46 @@ else export APP_JSON := $(TOPDIR)/$(CONFIG_JSON) endif -ifeq ($(strip $(ICON)),) - icons := $(wildcard *.jpg) - ifneq (,$(findstring $(TARGET).jpg,$(icons))) - export APP_ICON := $(TOPDIR)/$(TARGET).jpg - else - ifneq (,$(findstring icon.jpg,$(icons))) - export APP_ICON := $(TOPDIR)/icon.jpg - endif - endif -else - export APP_ICON := $(TOPDIR)/$(ICON) -endif - -ifeq ($(strip $(NO_ICON)),) - export NROFLAGS += --icon=$(APP_ICON) -endif - -ifeq ($(strip $(NO_NACP)),) - export NROFLAGS += --nacp=$(CURDIR)/$(TARGET).nacp -endif - -ifneq ($(APP_TITLEID),) - export NACPFLAGS += --titleid=$(APP_TITLEID) -endif - -ifneq ($(ROMFS),) - export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS) -endif - -.PHONY: all buildApplet buildSysmodule applet sysmodule cleanApplet cleanSysmodule +.PHONY: $(BUILD) clean all #--------------------------------------------------------------------------------- -all: sysmodule +all: $(BUILD) -buildApplet: - @echo building applet ... +$(BUILD): @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory \ - BUILD=$@ -C $@ -f $(CURDIR)/Makefile \ - DEPSDIR=$(CURDIR)/$@ \ - BUILD_CFLAGS="-D__APPLET__" \ - makeNRO - -buildSysmodule: - @echo building sysmodule ... - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory \ - BUILD=$@ -C $@ -f $(CURDIR)/Makefile \ - DEPSDIR=$(CURDIR)/$@ \ - makeNSP + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile -applet: buildApplet +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).nsp $(TARGET).npdm $(TARGET).nso $(TARGET).elf -sysmodule: buildSysmodule -cleanApplet: - @echo clean applet ... - @rm -fr buildApplet $(TARGET).nro $(TARGET).nacp $(TARGET).elf - -cleanSysmodule: - @echo clean sysmodule ... - @rm -fr buildSysmodule exefs.nsp $(TARGET).nsp $(TARGET).nso $(TARGET).npdm $(TARGET).elf - -# Makefile commands #--------------------------------------------------------------------------------- else -.PHONY: makeNRO makeNSP +.PHONY: all DEPENDS := $(OFILES:.o=.d) #--------------------------------------------------------------------------------- # main targets #--------------------------------------------------------------------------------- -makeNRO: $(OUTPUT).nro +all : $(OUTPUT).nsp -makeNSP: $(OUTPUT).nsp - -#TODO: add an option to make exefs.nsp instead of $(OUTPUT).nsp - -ifeq ($(strip $(NO_NACP)),) -$(OUTPUT).nro : $(OUTPUT).elf $(OUTPUT).nacp +ifeq ($(strip $(APP_JSON)),) +$(OUTPUT).nsp : $(OUTPUT).nso else -$(OUTPUT).nro : $(OUTPUT).elf -endif - - - $(OUTPUT).nsp : $(OUTPUT).nso $(OUTPUT).npdm +endif $(OUTPUT).nso : $(OUTPUT).elf $(OUTPUT).elf : $(OFILES) -$(OFILES_SRC) : $(HFILES_BIN) - #--------------------------------------------------------------------------------- # you need a rule like this for each extension you use as binary data #--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin +%.bin.o : %.bin #--------------------------------------------------------------------------------- @echo $(notdir $<) @$(bin2o)