Annotation of nono/Makefile.inc, revision 1.1.1.4

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.