-
Notifications
You must be signed in to change notification settings - Fork 3
/
Makefile
133 lines (104 loc) · 4.14 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#
# Copyright (C) 2016-2017 Alexey Dynda
#
# This file is part of AVR Simulator project.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#################################################################
# Input parameters:
# PROJECT - Arduino project name
# LIBRARIES - List of libraries, neeed for the project
# BLD - build dir
#
default: all
BLD ?= bld
PROJECT ?= arkanoid
LIBRARIES ?= ssd1306
MCU ?= attiny85
ifeq ($(MCU),attiny85)
CCFLAGS += -D__AVR_ATtiny85__ -D__AVR_ARCH__=100
endif
ifeq ($(MCU),atmega328p)
CCFLAGS += -D__AVR_ATmega328P__ -D__AVR_ARCH__=100
LIBRARIES += Wire
endif
# Emulator library files
EMU_FILES := $(wildcard emu/alt_arduino/*.cpp) \
$(wildcard emu/alt_gcc/utils/*.cpp) \
$(wildcard emu/gcc/util/*.cpp) \
$(wildcard emu/arduino/*.cpp) \
$(wildcard emu/core/*.cpp) \
MODULES_FILES := $(wildcard modules/*/*.cpp)
EMU_SRC_FILES = $(EMU_FILES) $(MODULES_FILES)
EMU_OBJ_FILES = $(addprefix $(BLD)/, $(addsuffix .o, $(basename $(EMU_SRC_FILES))))
# Emulator executable files
MAIN_FILES := $(wildcard emu/main/*.cpp)
MAIN_SRC_FILES = $(MAIN_FILES)
MAIN_OBJ_FILES = $(addprefix $(BLD)/, $(addsuffix .o, $(basename $(MAIN_SRC_FILES))))
# Project files (include requires libraries and project code)
PROJECT_FILES := $(wildcard projects/$(PROJECT)/*.cpp) \
$(wildcard projects/$(PROJECT)/*.ino) \
boards/$(PROJECT).cpp
LIBRARY_FILES := $(foreach lib, $(LIBRARIES), $(wildcard libraries/$(lib)/*.cpp libraries/$(lib)/*.c)) \
$(foreach lib, $(LIBRARIES), $(wildcard libraries/$(lib)/src/*.cpp libraries/$(lib)/src/*.c)) \
$(foreach lib, $(LIBRARIES), $(wildcard libraries/$(lib)/src/*/*.cpp libraries/$(lib)/src/*/*.c)) \
PROJECT_SRC_FILES = $(PROJECT_FILES) $(LIBRARY_FILES)
# Looking for installed SDL2 library
SDL := $(shell sdl2-config --cflags --libs)
# set up compiler and options
ifeq ($(CROSS_COMPILE),)
STRIP ?= strip
AR ?= ar
else
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
STRIP = $(CROSS_COMPILE)strip
AR = $(CROSS_COMPILE)ar
endif
export CROSS_COMPILE
.SUFFIXES: .c .cpp .ino
# Compile c as c++ because we use overloaded C++ operators.
$(BLD)/%.o: %.c
mkdir -p $(dir $@)
$(CXX) -std=c++11 $(CCFLAGS) -c $< -o $@
# $(CC) $(CCFLAGS) -c $< -o $@
$(BLD)/%.o: %.cpp
mkdir -p $(dir $@)
$(CXX) -std=c++11 $(CCFLAGS) -c $< -o $@
$(BLD)/%.o: %.ino
mkdir -p $(dir $@)
$(CXX) -std=c++11 $(CCFLAGS) -x c++ -c $< -o $@
INCLUDES += -Iemu/alt_arduino -Iemu/arduino \
-Iemu/alt_gcc -Iemu/gcc \
-Imodules \
-Iemu \
-Iemu/mcu \
$(addprefix -Ilibraries/, $(LIBRARIES)) \
$(addsuffix /src,$(addprefix -Ilibraries/, $(LIBRARIES))) \
CCFLAGS += -fPIC -g $(INCLUDES) -Wall -Werror -DF_CPU=16000000 -pthread \
$(SDL)
# -nostdinc
PROJECT_OBJ_FILES = $(addprefix $(BLD)/, $(addsuffix .o, $(basename $(PROJECT_SRC_FILES))))
.PHONY: clean all executable run
all: executable
clean:
rm -rf $(BLD)
$(BLD)/lib$(MCU).so: $(EMU_OBJ_FILES)
$(CXX) -shared $(CCFLAGS) -o $@ $(EMU_OBJ_FILES) -L. -L$(BLD) $(SDL) -lm -lpthread
$(BLD)/lib$(PROJECT).so: $(PROJECT_OBJ_FILES) $(BLD)/lib$(MCU).so
$(CXX) -shared $(CCFLAGS) -o $@ $(PROJECT_OBJ_FILES) -L. -L$(BLD) -l$(MCU)
executable: $(MAIN_OBJ_FILES) $(BLD)/lib$(MCU).so $(BLD)/lib$(PROJECT).so
$(CXX) $(CCFLAGS) -o $(BLD)/start $(MAIN_OBJ_FILES) -L. -L$(BLD) $(SDL) -lm -lpthread -l$(PROJECT) -l$(MCU)
run: executable
LD_LIBRARY_PATH=$(BLD) ./$(BLD)/start