build: align minimum build dependencies with ndn-cxx

 * Recommend boost >= 1.65.1 and gcc >= 7.4.0
 * Require clang >= 4.0, or Xcode >= 9.0 on macOS
 * Silence an ABI-related diagnostic message from gcc on armv7

Refs: #5087, #5106
Change-Id: I88ef0e0f183736f19ac414a84baebb0e1073381b
diff --git a/README-dev.md b/README-dev.md
index d3b2cec..0a76f22 100644
--- a/README-dev.md
+++ b/README-dev.md
@@ -2,12 +2,12 @@
 
 ## Licensing Requirements
 
-Contributions to ndn-tools MUST be licensed under GPL 3.0 or a compatible license.
+Contributions to ndn-tools must be licensed under the GPL 3.0 or a compatible license.
 If you choose GPL 3.0, include the following license boilerplate into all C++ code files:
 
     /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
     /*
-     * Copyright (c) [Year(s)],  [Copyright Holder(s)].
+     * Copyright (c) [Year(s)] [Copyright Holder(s)].
      *
      * This file is part of ndn-tools (Named Data Networking Essential Tools).
      * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -26,59 +26,59 @@
 
 ## Directory Structure and Build Script
 
-All tools are placed in subdirectories under `tools/` directory.
+All tools are placed in subdirectories of the [`tools`](tools) directory.
 
 A tool can consist of one or more programs.
 For instance, a pair of consumer and producer programs that are designed to work together
 should be considered a single tool, not two separate tools.
 
-Each tool MUST have a `wscript` build script in its subdirectory.
-It will be invoked if this tool is selected for the build.
-It SHOULD compile the programs into `build/bin` directory (`target='../../bin/foo'`).
+Each tool must have a `wscript` build script in its subdirectory. This script will be
+invoked automatically if the corresponding tool is selected for the build. It should
+compile the source code and produce one or more binaries in the `build/bin` directory
+(e.g., use `target='../../bin/foo'`).
 
 ### Shared Modules
 
-Modules shared among multiple tools SHOULD be placed in `core/` directory.
+Modules shared among multiple tools should be placed in the [`core`](core) directory.
 They are available for use in all tools.
 
 A header in `core/` can be included in a tool like `#include "core/foo.hpp"`.
 
-`wscript` of a tool can link a program with modules in `core/` with `use='core-objects'`.
+The `wscript` of a tool can link a program with modules in `core/` with `use='core-objects'`.
 
 ### Documentation
 
-`README.md` in the subdirectory of a tool SHOULD give a brief description.
+A file named `README.md` in the subdirectory of each tool should provide a brief
+description.
 
-Manual pages for each program SHOULD be written in reStructuredText format
-and placed in `manpages/` directory.
+Manual pages for each program should be written in reStructuredText format
+and placed in the [`manpages`](manpages) directory.
 
 ## Code Guidelines
 
-C++ code SHOULD conform to
-[ndn-cxx code style](http://named-data.net/doc/ndn-cxx/current/code-style.html).
+C++ code should conform to the
+[ndn-cxx code style](https://named-data.net/doc/ndn-cxx/current/code-style.html).
 
 ### Namespace
 
-Types in each tool SHOULD be declared in a sub-namespace inside `namespace ndn`.
-For example, a tool in `tools/foo` directory has namespace `ndn::foo`.  
+Types in each tool should be declared in a sub-namespace inside `namespace ndn`.
+For example, a tool in `tools/foo` directory has namespace `ndn::foo`.
 This allows the tool to reference ndn-cxx types with unqualified name lookup.
 This also prevents name conflicts between ndn-cxx and tools.
 
-Types in `core/` SHOULD be declared directly inside `namespace ndn`,
+Types in `core/` should be declared directly inside `namespace ndn`,
 or in a sub-namespace if desired.
 
-`using namespace` SHOULD NOT be used except in block scope.
-
 ### main Function
 
-The `main` function of a program SHOULD be declared as a static function in
+The `main` function of a program should be declared as a static function in
 the namespace of the corresponding tool. This allows referencing types in
 ndn-cxx and the tool via unqualified name lookup.
 
 Then, another (non-static) `main` function must be defined in the global
 namespace, and from there call the `main` function in the tool namespace.
 
-These two functions SHOULD appear in a file named `main.cpp` in the tool's
+These two functions should appear in a file named `main.cpp` in the tool's
 subdirectory.
 
 Example:
@@ -116,5 +116,5 @@
 
 ### Command Line Arguments
 
-[Boost.Program\_options](https://www.boost.org/doc/libs/1_58_0/doc/html/program_options.html) is
-preferred over getopt(3) for parsing command line arguments.
+[Boost.Program\_options](https://www.boost.org/doc/libs/1_65_1/doc/html/program_options.html)
+is strongly preferred over `getopt(3)` for parsing command line arguments.