|
|
1.1 root 1: #
2: # nono
1.1.1.3 root 3: # Copyright (C) 2020 nono project
4: # Licensed under nono-license.txt
1.1 root 5: #
6:
1.1.1.3 root 7: # 共通の定義。
8: # サブディレクトリの Makefile は先頭で .include すること。
9: #
10: # ここでは以下の変数を定義する。これらはコマンドライン上に完全順不同で登場
11: # すると読みにくいのでなんとなくグループ分けしたいというくらいの意味合い。
12: #
13: # CCFLAGS
14: # C/C++ 共通のコンパイラオプション。
15: # WARNFLAGS
16: # C/C++ 共通のワーニングオプション。
17: # WARNFLAGS_C
18: # WARNFLAGS_CXX
19: # C/C++ 専用のワーニングオプション。
20: # CPPFLAGS
21: # C/C++ 共通のプリプロセッサオプション。
22: #
23: # これらの変数には必要なら各 Makefile で値を追加してよい。
1.1.1.4 ! root 24: #
! 25: # COPT は C/C++ 共通の追加の一時的なオプションで、make のコマンドラインで
! 26: # 指定されることを想定している (./Makefile.rule 参照)。
1.1.1.3 root 27:
28: # ここからコード
29:
30: # システム定義(/usr/share/mk/*.mk) の CFLAGS、CXXFLAGS は使わない。
31: # 定義が OS によってまちまちなのと、特に NetBSD の CXXFLAGS は特定のオプション
32: # を勝手に削るとか実にきしょい動きをするのでハマる。CPPFLAGS も念のため。
33: CFLAGS= # reset system definition
34: CXXFLAGS= # reset system definition
35: CPPFLAGS= # reset system definition
36:
1.1 root 37: .include "Makefile.cfg"
38:
39: PROFOPT= -g
40: #PROFOPT= -g -pg
41:
42: ## ASan for GCC
43: #PROFOPT+= -fsanitize=address -fno-omit-frame-pointer -static-libstdc++
44: ## ASan for clang
45: #PROFOPT+= -fsanitize=address -fno-omit-frame-pointer -O1
46: ## MSan for clang
47: #PROFOPT+= -fsanitize=memory -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize-memory-track-origins=2 -O1
48: ## TSan
49: #PROFOPT+= -fsanitize=thread
50: ## UBSan
51: #PROFOPT+= -fsanitize=undefined
52:
1.1.1.3 root 53: CCFLAGS+= -O2
54: CCFLAGS+= ${PROFOPT}
1.1.1.4 ! root 55:
! 56: # 最適化オプションは、コンパイラ/アーキテクチャごとに有効な組み合わせと
! 57: # 意味合いが違っており、オプションが存在するかどうかだけでは判断できず、
! 58: # それぞれ手動で最適解を決定しないといけない。
! 59: .if ("${ARCH}" == "x86_64" || "${ARCH}" == "i386")
! 60: CCFLAGS+= -march=native -mtune=native
! 61: .endif
! 62:
! 63: # C++17 では不要になるはず?
! 64: CXXFLAGS+= -faligned-new
! 65:
1.1.1.3 root 66: WARNFLAGS+= -Wall -Werror -Wshadow
67: WARNFLAGS+= -Wignored-qualifiers
68: WARNFLAGS+= -Wno-sign-compare
69: WARNFLAGS+= -Wno-unused-result
70: WARNFLAGS+= -Wpointer-arith
1.1 root 71:
1.1.1.3 root 72: WARNFLAGS_CXX+= -Wnon-virtual-dtor
1.1 root 73:
1.1.1.3 root 74: WARNFLAGS_C+= ${WARNFLAGS_C_cfg}
75: WARNFLAGS_CXX+= ${WARNFLAGS_CXX_cfg}
1.1 root 76:
1.1.1.2 root 77: CPPFLAGS+= -I.
78: CPPFLAGS+= -I..
79: CPPFLAGS+= -I../debugger
80: CPPFLAGS+= -I../fpe
81: CPPFLAGS+= -I../host
82: CPPFLAGS+= -I../lib
83: CPPFLAGS+= -I../m680x0
84: CPPFLAGS+= -I../m88xx0
85: CPPFLAGS+= -I../vm
86:
1.1.1.3 root 87: .if ${NETDRIVER} == "tap"
88: CPPFLAGS+= -DNETDRIVER_TAP
89: .endif
90: .if ${NETDRIVER} == "bpf"
91: CPPFLAGS+= -DNETDRIVER_BPF
92: .endif
93:
94: # CFLAGS は C コンパイラに指定するコンパイルオプション。
95: # CXXFLAGS は C++ コンパイラに指定するコンパイルオプション。
96: # CPPFLAGS は C/C++ 共通でコンパイラに指定するプリプロセッサオプション。
97:
98: CFLAGS+= ${CCFLAGS} ${WARNFLAGS} ${WARNFLAGS_C}
99: CXXFLAGS+= ${CCFLAGS} ${WARNFLAGS} ${WARNFLAGS_CXX}
100:
1.1 root 101: LDFLAGS+= ${PROFOPT}
102:
103: # リンカに指定する引数
104: MYLIBS= \
105: ../vm/libnnvm.a \
106: ../debugger/libnndebugger.a \
107: ../m680x0/libnnm680x0.a \
1.1.1.2 root 108: ../m88xx0/libnnm88xx0.a \
1.1 root 109: ../fpe/libnnfpe.a \
110: ../host/libnnhost.a \
111: ../lib/libnnlib.a \
112:
1.1.1.2 root 113: .if "${.MAKE.OS}" == "Darwin"
114: # Apple Clang は --start-group, --end-group に対応してない。うーん。
115: MYLIBS_GROUP= ${MYLIBS} ${MYLIBS}
116: .else
117: MYLIBS_GROUP= -Wl,--start-group ${MYLIBS} -Wl,--end-group
118: .endif
119:
120: LIBS+= -lz
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.