--- nono/Makefile.inc 2026/04/29 17:04:30 1.1.1.2 +++ nono/Makefile.inc 2026/04/29 17:04:37 1.1.1.4 @@ -1,8 +1,39 @@ # # nono -# Copyright (C) 2018 isaki@NetBSD.org +# Copyright (C) 2020 nono project +# Licensed under nono-license.txt # +# 共通の定義。 +# サブディレクトリの Makefile は先頭で .include すること。 +# +# ここでは以下の変数を定義する。これらはコマンドライン上に完全順不同で登場 +# すると読みにくいのでなんとなくグループ分けしたいというくらいの意味合い。 +# +# CCFLAGS +# C/C++ 共通のコンパイラオプション。 +# WARNFLAGS +# C/C++ 共通のワーニングオプション。 +# WARNFLAGS_C +# WARNFLAGS_CXX +# C/C++ 専用のワーニングオプション。 +# CPPFLAGS +# C/C++ 共通のプリプロセッサオプション。 +# +# これらの変数には必要なら各 Makefile で値を追加してよい。 +# +# COPT は C/C++ 共通の追加の一時的なオプションで、make のコマンドラインで +# 指定されることを想定している (./Makefile.rule 参照)。 + +# ここからコード + +# システム定義(/usr/share/mk/*.mk) の CFLAGS、CXXFLAGS は使わない。 +# 定義が OS によってまちまちなのと、特に NetBSD の CXXFLAGS は特定のオプション +# を勝手に削るとか実にきしょい動きをするのでハマる。CPPFLAGS も念のため。 +CFLAGS= # reset system definition +CXXFLAGS= # reset system definition +CPPFLAGS= # reset system definition + .include "Makefile.cfg" PROFOPT= -g @@ -19,27 +50,29 @@ PROFOPT= -g ## UBSan #PROFOPT+= -fsanitize=undefined -# CFLAGS は c/c++ 共通のコンパイルオプション -# CXXFLAGS は CFLAGS に追加する c++ 専用のコンパイルオプション -# CPPFLAGS は c/c++ 共通のプリプロセッサオプション - -CXX+= -std=c++11 - -CFLAGS+= -O2 -CFLAGS+= ${PROFOPT} -CFLAGS+= -Wall -Werror -Wshadow -CFLAGS+= -Wno-sign-compare -CFLAGS+= -Wno-unused-result -CFLAGS+= -Wpointer-arith +CCFLAGS+= -O2 +CCFLAGS+= ${PROFOPT} -.if ${NETDRIVER} == "tap" -CFLAGS+= -DNETDRIVER_TAP -.endif -.if ${NETDRIVER} == "bpf" -CFLAGS+= -DNETDRIVER_BPF +# 最適化オプションは、コンパイラ/アーキテクチャごとに有効な組み合わせと +# 意味合いが違っており、オプションが存在するかどうかだけでは判断できず、 +# それぞれ手動で最適解を決定しないといけない。 +.if ("${ARCH}" == "x86_64" || "${ARCH}" == "i386") +CCFLAGS+= -march=native -mtune=native .endif -CXXFLAGS+= -Wnon-virtual-dtor +# C++17 では不要になるはず? +CXXFLAGS+= -faligned-new + +WARNFLAGS+= -Wall -Werror -Wshadow +WARNFLAGS+= -Wignored-qualifiers +WARNFLAGS+= -Wno-sign-compare +WARNFLAGS+= -Wno-unused-result +WARNFLAGS+= -Wpointer-arith + +WARNFLAGS_CXX+= -Wnon-virtual-dtor + +WARNFLAGS_C+= ${WARNFLAGS_C_cfg} +WARNFLAGS_CXX+= ${WARNFLAGS_CXX_cfg} CPPFLAGS+= -I. CPPFLAGS+= -I.. @@ -51,6 +84,20 @@ CPPFLAGS+= -I../m680x0 CPPFLAGS+= -I../m88xx0 CPPFLAGS+= -I../vm +.if ${NETDRIVER} == "tap" +CPPFLAGS+= -DNETDRIVER_TAP +.endif +.if ${NETDRIVER} == "bpf" +CPPFLAGS+= -DNETDRIVER_BPF +.endif + +# CFLAGS は C コンパイラに指定するコンパイルオプション。 +# CXXFLAGS は C++ コンパイラに指定するコンパイルオプション。 +# CPPFLAGS は C/C++ 共通でコンパイラに指定するプリプロセッサオプション。 + +CFLAGS+= ${CCFLAGS} ${WARNFLAGS} ${WARNFLAGS_C} +CXXFLAGS+= ${CCFLAGS} ${WARNFLAGS} ${WARNFLAGS_CXX} + LDFLAGS+= ${PROFOPT} # リンカに指定する引数 @@ -71,40 +118,3 @@ MYLIBS_GROUP= -Wl,--start-group ${MYLIBS .endif LIBS+= -lz - -all: ${TARGETS} - -.PHONY: clean -clean: - rm -rf ${TARGETS} *.o ${CLEANFILES} - -.PHONY: cleandir -cleandir: - rm -rf .depends ${CLEANDIRFILES} - -.PHONY: depend -.if "${CSRCS}" != "" || "${CXXSRCS}" != "" -.PHONY: ${CSRCS:.c=.d} ${CXXSRCS:.cpp=.d} -depend: ${CSRCS:.c=.d} ${CXXSRCS:.cpp=.d} - cat ${.ALLSRC} > .depends - rm -f *.d -.endif - -.for f in ${CSRCS} -${f:.c=.d}: - ${CC} ${CPPFLAGS} -E -MM $f > $@ -.endfor -.for f in ${CXXSRCS} -${f:.cpp=.d}: - ${CXX} ${CPPFLAGS} -E -MM $f > $@ -.endfor - -.if exists(${.CURDIR}/.depends) -.include "${.CURDIR}/.depends" -.endif - -.c.o: - ${CC} ${CFLAGS} ${CPPFLAGS} ${CFLAGS.$<} ${CPPFLAGS.$<} -c $< -o $@ - -.cpp.o: - ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXFLAGS.$<} ${CPPFLAGS.$<} -c $< -o $@