Last active
September 1, 2017 16:26
-
-
Save stoffera/d89b186442f18ee44b9589dd839c42fe to your computer and use it in GitHub Desktop.
Mono App Makefile, to compile full framework
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* ======================================== | |
* | |
* Copyright YOUR COMPANY, THE YEAR | |
* All Rights Reserved | |
* UNPUBLISHED, LICENSED SOFTWARE. | |
* | |
* CONFIDENTIAL AND PROPRIETARY INFORMATION | |
* WHICH IS THE PROPERTY OF your company. | |
* | |
* ======================================== | |
*/ | |
#include <mono.h> | |
#include "app_controller.h" | |
__attribute__((weak)) int main() | |
{ | |
AppController app; | |
mono::IApplicationContext::Instance->setMonoApplication(&app); | |
app.enterRunLoop(); | |
return 0; | |
} | |
/* [] END OF FILE */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
TARGET = mono_app | |
ARCH="arm-none-eabi-" | |
FLASH_SIZE=262144 | |
FLASH_ROW_SIZE=256 | |
FLASH_ARRAY_SIZE=65536 | |
EE_ARRAY=64 | |
EE_ROW_SIZE=16 | |
OPTIMIZATION = -O0 | |
BUILD_DIR=build | |
FRAMEWORK_PATH=../../mono_framework/src | |
PSOC5_PATH=../../mono_framework/src/cypress | |
MBED_PATH=../../mono_framework/src/mbedcomp | |
MBED_FS=$(MBED_PATH)/libraries/fs | |
COMP_LIB=$(PSOC5_PATH)/lib/CyComponentLibrary.a | |
INCLUDE_DIR=$(PSOC5_PATH)/psoc5 | |
CYPRESS_LIB=$(BUILD_DIR)/monoCyLib.a | |
LINKER_SCRIPT=$(INCLUDE_DIR)/cm3gcc.ld | |
COMPILE_TIMESTAMP=$(shell date +%Y-%m-%dT%H:%M:%S%z) | |
OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c)) \ | |
$(patsubst %.cpp,%.o,$(wildcard *.cpp)) | |
MBED_OBJECTS = $(patsubst %.cpp,%.o,$(wildcard $(MBED_PATH)/*.cpp)) \ | |
$(patsubst %.c,%.o,$(wildcard $(MBED_PATH)/common/*.c)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(MBED_PATH)/common/*.cpp)) \ | |
$(patsubst %.c,%.o,$(wildcard $(MBED_PATH)/target_cypress/*.c)) | |
MBED_FS_OBJECTS=$(patsubst %.cpp,%.o,$(wildcard $(MBED_FS)/sd/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(MBED_FS)/fat/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(MBED_FS)/fat/ChaN/*.cpp)) | |
MBED_INCLUDES = \ | |
$(MBED_PATH)/api \ | |
$(MBED_PATH)/hal \ | |
$(MBED_PATH)/target_cypress \ | |
$(MBED_FS)/sd \ | |
$(MBED_FS)/fat \ | |
$(MBED_FS)/fat/ChaN | |
MONO_OBJECTS = $(patsubst %.c,%.o,$(wildcard $(FRAMEWORK_PATH)/*.c)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/display/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/display/ili9225g/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/display/ui/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/wireless/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/media/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/net/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/io/*.cpp)) \ | |
$(patsubst %.cpp,%.o,$(wildcard $(FRAMEWORK_PATH)/sensors/*.cpp)) | |
MONO_INCLUDES = $(FRAMEWORK_PATH) \ | |
$(FRAMEWORK_PATH)/display \ | |
$(FRAMEWORK_PATH)/display/ui \ | |
$(FRAMEWORK_PATH)/display/ili9225g \ | |
$(FRAMEWORK_PATH)/io \ | |
$(FRAMEWORK_PATH)/media \ | |
$(FRAMEWORK_PATH)/net \ | |
$(FRAMEWORK_PATH)/wireless \ | |
$(FRAMEWORK_PATH)/sensors | |
SYS_OBJECTS = $(patsubst %.c,%.o,$(wildcard $(INCLUDE_DIR)/*.c)) \ | |
$(patsubst %.s,%.o,$(wildcard $(INCLUDE_DIR)/*Gnu.s)) | |
PSOC_INCLUDES = $(INCLUDE_DIR) | |
TARGET_OBJECTS = $(addprefix $(BUILD_DIR)/, $(OBJECTS)) | |
MBED_TARGET_OBJECTS = $(addprefix $(BUILD_DIR)/mbed, $(subst $(MBED_PATH),,$(MBED_OBJECTS))) | |
MBED_FS_TARGET_OBJECTS = $(addprefix $(BUILD_DIR)/mbed, $(subst $(MBED_FS),,$(MBED_FS_OBJECTS))) | |
MONO_TARGET_OBJECTS = $(addprefix $(BUILD_DIR)/mono, $(subst $(FRAMEWORK_PATH),, $(MONO_OBJECTS))) | |
SYS_TARGET_OBJECTS = $(addprefix $(BUILD_DIR)/cypress, $(subst $(PSOC5_PATH)/psoc5,,$(SYS_OBJECTS))) | |
TARGET_HEADERS = $(wildcard ./*.h) \ | |
$(wildcard ./*.hpp) | |
MBED_HEADERS = $(foreach path,$(MBED_INCLUDES),$(wildcard $(path)/*.h)) | |
MONO_HEADERS = $(foreach path,$(MONO_INCLUDES),$(wildcard $(path)/*.h)) | |
PSOC_HEADERS = $(foreach path,$(PSOC_INCLUDES),$(wildcard $(path)/*.h)) | |
CC=$(ARCH)gcc | |
CXX=$(ARCH)g++ | |
LD=$(ARCH)gcc | |
AS=$(ARCH)gcc | |
AR=$(ARCH)ar | |
RANLIB=$(ARCH)ranlib | |
STRIP=$(ARCH)strip | |
OBJCOPY=$(ARCH)objcopy | |
OBJDUMP=$(ARCH)objdump | |
GDB=$(ARCH)gdb | |
COPY=cp | |
MKDIR=mkdir | |
MONOPROG=monomake monoprog | |
ELFTOOL='C:\Program Files (x86)\Cypress\PSoC Creator\3.1\PSoC Creator\bin\cyelftool.exe' | |
INCS = -I . $(addprefix -I, $(MONO_INCLUDES) $(MBED_INCLUDES) $(INCLUDE_DIR)) | |
CDEFS=-DMONO_COMPILE_TIMESTAMP="\"$(COMPILE_TIMESTAMP)\"" | |
ASDEFS= | |
AS_FLAGS = -c -g -Wall -mcpu=cortex-m3 -mthumb -mthumb-interwork -march=armv7-m | |
CC_FLAGS = -c -g -Wall -mcpu=cortex-m3 -mthumb $(OPTIMIZATION) -mthumb-interwork -fno-common -fmessage-length=0 -ffunction-sections -fdata-sections -march=armv7-m | |
ONLY_C_FLAGS = -std=gnu99 | |
ONLY_CPP_FLAGS = -std=gnu++98 -fno-rtti -fno-exceptions | |
LDSCRIPT = -T $(LINKER_SCRIPT) | |
LD_FLAGS = -g -mcpu=cortex-m3 -mthumb -march=armv7-m -fno-rtti -Wl,--gc-sections -specs=nano.specs | |
LD_SYS_LIBS = -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys | |
#"libs/CyCompLib.a" | |
# -mfix-cortex-m3-ldrd -u _printf_float -u _scanf_float | |
COPY_FLAGS = -j .text -j .eh_frame -j .rodata -j .ramvectors -j .noinit -j .data -j .bss -j .stack -j .heap -j .cyloadablemeta | |
ifeq ($(OS),Windows_NT) | |
RM = cmd //C del //Q //F | |
RRM = cmd //C rmdir //Q //S | |
else | |
RM = rm -f | |
RRM = rm -f -r | |
endif | |
all: $(BUILD_DIR) $(TARGET).elf | |
$(BUILD_DIR): | |
@echo "creating build directory" | |
@mkdir -p ./$(BUILD_DIR) | |
# %.cpp: %.h | |
# @echo "Header dependency $<" | |
# $(BUILD_DIR)/mono/slre.o: $(FRAMEWORK_PATH)/slre.c | |
# @echo "Compiling SLRE C: $<" | |
# @$(MKDIR) -p $(dir $@) | |
# @$(CC) $(CC_FLAGS) $(ONLY_C_FLAGS) -Wno-char-subscripts $(CDEFS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/mono/%.o: $(FRAMEWORK_PATH)/%.c $(MONO_HEADERS) | |
@echo "Compiling C: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CC) $(CC_FLAGS) $(ONLY_C_FLAGS) -Wno-char-subscripts $(CDEFS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/mono/%.o: $(FRAMEWORK_PATH)/%.cpp $(MONO_HEADERS) | |
@echo "Compiling mono C++: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CXX) $(CC_FLAGS) $(ONLY_CPP_FLAGS) $(CDEFS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/mbed/%.o: $(MBED_PATH)/%.c $(MBED_HEADERS) | |
@echo "Compiling mbed C: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CC) $(CC_FLAGS) $(ONLY_C_FLAGS) $(CDEFS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/mbed/%.o: $(MBED_PATH)/%.cpp $(MBED_HEADERS) | |
@echo "Compiling mbed C++: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CXX) $(CC_FLAGS) $(ONLY_CPP_FLAGS) $(CDEFS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/mbed/fat/%.o: $(MBED_FS)/fat/%.cpp $(MBED_HEADERS) | |
@echo "Compiling mbed fs C++: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CXX) $(CC_FLAGS) $(ONLY_CPP_FLAGS) $(CDEFS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/mbed/sd/%.o: $(MBED_FS)/sd/%.cpp $(MBED_HEADERS) | |
@echo "Compiling mbed fs C++: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CXX) $(CC_FLAGS) $(ONLY_CPP_FLAGS) $(CDEFS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/%.o: %.c $(TARGET_HEADERS) | |
@echo "Compiling C: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CC) $(CC_FLAGS) $(ONLY_C_FLAGS) $(CDEFS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/%.o: %.cpp $(TARGET_HEADERS) | |
@echo "Compiling C++: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CXX) $(CC_FLAGS) $(ONLY_CPP_FLAGS) $(CDEFS) $(INCS) -o $@ $< | |
$(TARGET).elf: $(CYPRESS_LIB) $(COMP_LIB) $(MBED_TARGET_OBJECTS) $(MBED_FS_TARGET_OBJECTS) $(MONO_TARGET_OBJECTS) $(TARGET_OBJECTS) | |
@echo "Linking $(notdir $@)" | |
@$(LD) -Wl,--start-group $(LD_FLAGS) -o $@ $^ -mthumb -march=armv7-m -mfix-cortex-m3-ldrd "-Wl,-Map,mono_project.map" -T $(LINKER_SCRIPT) -g "-u\ _printf_float" $(LD_SYS_LIBS) -Wl,--gc-sections -Wl,--end-group | |
$(TARGET).hex: $(TARGET).elf | |
$(ELFTOOL) -C $^ --flash_size $(FLASH_SIZE) --flash_row_size $(FLASH_ROW_SIZE) | |
$(OBJCOPY) -O ihex $(COPY_FLAGS) $< $@ | |
$(ELFTOOL) -B $^ --flash_size $(FLASH_SIZE) --flash_array_size $(FLASH_ARRAY_SIZE) --flash_row_size $(FLASH_ROW_SIZE) --ee_array $(EE_ARRAY) --ee_row_size $(EE_ROW_SIZE) | |
$(TARGET): $(OBJS) ${LINKER_SCRIPT} | |
@echo "Other link: $(OBJS)" | |
$(LD) $(LDSCRIPT) $(OBJS) -o $@ | |
$(BUILD_DIR)/cypress/%.o: $(INCLUDE_DIR)/%.s $(PSOC_HEADERS) | |
@echo "Assembling Cypress PSoC5: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(AS) $(AS_FLAGS) $(INCS) -o $@ $< | |
$(BUILD_DIR)/cypress/%.o: $(INCLUDE_DIR)/%.c $(PSOC_HEADERS) | |
@echo "Compiling Cypress PSoC5 C: $<" | |
@$(MKDIR) -p $(dir $@) | |
@$(CC) $(CC_FLAGS) $(ONLY_C_FLAGS) $(CDEFS) $(INCS) -o $@ $< | |
$(CYPRESS_LIB): $(COMP_LIB) $(SYS_TARGET_OBJECTS) | |
@echo "Linking Cypress PSoC5 static library" | |
@$(AR) rcs $@ $^ | |
$(MBED_LIB): | |
@echo "Building mbed library..." | |
@make -C $(MBED_PATH) | |
systemFiles: | |
@echo $(SYS_OBJECTS) | |
appFiles: | |
@echo $(TARGET_OBJECTS) | |
mbedFiles: | |
@echo $(MBED_TARGET_OBJECTS) | |
monoFiles: | |
@echo $(MONO_TARGET_OBJECTS) | |
includeFiles: | |
@echo $(MONO_INCLUDES) $(MBED_INCLUDES) $(PSOC_INCLUDES) | |
headers: | |
@echo $(TARGET_HEADERS) $(MONO_HEADERS) $(MBED_HEADERS) $(PSOC_HEADERS) | |
install: $(TARGET).elf | |
@echo "Programming app to device..." | |
$(MONOPROG) -p $(TARGET).elf --verbose=2 | |
debug: $(TARGET).elf | |
@echo "Launching GDB... (Make sure OpenOCD is running!)" | |
echo "target extended-remote :3333\nmonitor reset halt\n" > gdb_script | |
$(GDB) -x gdb_script $(TARGET).elf -tui | |
clean: | |
$(RRM) $(BUILD_DIR) | |
$(RRM) $(RELEASE_DIR) | |
summary: $(TARGET).elf | |
$(ELFTOOL) -S $(TARGET).elf | |
## $(LD) -Wl,--start-group $(LD_FLAGS) libs/CyCompLib.a $(LDSCRIPT) -o $@ $^ -Wl,--end-group $(LD_SYS_LIBS) | |
## $(ELFTOOL) -C $@ --flash_size $(FLASH_SIZE) --flash_row_size $(FLASH_ROW_SIZE) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment