Преглед на файлове

Refactor the build system to be leaner

Streetwalrus Einstein преди 10 години
родител
ревизия
239ea23fe7
променени са 8 файла, в които са добавени 99 реда и са изтрити 71 реда
  1. 1 1
      .gitignore
  2. 20 48
      Makefile
  3. 0 20
      art/Makefile
  4. 22 0
      art/rules.mk
  5. 5 0
      external/rules.mk
  6. 42 0
      rules.mk
  7. 7 0
      src/rules.mk
  8. 2 2
      versionning.bash

+ 1 - 1
.gitignore

@@ -7,7 +7,7 @@ art/sprites.c
 art/sprites.h
 art/*.cspr
 src/version.c
-include/version.h
+src/version.h
 
 .ycm_extra_conf.pyc
 

+ 20 - 48
Makefile

@@ -2,7 +2,7 @@ NAME = WalrusRPG
 
 DEBUG = FALSE
 
-CFLAGS_COMMON = -Wall -W -marm -fdiagnostics-color=always
+CFLAGS_COMMON = -Wall -W -marm $(addprefix -I,$(INCLUDE))
 
 ifeq ($(DEBUG),FALSE)
 	CFLAGS_COMMON += -Ofast -flto
@@ -21,55 +21,27 @@ LDFLAGS = $(CFLAGS_COMMON) -Wl,--gc-sections
 ZEHN = genzehn
 ZEHNFLAGS = --name "$(NAME)" --compress
 
-SRCDIR = src
-
-SOURCES_C = art/sprites.c src/version.c $(wildcard $(SRCDIR)/*.c)
-SOURCES_CPP = $(wildcard $(SRCDIR)/*.cpp)
-OBJS = $(patsubst %.c,%.o,$(SOURCES_C)) $(patsubst %.cpp,%.o,$(SOURCES_CPP))
-INCLUDE = -I include -I art -I external/tinystl/include
+SRCS_C :=
+SRCS_CPP :=
+OBJS = $(SRCS_C:%.c=%.o) $(SRCS_CPP:%.cpp=%.o)
+INCLUDE :=
 
 DISTDIR = bin
 ELF = $(DISTDIR)/$(NAME).elf
 EXE = $(DISTDIR)/$(NAME).tns
 
-all: versionning sprites $(EXE)
-
-.PHONY: format clean sprites all run versionning
-
-versionning:
-	@bash versionning.bash
-
-sprites:
-	@$(MAKE) -C art/
-
-art/sprites.c: sprites
-
-%.o: %.c| sprites versionning
-	@echo "CC: $@"
-	@$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
-
-%.o: %.cpp| sprites versionning
-	@echo "CPP: $@"
-	@$(CPP) $(CPPFLAGS) $(INCLUDE) -c $< -o $@
-
-
-$(ELF): $(OBJS) |sprites
-	@mkdir -p $(DISTDIR)
-	@echo "CCLD: $@"
-	@+$(CC) $(LDFLAGS) $^ -o $(ELF)
-
-$(EXE): $(ELF)
-	@mkdir -p $(DISTDIR)
-	@echo "ZEHN: $@"
-	@$(ZEHN) --input $(ELF) --output $(EXE) $(ZEHNFLAGS)
-
-clean:
-	rm -rf $(DISTDIR)
-	rm -f $(OBJS)
-	@$(MAKE) -C art/ clean
-
-format:
-	clang-format -i -style=file src/*.c src/*.cpp include/*.h
-
-run: all
-	tilp -ns $(EXE) > /dev/null
+CLEAN_SPEC :=
+
+# Figure out where we are.
+define whereami
+$(strip \
+  $(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \
+  $(if $(filter $(BUILD_SYSTEM)/% $(OUT_DIR)/%,$(LOCAL_MODULE_MAKEFILE)), \
+    $(error my-dir must be called before including any other makefile.) \
+   , \
+    $(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \
+   ) \
+ )
+endef
+
+include rules.mk

+ 0 - 20
art/Makefile

@@ -1,20 +0,0 @@
-SPRITES = $(wildcard *.png)
-SPR_DATA = $(patsubst %.png,%.cspr,$(SPRITES))
-
-%.cspr: %.png
-	@echo "Converting : $<"
-	@ConvertImg --format n2dlib $< > $@
-
-all: sprites.c sprites.h
-	
-sprites.c: | $(SPR_DATA)
-	@echo "Catting sprites into sprites.c"
-	@rm -f sprites.c
-	@cat  $(SPR_DATA)  | sed "s/^static uint16_t/unsigned short/" >> sprites.c
-
-sprites.h: sprites.c
-	@echo "Making header sprites.h"
-	@cat sprites.c | grep "=" | sed -e "s/ =.*/;/" -e "s/^/extern /" > sprites.h
-
-clean:
-	rm -f $(SPR_DATA) sprites.c sprites.h

