--- nono/Makefile.inc 2026/04/29 17:04:28 1.1 +++ nono/Makefile.inc 2026/04/29 17:05:11 1.1.1.8 @@ -1,8 +1,45 @@ # # nono -# Copyright (C) 2018 isaki@NetBSD.org +# Copyright (C) 2020 nono project +# Licensed under nono-license.txt # +# 共通の定義。 +# サブディレクトリの Makefile は先頭で .include すること。 +# +# TOPDIR はこの Makefile.inc が置いてあるディレクトリ。 +# make を実行するサブディレクトリがここの1つ下でない場合は、そこからこの +# ディレクトリまでの相対パスを事前に定義しておくこと。 +# +# ここでは以下の変数を定義する。これらはコマンドライン上に完全順不同で登場 +# すると読みにくいのでなんとなくグループ分けしたいというくらいの意味合い。 +# +# 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 + +TOPDIR?= .. + .include "Makefile.cfg" PROFOPT= -g @@ -19,27 +56,40 @@ 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 -.endif +# C++17 では不要になるはず? +CXXFLAGS+= -faligned-new + +WARNFLAGS+= -Wall -Werror +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${TOPDIR} +CPPFLAGS+= -I${TOPDIR}/debugger +CPPFLAGS+= -I${TOPDIR}/fpe +CPPFLAGS+= -I${TOPDIR}/host +CPPFLAGS+= -I${TOPDIR}/lib +CPPFLAGS+= -I${TOPDIR}/m680x0 +CPPFLAGS+= -I${TOPDIR}/m88xx0 +CPPFLAGS+= -I${TOPDIR}/vm +CPPFLAGS+= -I${TOPDIR}/wx + +# CFLAGS は C コンパイラに指定するコンパイルオプション。 +# CXXFLAGS は C++ コンパイラに指定するコンパイルオプション。 +# CPPFLAGS は C/C++ 共通でコンパイラに指定するプリプロセッサオプション。 -CXXFLAGS+= -Wnon-virtual-dtor +CFLAGS+= ${CCFLAGS} ${WARNFLAGS} ${WARNFLAGS_C} +CXXFLAGS+= ${CCFLAGS} ${WARNFLAGS} ${WARNFLAGS_CXX} LDFLAGS+= ${PROFOPT} @@ -48,43 +98,14 @@ MYLIBS= \ ../vm/libnnvm.a \ ../debugger/libnndebugger.a \ ../m680x0/libnnm680x0.a \ + ../m88xx0/libnnm88xx0.a \ ../fpe/libnnfpe.a \ ../host/libnnhost.a \ ../lib/libnnlib.a \ -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 +.if "${.MAKE.OS}" == "Darwin" +# Apple Clang は --start-group, --end-group に対応してない。うーん。 +MYLIBS_GROUP= ${MYLIBS} ${MYLIBS} +.else +MYLIBS_GROUP= -Wl,--start-group ${MYLIBS} -Wl,--end-group .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 $@