OSDN Git Service

MochiBooterの大幅改造(ATA-PIOreadによるカーネルロード)、VMイメージ作成ツール追加など
[mochi/master.git] / src / booter / Makefile
1 #******************************************************************************#
2 #* src/booter/Makefile                                                        *#
3 #*                                                                 2017/07/06 *#
4 #* Copyright (C) 2016-2017 Mochi.                                             *#
5 #******************************************************************************#
6 #******************************************************************************#
7 #* マクロ設定                                                                 *#
8 #******************************************************************************#
9 # ベースディレクトリsrc/からの相対パス
10 CUR_DIR   = booter
11
12 # IPL部バイナリ名
13 IPL_NAME  = booter-ipl
14 # メイン部バイナリ名
15 MAIN_NAME = booter-main
16
17 # IPL部ソースコード
18 IPL_SRCS  = Ipl/IplMain.s
19 # メイン部ソースコード
20 MAIN_SRCS = InitCtrl/InitCtrlInit16.s \
21             InitCtrl/InitCtrlInit32.s \
22             IntMng/IntMngInit.c       \
23             IntMng/IntMngIdt.c        \
24             IntMng/IntMngHdl.c        \
25             IntMng/IntMngPic.c        \
26             Driver/DriverInit.c       \
27             Driver/DriverA20.c        \
28             Driver/DriverAta.c        \
29             LoadMng/LoadMngInit.c     \
30             LoadMng/LoadMngKernel.c   \
31             Debug/DebugInit.c         \
32             Debug/DebugLog.c
33
34 # ASフラグ
35 ASFLAGS = --32
36
37 # Cフラグ
38 CFLAGS = -O                 \
39          -Wall              \
40          -masm=intel        \
41          -m32               \
42          -ffreestanding     \
43          -Iinclude/         \
44          -I../include       \
45          -DDEBUG_LOG_ENABLE
46
47 # LDフラグ
48 LDFLAGS = -melf_i386 \
49           -lc
50
51
52 #******************************************************************************#
53 #* 自動設定マクロ                                                             *#
54 #******************************************************************************#
55 # ベースディレクトリパス
56 BASE_DIR  = $(shell pwd | sed -e 's/\/src\/$(subst /,\/,$(CUR_DIR))//')
57 # 中間ファイル格納先ディレクトリパス
58 OBJS_DIR  = $(BASE_DIR)/build/objs/$(CUR_DIR)
59 # ディレクトリリスト
60 DIR_LIST  = $(sort $(addprefix $(OBJS_DIR)/, $(dir $(IPL_SRCS) $(MAIN_SRCS))))
61
62 # IPL部オブジェクトファイル
63 IPL_OBJS  = $(addprefix $(OBJS_DIR)/, $(IPL_SRCS:.s=.o))
64 # メイン部オブジェクトファイル
65 MAIN_OBJS = $(addprefix $(OBJS_DIR)/,                           \
66               $(patsubst %.s,%.o,$(filter %.s, $(MAIN_SRCS)))   \
67               $(patsubst %.c,%.o,$(filter %.c, $(MAIN_SRCS))))
68
69 # ライブラリディレクトリ
70 LDFLAGS += -L$(BASE_DIR)/build/objs/libraries
71
72
73 #******************************************************************************#
74 #* phonyターゲット                                                            *#
75 #******************************************************************************#
76 # サブディレクトリも含めたコンパイル
77 .PHONY: all
78 all: $(DIR_LIST) $(OBJS_DIR)/$(IPL_NAME) $(OBJS_DIR)/$(MAIN_NAME) Makefile
79
80 # 全生成ファイルの削除
81 .PHONY: clean
82 clean:
83         -rm -rf $(OBJS_DIR)
84
85
86 #******************************************************************************#
87 #* 生成規則                                                                   *#
88 #******************************************************************************#
89 $(DIR_LIST):
90         mkdir -p $@
91
92 # IPL部バイナリ
93 $(OBJS_DIR)/$(IPL_NAME): $(IPL_OBJS) Makefile
94         $(LD) -T booter-ipl.lds -o $@ $(IPL_OBJS) $(LDFLAGS)
95
96 # メイン部バイナリ
97 $(OBJS_DIR)/$(MAIN_NAME): $(MAIN_OBJS) Makefile
98         $(LD) -T booter-main.lds -o $@ $(MAIN_OBJS) $(LDFLAGS)
99
100 # アセンブラファイルコンパイル
101 $(OBJS_DIR)/%.o: %.s Makefile
102         $(AS) $(ASFLAGS) -o $@ $<
103
104 # Cファイルコンパイル
105 $(OBJS_DIR)/%.o: %.c Makefile
106         $(CC) $(CFLAGS) -o $@ -c $<
107
108
109 #******************************************************************************#