+ 22 - 0
art/rules.mk

@@ -0,0 +1,22 @@
+art_LOCAL_PATH := $(call whereami)
+
+art_SPRITES := $(wildcard $(art_LOCAL_PATH)/*.png)
+art_SPR_DATA := $(patsubst %.png,%.cspr,$(art_SPRITES))
+
+SRCS_C += $(art_LOCAL_PATH)/sprites.c
+INCLUDE += $(art_LOCAL_PATH)
+
+CLEAN_SPEC += $(art_SPR_DATA) $(art_LOCAL_PATH)/sprites.c $(art_LOCAL_PATH)/sprites.h
+
+%.cspr: %.png
+	@echo "Converting : $<"
+	@ConvertImg --format n2dlib $< > $@
+
+$(art_LOCAL_PATH)/sprites.c: $(art_SPR_DATA)
+	@echo "Catting sprites into sprites.c"
+	@rm -f sprites.c
+	@cat $^ | sed "s/^static uint16_t/unsigned short/" >> $(art_LOCAL_PATH)/sprites.c
+
+$(art_LOCAL_PATH)/sprites.h: $(art_LOCAL_PATH)/sprites.c
+	@echo "Making header sprites.h"
+	@cat $(art_LOCAL_PATH)/sprites.c | grep "=" | sed -e "s/ =.*/;/" -e "s/^/extern /" > $(art_LOCAL_PATH)/sprites.h

+ 5 - 0
external/rules.mk

@@ -0,0 +1,5 @@
+external_LOCAL_PATH := $(call whereami)
+
+include $(wildcard $(external_LOCAL_PATH)/*/rules.mk)
+
+INCLUDE += $(external_LOCAL_PATH)/tinystl/include

+ 42 - 0
rules.mk

@@ -0,0 +1,42 @@
+.PHONY: format clean all run versionning
+
+all: $(EXE)
+
+include $(wildcard */rules.mk)
+
+versionning:
+	@bash versionning.bash
+
+%.o: %.c | versionning
+	@echo "CC: $@"
+	@$(CC) $(CFLAGS) -c $< -o $@
+
+%.o: %.cpp | art/sprites.h versionning
+	@echo "CPP: $@"
+	@$(CPP) $(CPPFLAGS) -c $< -o $@
+
+$(ELF): $(OBJS)
+	@mkdir -p $(DISTDIR)
+	@echo "CCLD: $@"
+	@+$(CC) $(LDFLAGS) $^ -o $(ELF)
+
+$(EXE): $(ELF)
+	@mkdir -p $(DISTDIR)
+	@echo "ZEHN: $@"
+	@$(ZEHN) --input $(ELF) --output $(EXE) $(ZEHNFLAGS)
+
+clean:
+	@echo "Removing dist"
+	@rm -rf $(DISTDIR)
+	@echo "Removing object files"
+	@rm -f $(OBJS)
+	@echo "Removing other build artifacts"
+	@rm -f $(CLEAN_SPEC)
+
+format:
+	@echo "Formatting source using clang-format"
+	@clang-format -i -style=file $(SRCS_C) $(SRCS_CPP) $(wildcard $(addsuffix /*.h,$(INCLUDE)))
+
+run: all
+	@echo "Sending $(EXE) to calculator"
+	@tilp -ns $(EXE) > /dev/null

+ 7 - 0
src/rules.mk

@@ -0,0 +1,7 @@
+src_LOCAL_PATH := $(call whereami)
+
+include $(wildcard $(src_LOCAL_PATH)/*/rules.mk)
+
+SRCS_C += $(wildcard $(src_LOCAL_PATH)/*/*.c) $(src_LOCAL_PATH)/version.c
+SRCS_CPP += $(wildcard $(src_LOCAL_PATH)/*/*.cpp)
+INCLUDE += $(shell find $(src_LOCAL_PATH) -mindepth 1 -maxdepth 1 -type d) $(src_LOCAL_PATH)

+ 2 - 2
versionning.bash

@@ -25,9 +25,9 @@ if [[ $? -ne 0 ]]
   echo "Updating version source"
   echo "$source" > src/version.c
 fi
-diff include/version.h <(echo "$include") > /dev/null 2>&1
+diff src/version.h <(echo "$include") > /dev/null 2>&1
 if [[ $? -ne 0 ]]
   then
   echo "Updating version include"
-  echo "$include" > include/version.h
+  echo "$include" > src/version.h
 fi