Mercurial > remote-gamepad
comparison Makefile @ 0:4e831ec746e4
Hello world!
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 22 Feb 2015 17:41:32 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4e831ec746e4 |
---|---|
1 #--------------------------------------------------------------------------------- | |
2 .SUFFIXES: | |
3 #--------------------------------------------------------------------------------- | |
4 | |
5 ifeq ($(strip $(DEVKITARM)),) | |
6 $(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") | |
7 endif | |
8 | |
9 TOPDIR ?= $(CURDIR) | |
10 include $(DEVKITARM)/3ds_rules | |
11 | |
12 #--------------------------------------------------------------------------------- | |
13 # TARGET is the name of the output | |
14 # BUILD is the directory where object files & intermediate files will be placed | |
15 # SOURCES is a list of directories containing source code | |
16 # DATA is a list of directories containing data files | |
17 # INCLUDES is a list of directories containing header files | |
18 # | |
19 # NO_SMDH: if set to anything, no SMDH file is generated. | |
20 # APP_TITLE is the name of the app stored in the SMDH file (Optional) | |
21 # APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional) | |
22 # APP_AUTHOR is the author of the app stored in the SMDH file (Optional) | |
23 # ICON is the filename of the icon (.png), relative to the project folder. | |
24 # If not set, it attempts to use one of the following (in this order): | |
25 # - <Project name>.png | |
26 # - icon.png | |
27 # - <libctru folder>/default_icon.png | |
28 #--------------------------------------------------------------------------------- | |
29 TARGET := $(notdir $(CURDIR)) | |
30 BUILD := build | |
31 SOURCES := source | |
32 DATA := data | |
33 INCLUDES := include | |
34 | |
35 #--------------------------------------------------------------------------------- | |
36 # options for code generation | |
37 #--------------------------------------------------------------------------------- | |
38 ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard | |
39 | |
40 CFLAGS := -g -Wall -O2 -std=gnu11 -mword-relocations \ | |
41 -fomit-frame-pointer -ffast-math \ | |
42 $(ARCH) | |
43 | |
44 CFLAGS += $(INCLUDE) -DARM11 -D_3DS | |
45 | |
46 CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 | |
47 | |
48 ASFLAGS := -g $(ARCH) | |
49 LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) | |
50 | |
51 LIBS := -lctru -lm | |
52 | |
53 #--------------------------------------------------------------------------------- | |
54 # list of directories containing libraries, this must be the top level containing | |
55 # include and lib | |
56 #--------------------------------------------------------------------------------- | |
57 LIBDIRS := $(CTRULIB) | |
58 | |
59 | |
60 #--------------------------------------------------------------------------------- | |
61 # no real need to edit anything past this point unless you need to add additional | |
62 # rules for different file extensions | |
63 #--------------------------------------------------------------------------------- | |
64 ifneq ($(BUILD),$(notdir $(CURDIR))) | |
65 #--------------------------------------------------------------------------------- | |
66 | |
67 export OUTPUT := $(CURDIR)/$(TARGET) | |
68 export TOPDIR := $(CURDIR) | |
69 | |
70 export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ | |
71 $(foreach dir,$(DATA),$(CURDIR)/$(dir)) | |
72 | |
73 export DEPSDIR := $(CURDIR)/$(BUILD) | |
74 | |
75 CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) | |
76 CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) | |
77 SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) | |
78 BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) | |
79 | |
80 #--------------------------------------------------------------------------------- | |
81 # use CXX for linking C++ projects, CC for standard C | |
82 #--------------------------------------------------------------------------------- | |
83 ifeq ($(strip $(CPPFILES)),) | |
84 #--------------------------------------------------------------------------------- | |
85 export LD := $(CC) | |
86 #--------------------------------------------------------------------------------- | |
87 else | |
88 #--------------------------------------------------------------------------------- | |
89 export LD := $(CXX) | |
90 #--------------------------------------------------------------------------------- | |
91 endif | |
92 #--------------------------------------------------------------------------------- | |
93 | |
94 export OFILES := $(addsuffix .o,$(BINFILES)) \ | |
95 $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) | |
96 | |
97 export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ | |
98 $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ | |
99 -I$(CURDIR)/$(BUILD) | |
100 | |
101 export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) | |
102 | |
103 ifeq ($(strip $(ICON)),) | |
104 icons := $(wildcard *.png) | |
105 ifneq (,$(findstring $(TARGET).png,$(icons))) | |
106 export APP_ICON := $(TOPDIR)/$(TARGET).png | |
107 else | |
108 ifneq (,$(findstring icon.png,$(icons))) | |
109 export APP_ICON := $(TOPDIR)/icon.png | |
110 endif | |
111 endif | |
112 else | |
113 export APP_ICON := $(TOPDIR)/$(ICON) | |
114 endif | |
115 | |
116 .PHONY: $(BUILD) clean all | |
117 | |
118 #--------------------------------------------------------------------------------- | |
119 all: $(BUILD) | |
120 | |
121 $(BUILD): | |
122 @[ -d $@ ] || mkdir -p $@ | |
123 @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile | |
124 | |
125 #--------------------------------------------------------------------------------- | |
126 clean: | |
127 @echo clean ... | |
128 @rm -fr $(BUILD) $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf | |
129 | |
130 | |
131 #--------------------------------------------------------------------------------- | |
132 else | |
133 | |
134 DEPENDS := $(OFILES:.o=.d) | |
135 | |
136 #--------------------------------------------------------------------------------- | |
137 # main targets | |
138 #--------------------------------------------------------------------------------- | |
139 ifeq ($(strip $(NO_SMDH)),) | |
140 .PHONY: all | |
141 all : $(OUTPUT).3dsx $(OUTPUT).smdh | |
142 endif | |
143 $(OUTPUT).3dsx : $(OUTPUT).elf | |
144 $(OUTPUT).elf : $(OFILES) | |
145 | |
146 #--------------------------------------------------------------------------------- | |
147 # you need a rule like this for each extension you use as binary data | |
148 #--------------------------------------------------------------------------------- | |
149 %.bin.o : %.bin | |
150 #--------------------------------------------------------------------------------- | |
151 @echo $(notdir $<) | |
152 @$(bin2o) | |
153 | |
154 # WARNING: This is not the right way to do this! TODO: Do it right! | |
155 #--------------------------------------------------------------------------------- | |
156 %.vsh.o : %.vsh | |
157 #--------------------------------------------------------------------------------- | |
158 @echo $(notdir $<) | |
159 @python $(AEMSTRO)/aemstro_as.py $< ../$(notdir $<).shbin | |
160 @bin2s ../$(notdir $<).shbin | $(PREFIX)as -o $@ | |
161 @echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(notdir $<).shbin | tr . _)`.h | |
162 @echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(notdir $<).shbin | tr . _)`.h | |
163 @echo "extern const u32" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(notdir $<).shbin | tr . _)`.h | |
164 @rm ../$(notdir $<).shbin | |
165 | |
166 -include $(DEPENDS) | |
167 | |
168 #--------------------------------------------------------------------------------------- | |
169 endif | |
170 #--------------------------------------------------------------------------------------- |