-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathMakefile
More file actions
150 lines (120 loc) · 4.42 KB
/
Makefile
File metadata and controls
150 lines (120 loc) · 4.42 KB
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# == MARSDEV ==
# Multiplatform Mega Drive toolchain builder and installer
# This is the 'main' Makefile that calls others in their own subdirectories
ifeq ($(shell which makeinfo),)
$(error "'makeinfo' not found. Make sure the 'texinfo' package is installed.")
endif
ifeq ($(shell which wget),)
$(error "'wget' not found. Make sure the 'wget' package is installed.")
endif
MARS_BUILD_DIR ?= $(shell pwd)/mars
MARS_INSTALL_DIR ?= /opt/toolchains/mars
export MARS_BUILD_DIR
export MARS_INSTALL_DIR
GCC_VER ?= 15.2.0
LLVM_VER ?= main
.PHONY: all
all: sgdk
# Toolchains
.PHONY: m68k-toolchain
m68k-toolchain: m68k-toolchain.d
m68k-toolchain.d: | m68k-gcc-toolchain
$(MAKE) -C m68k-gcc-toolchain without-newlib GCC_VER=$(GCC_VER)
$(MAKE) -C m68k-gcc-toolchain install INSTALL_DIR=$(MARS_BUILD_DIR)/m68k-elf
touch $@
.PHONY: m68k-toolchain-newlib
m68k-toolchain-newlib: m68k-newlib.d
m68k-newlib.d: m68k-toolchain.d | m68k-gcc-toolchain
$(MAKE) -C m68k-gcc-toolchain all GCC_VER=$(GCC_VER)
$(MAKE) -C m68k-gcc-toolchain install INSTALL_DIR=$(MARS_BUILD_DIR)/m68k-elf
touch $@
.PHONY: sh-toolchain
sh-toolchain: sh-toolchain.d
sh-toolchain.d: | sh-gcc-toolchain
$(MAKE) -C sh-gcc-toolchain without-newlib GCC_VER=$(GCC_VER)
$(MAKE) -C sh-gcc-toolchain install INSTALL_DIR=$(MARS_BUILD_DIR)/sh-elf
touch $@
.PHONY: sh-toolchain-newlib
sh-toolchain-newlib: sh-newlib.d
sh-newlib.d: sh-toolchain.d | sh-gcc-toolchain
$(MAKE) -C sh-gcc-toolchain all GCC_VER=$(GCC_VER)
$(MAKE) -C sh-gcc-toolchain install INSTALL_DIR=$(MARS_BUILD_DIR)/sh-elf
touch $@
.PHONY: m68k-llvm
m68k-llvm.d: | llvm-project
mkdir -p llvm-project/build
cd llvm-project/build && cmake -G Ninja -D CMAKE_BUILD_TYPE="Release" \
-D LLVM_EXPERIMENTAL_TARGETS_TO_BUILD="M68k" \
-D LLVM_ENABLE_PROJECTS="clang" -S ../llvm
cd llvm-project/build && cmake --build .
mkdir -p $(MARS_BUILD_DIR)/m68k-elf/llvm
cp -rf llvm-project/build/bin $(MARS_BUILD_DIR)/m68k-elf/llvm/
cp -rf llvm-project/build/lib/clang/*/include $(MARS_BUILD_DIR)/m68k-elf/llvm/
cp -rf llvm-project/build/libexec $(MARS_BUILD_DIR)/m68k-elf/llvm/
touch $@
# Platform Tools
.PHONY: x68k-tools
x68k-tools: x68k-tools.d
x68k-tools.d: | m68k-newlib.d
$(MAKE) -C x68k-tools
touch $@
.PHONY: mdtools-sik sik-tools
sik-tools: mdtools-sik
mdtools-sik: mdtools-sik.d
mdtools-sik.d: | m68k-toolchain.d
$(MAKE) -C mdtools-sik
touch $@
.PHONY: mdtools-flamewing flamewing-tools
flamewing-tools: mdtools-flamewing
mdtools-flamewing: mdtools-flamewing.d
mdtools-flamewing.d: | m68k-toolchain.d
$(MAKE) -C mdtools-flamewing
touch $@
.PHONY: sgdk
sgdk: sgdk.d
sgdk.d: | m68k-toolchain.d
$(MAKE) -C sgdk
touch $@
.PHONY: sgdk-samples
sgdk-samples: | sgdk.d
$(MAKE) -C sgdk samples
# Intermediate steps
m68k-gcc-toolchain:
git submodule update --init
sh-gcc-toolchain:
git submodule update --init
llvm-project:
git clone https://github.com/llvm/llvm-project --branch $(LLVM_VER) --depth=1
# Install step
.PHONY: install
install:
@mkdir -p $(MARS_INSTALL_DIR)
cp -rf $(MARS_BUILD_DIR)/* $(MARS_INSTALL_DIR)
@echo "#!/bin/sh" > $(MARS_INSTALL_DIR)/mars.sh
@echo "export MARSDEV=$(MARS_INSTALL_DIR)" >> $(MARS_INSTALL_DIR)/mars.sh
@echo "export GDK=$(MARS_INSTALL_DIR)/m68k-elf" >> $(MARS_INSTALL_DIR)/mars.sh
@echo "export PATH=\"$$`echo PATH`:$(MARS_INSTALL_DIR)/m68k-elf/bin\"" >> $(MARS_INSTALL_DIR)/mars.sh
@echo "export PATH=\"$$`echo PATH`:$(MARS_INSTALL_DIR)/sh-elf/bin\"" >> $(MARS_INSTALL_DIR)/mars.sh
@chmod +x $(MARS_INSTALL_DIR)/mars.sh
@echo "--------------------------------------------------------------------------------"
@if [ ! -z "${LANG##*ja_JP*}" ]; then \
echo "Marsdevは$(MARS_INSTALL_DIR)にインストールしました。" ;\
echo "プロジェクトをコンパイルする前に、適切な環境変数を設定するために以下のコマンドを実行してください:" ;\
else \
echo "Marsdev has been installed to $(MARS_INSTALL_DIR)." ;\
echo "Run the following to set the proper environment variables before building your projects:" ;\
fi
@echo "source $(MARS_INSTALL_DIR)/mars.sh"
@echo "--------------------------------------------------------------------------------"
# Clean
.PHONY: clean purge
clean:
$(MAKE) -C m68k-gcc-toolchain clean
$(MAKE) -C sh-gcc-toolchain clean
if [ -d llvm-project ]; then rm -rf llvm-project/build; fi
$(MAKE) -C mdtools-sik clean
$(MAKE) -C mdtools-flamewing clean
$(MAKE) -C x68k-tools clean
$(MAKE) -C sgdk clean
rm -rf $(MARS_BUILD_DIR)
rm -f *.d