Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 69 additions & 62 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ BOLTVERSION := $(DEFAULT_BOLTVERSION)

-include config.vars

# Save flags inherited from environment (or config.vars) before we start munging them
CPPFLAGS_FROM_ENV := $(CPPFLAGS)
CPPFLAGS =
CFLAGS_FROM_ENV := $(CFLAGS)
CFLAGS =

# Use Homebrew LLVM toolchain for fuzzing support on macOS
ifeq ($(OS),Darwin)
export PATH := /opt/homebrew/opt/llvm/bin:$(PATH)
Expand Down Expand Up @@ -289,8 +295,9 @@ PKG_CONFIG_PATH := $(SQLITE_PREFIX)/lib/pkgconfig:$(PKG_CONFIG_PATH)
endif
endif

CPPFLAGS += -DCLN_NEXT_VERSION="\"$(CLN_NEXT_VERSION)\"" -DPKGLIBEXECDIR="\"$(pkglibexecdir)\"" -DBINDIR="\"$(bindir)\"" -DPLUGINDIR="\"$(plugindir)\"" -DCCAN_TAL_NEVER_RETURN_NULL=1
CFLAGS = $(CPPFLAGS) $(CWARNFLAGS) $(CDEBUGFLAGS) $(COPTFLAGS) -I $(CCANDIR) $(EXTERNAL_INCLUDE_FLAGS) -I . -I$(CPATH) $(SQLITE3_CFLAGS) $(SODIUM_CFLAGS) $(POSTGRES_INCLUDE) $(FEATURES) $(COVFLAGS) $(DEV_CFLAGS) -DSHACHAIN_BITS=48 -DJSMN_PARENT_LINKS $(PIE_CFLAGS) $(COMPAT_CFLAGS) $(CSANFLAGS)
# Put the environment-inherited flags *last* so the user has the final say.
CPPFLAGS += -DCLN_NEXT_VERSION="\"$(CLN_NEXT_VERSION)\"" -DPKGLIBEXECDIR="\"$(pkglibexecdir)\"" -DBINDIR="\"$(bindir)\"" -DPLUGINDIR="\"$(plugindir)\"" -DCCAN_TAL_NEVER_RETURN_NULL=1 -I$(CCANDIR) $(EXTERNAL_INCLUDE_FLAGS) -I. -I$(CPATH) $(POSTGRES_INCLUDE) -DSHACHAIN_BITS=48 -DJSMN_PARENT_LINKS $(COMPAT_CFLAGS) $(CPPFLAGS_FROM_ENV)
CFLAGS = $(CWARNFLAGS) $(CDEBUGFLAGS) $(COPTFLAGS) $(SQLITE3_CFLAGS) $(SODIUM_CFLAGS) $(FEATURES) $(COVFLAGS) $(DEV_CFLAGS) $(PIE_CFLAGS) $(CSANFLAGS) $(CFLAGS_FROM_ENV)

# If CFLAGS is already set in the environment of make (to whatever value, it
# does not matter) then it would export it to subprocesses with the above value
Expand All @@ -314,7 +321,7 @@ LDLIBS = -L$(CPATH) -lm $(SQLITE3_LDLIBS) $(COVFLAGS)
endif

ifeq ($(HAVE_FUNCTION_SECTIONS),1)
LDLIBS += -Wl,--gc-sections
LDFLAGS += -Wl,--gc-sections
endif

# If we have the postgres client library we need to link against it as well
Expand All @@ -330,16 +337,16 @@ FORCE:
endif

show-flags: config.vars
@$(ECHO) "CC: $(CC) $(CFLAGS) -c -o"
@$(ECHO) "LD: $(LINK.o) $(filter-out %.a,$^) $(LOADLIBES) $(EXTERNAL_LDLIBS) $(LDLIBS) -o"
@$(ECHO) "CC: $(COMPILE.c) -o"
@$(ECHO) "LD: $(LINK.c) $(filter-out %.a,$^) $(LOADLIBES) $(EXTERNAL_LDLIBS) $(LDLIBS) -o"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should also switch the $(ALL_FUZZ_TARGETS): rule to $(LINK.c), or why fuzz targets should stay on $(LINK.o)? I mean $(ALL_FUZZ_TARGETS): rule still uses $(LINK.o). LINK.o does not carry $(CFLAGS)/$(CPPFLAGS), while LINK.c does. What do you think??

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. There was also one in tools/Makefile. Fixed both in 1f9cc13.


# We will re-generate, but we won't generate for the first time!
ccan/config.h config.vars &: configure ccan/tools/configurator/configurator.c
@if [ ! -f config.vars ]; then echo 'File config.vars not found: you must run ./configure before running make.' >&2; exit 1; fi
./configure --reconfigure

%.o: %.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)

# tools/update-mocks.sh does nasty recursive make, must not do this!
ifeq ($(SUPPRESS_GENERATION),1)
Expand Down Expand Up @@ -798,7 +805,7 @@ $(ALL_TEST_PROGRAMS) $(ALL_FUZZ_TARGETS): %: %.o
# (as per EXTERNAL_LDLIBS) so we filter them out here. We have to put the other
# .a files (if any) at the end of the link line.
$(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS):
@$(call VERBOSE, "ld $@", $(LINK.o) $(filter-out %.a,$^) $(filter-out external/%,$(filter %.a,$^)) $(LOADLIBES) $(EXTERNAL_LDLIBS) $(LDLIBS) $($(@)_LDLIBS) -o $@)
@$(call VERBOSE, "ld $@", $(LINK.c) $(filter-out %.a,$^) $(filter-out external/%,$(filter %.a,$^)) $(LOADLIBES) $(EXTERNAL_LDLIBS) $(LDLIBS) $($(@)_LDLIBS) -o $@)
ifeq ($(OS),Darwin)
@$(call VERBOSE, "dsymutil $@", dsymutil $@)
endif
Expand All @@ -819,7 +826,7 @@ endif
endif

$(ALL_FUZZ_TARGETS):
@$(call VERBOSE, "ld $@", $(LINK.o) $(filter-out %.a,$^) libcommon.a libccan.a $(LOADLIBES) $(EXTERNAL_LDLIBS) $(LDLIBS) $(FUZZ_LDFLAGS) -o $@)
@$(call VERBOSE, "ld $@", $(LINK.c) $(filter-out %.a,$^) libcommon.a libccan.a $(LOADLIBES) $(EXTERNAL_LDLIBS) $(LDLIBS) $(FUZZ_LDFLAGS) -o $@)
ifeq ($(OS),Darwin)
@$(call VERBOSE, "dsymutil $@", dsymutil $@)
endif
Expand Down Expand Up @@ -1085,113 +1092,113 @@ clightning-$(VERSION)-$(DISTRO).tar.xz: install
endif

ccan-breakpoint.o: $(CCANDIR)/ccan/breakpoint/breakpoint.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-base64.o: $(CCANDIR)/ccan/base64/base64.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-tal.o: $(CCANDIR)/ccan/tal/tal.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-tal-str.o: $(CCANDIR)/ccan/tal/str/str.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-tal-link.o: $(CCANDIR)/ccan/tal/link/link.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-tal-path.o: $(CCANDIR)/ccan/tal/path/path.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-tal-grab_file.o: $(CCANDIR)/ccan/tal/grab_file/grab_file.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-take.o: $(CCANDIR)/ccan/take/take.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-list.o: $(CCANDIR)/ccan/list/list.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-asort.o: $(CCANDIR)/ccan/asort/asort.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-ptr_valid.o: $(CCANDIR)/ccan/ptr_valid/ptr_valid.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-read_write_all.o: $(CCANDIR)/ccan/read_write_all/read_write_all.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-str.o: $(CCANDIR)/ccan/str/str.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-opt.o: $(CCANDIR)/ccan/opt/opt.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-opt-helpers.o: $(CCANDIR)/ccan/opt/helpers.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-opt-parse.o: $(CCANDIR)/ccan/opt/parse.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-opt-usage.o: $(CCANDIR)/ccan/opt/usage.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-err.o: $(CCANDIR)/ccan/err/err.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-noerr.o: $(CCANDIR)/ccan/noerr/noerr.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-str-hex.o: $(CCANDIR)/ccan/str/hex/hex.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-crc32c.o: $(CCANDIR)/ccan/crc32c/crc32c.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-crypto-hmac.o: $(CCANDIR)/ccan/crypto/hmac_sha256/hmac_sha256.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-crypto-hkdf.o: $(CCANDIR)/ccan/crypto/hkdf_sha256/hkdf_sha256.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-crypto-shachain.o: $(CCANDIR)/ccan/crypto/shachain/shachain.c
@$(call VERBOSE, "cc $< -DSHACHAIN_BITS=48", $(CC) $(CFLAGS) -DSHACHAIN_BITS=48 -c -o $@ $<)
@$(call VERBOSE, "cc $< -DSHACHAIN_BITS=48", $(COMPILE.c) -DSHACHAIN_BITS=48 -o $@ $<)
ccan-crypto-sha256.o: $(CCANDIR)/ccan/crypto/sha256/sha256.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-crypto-ripemd160.o: $(CCANDIR)/ccan/crypto/ripemd160/ripemd160.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-cdump.o: $(CCANDIR)/ccan/cdump/cdump.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-strmap.o: $(CCANDIR)/ccan/strmap/strmap.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-strset.o: $(CCANDIR)/ccan/strset/strset.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-crypto-siphash24.o: $(CCANDIR)/ccan/crypto/siphash24/siphash24.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-htable.o: $(CCANDIR)/ccan/htable/htable.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-ilog.o: $(CCANDIR)/ccan/ilog/ilog.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-intmap.o: $(CCANDIR)/ccan/intmap/intmap.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-isaac.o: $(CCANDIR)/ccan/isaac/isaac.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-isaac64.o: $(CCANDIR)/ccan/isaac/isaac64.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-time.o: $(CCANDIR)/ccan/time/time.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-timer.o: $(CCANDIR)/ccan/timer/timer.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-io-io.o: $(CCANDIR)/ccan/io/io.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-io-poll.o: $(CCANDIR)/ccan/io/poll.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-io-fdpass.o: $(CCANDIR)/ccan/io/fdpass/fdpass.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-pipecmd.o: $(CCANDIR)/ccan/pipecmd/pipecmd.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-mem.o: $(CCANDIR)/ccan/mem/mem.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-fdpass.o: $(CCANDIR)/ccan/fdpass/fdpass.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-bitops.o: $(CCANDIR)/ccan/bitops/bitops.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-rbuf.o: $(CCANDIR)/ccan/rbuf/rbuf.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-str-base32.o: $(CCANDIR)/ccan/str/base32/base32.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-utf8.o: $(CCANDIR)/ccan/utf8/utf8.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-bitmap.o: $(CCANDIR)/ccan/bitmap/bitmap.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-membuf.o: $(CCANDIR)/ccan/membuf/membuf.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-json_escape.o: $(CCANDIR)/ccan/json_escape/json_escape.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-json_out.o: $(CCANDIR)/ccan/json_out/json_out.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-closefrom.o: $(CCANDIR)/ccan/closefrom/closefrom.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-rune-rune.o: $(CCANDIR)/ccan/rune/rune.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)
ccan-rune-coding.o: $(CCANDIR)/ccan/rune/coding.c
@$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<)
@$(call VERBOSE, "cc $<", $(COMPILE.c) -o $@ $<)

canned-gossmap: devtools/gossmap-compress
DATE=`date +%Y-%m-%d` && devtools/gossmap-compress compress --output-node-map /tmp/gossip_store tests/data/gossip-store-$$DATE.compressed > tests/data/gossip-store-$$DATE-node-map && xz -9 tests/data/gossip-store-$$DATE-node-map && ls -l tests/data/gossip-store-$$DATE*
Expand Down
42 changes: 26 additions & 16 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,12 @@ check_command()
name="$1"
shift 1

echo -n "checking for $name... "
printf 'checking for %s... ' "${name}" >&2
if "$@" >/dev/null 2>&1 </dev/null; then
echo 'found'
echo 'found' >&2
return 0
fi
echo 'not found'
echo 'not found' >&2
return 1
}

Expand Down Expand Up @@ -170,10 +170,14 @@ set_defaults()
# which matters since you might explicitly set of these blank.
PREFIX=${PREFIX:-/usr/local}
CC=${CC:-cc}
# A more compact way of setting the default value of a variable.
# Similar to the above, ":=" means assign if empty or unset; "=" means assign only if unset.
# The quotes suppress the globbing that would otherwise occur after variable expansion.
: "${CPPFLAGS=-std=gnu11}"
# Detect macOS and use appropriate debug flags for libbacktrace compatibility
if [ "$(uname -s)" = "Darwin" ]; then
# Always override to avoid DWARF 5
CDEBUGFLAGS="-std=gnu11 -g -gdwarf-4 -fno-standalone-debug -fstack-protector-strong"
CDEBUGFLAGS="-g -gdwarf-4 -fno-standalone-debug -fstack-protector-strong"
# Set SDKROOT for macOS
SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"

Expand All @@ -182,7 +186,7 @@ set_defaults()
echo "Warning: dsymutil not found. Install Xcode Command Line Tools for better debug support."
fi
else
CDEBUGFLAGS=${CDEBUGFLAGS--std=gnu11 -g -fstack-protector-strong}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add $CFLAGS to all of these invocations, or keep -std=gnu11 centralized in one flags variable that all of them already reference??

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some build systems put the -std= option directly in CC (and CXX if applicable). I don't really like that, as some code assumes that CC and friends contain simple path names with no arguments. However, there isn't a great place to specify the -std= option. It needs to be passed to the preprocessor, as feature test macros are affected by the C/C++ standard in use, but naïvely adding the -std= option to CPPFLAGS is suboptimal because C++ code will need a different standard than C code. Some build systems work around this by introducing a CXXCPPFLAGS variable that is specific to the C++ preprocessor, but that's very non-standard. I usually make the compromise of locally overriding the value of CPPFLAGS just for C++ source files. This won't be an issue for CLN for the time being since it currently has no C++ source files.

CDEBUGFLAGS=${CDEBUGFLAGS--g -fstack-protector-strong}
fi
DEBUGBUILD=${DEBUGBUILD:-0}
COMPAT=${COMPAT:-1}
Expand Down Expand Up @@ -223,7 +227,7 @@ have_function_sections()
TMPCFILE=$CONFIG_VAR_FILE.$$.c
TMPOBJFILE=$CONFIG_VAR_FILE.$$.o

echo "int foo(void); int foo(void) { return 0; }" > $TMPCFILE
echo "int main(void); int main(void) { return 0; }" > $TMPCFILE
# We *want* this to fail if we get a warning, hence use -Werror.
$1 $2 -Werror -ffunction-sections -Wl,--gc-sections $TMPCFILE -o $TMPOBJFILE
}
Expand All @@ -236,8 +240,10 @@ usage()
set_defaults
DEFAULT_COPTFLAGS="$(default_coptflags $DEBUGBUILD)"
# We assume we have a modern gcc.
DEFAULT_CWARNFLAGS="$(default_cwarnflags ""$DEFAULT_COPTFLAGS"" 1 1 ""$DEBUGBUILD"")"
DEFAULT_CWARNFLAGS="$(default_cwarnflags "$DEFAULT_COPTFLAGS" 1 1 "$DEBUGBUILD")"
usage_with_default "CC" "$CC"
usage_with_default "CPPFLAGS" "$CPPFLAGS"
usage_with_default "CFLAGS" "$CFLAGS"
usage_with_default "CWARNFLAGS" "$DEFAULT_CWARNFLAGS"
usage_with_default "COPTFLAGS" "$DEFAULT_COPTFLAGS"
usage_with_default "CDEBUGFLAGS" "$CDEBUGFLAGS"
Expand Down Expand Up @@ -277,9 +283,9 @@ usage()
add_var()
{
if [ -n "$2" ]; then
echo "Setting $1... $2"
echo "Setting $1... $2" >&2
else
echo "$1 not found"
echo "$1 not found" >&2
fi
echo "$1=$2" >> $CONFIG_VAR_FILE.$$
[ -z "$3" ] || echo "#define $1 $2" >> "$3"
Expand Down Expand Up @@ -311,6 +317,8 @@ for opt in "$@"; do
;;
CC=*) CC="${opt#CC=}";;
CONFIGURATOR_CC=*) CONFIGURATOR_CC="${opt#CONFIGURATOR_CC=}";;
CPPFLAGS=*) CPPFLAGS="${opt#CPPFLAGS=}";;
CFLAGS=*) CFLAGS="${opt#CFLAGS=}";;
CWARNFLAGS=*) CWARNFLAGS="${opt#CWARNFLAGS=}";;
CDEBUGFLAGS=*) CDEBUGFLAGS="${opt#CDEBUGFLAGS=}";;
COPTFLAGS=*) COPTFLAGS="${opt#COPTFLAGS=}";;
Expand All @@ -334,10 +342,10 @@ for opt in "$@"; do
--disable-fuzzing) FUZZING=0;;
--enable-rust) RUST=1;;
--disable-rust) RUST=0;;
--help|-h) usage;;
--help|-h) usage >&2;;
*)
echo "Unknown option '$opt'" >&2
usage
usage >&2
;;
esac
done
Expand All @@ -347,7 +355,7 @@ set_defaults

if [ "$ASAN" = "1" ]; then
if [ "$VALGRIND" = "1" ]; then
echo "Address sanitizer (ASAN) and valgrind cannot be enabled at the same time"
echo "Address sanitizer (ASAN) and valgrind cannot be enabled at the same time" >&2
exit 1
fi

Expand Down Expand Up @@ -381,16 +389,16 @@ else
fi

# We assume warning flags don't affect congfigurator that much!
echo -n "Compiling $CONFIGURATOR..."
printf 'Compiling %s...' "${CONFIGURATOR}" >&2
$CC ${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS $LDFLAGS -o $CONFIGURATOR $CONFIGURATOR.c
echo "done"
echo "done" >&2

if [ "$CLANG_COVERAGE" = "1" ]; then
case "$CC" in
(*"clang"*)
;;
(*)
echo "Clang coverage requires building with CC=clang."
echo "Clang coverage requires building with CC=clang." >&2
exit 1
;;
esac
Expand All @@ -401,7 +409,7 @@ if [ "$FUZZING" = "1" ]; then
(*"clang"*)
;;
(*)
echo "Fuzzing is currently only supported with clang."
echo "Fuzzing is currently only supported with clang." >&2
exit 1
;;
esac
Expand Down Expand Up @@ -607,6 +615,8 @@ fi
add_var PREFIX "$PREFIX"
add_var CC "$CC"
add_var CONFIGURATOR_CC "$CONFIGURATOR_CC"
add_var CPPFLAGS "$CPPFLAGS"
add_var CFLAGS "$CFLAGS"
add_var CWARNFLAGS "$CWARNFLAGS"
add_var CDEBUGFLAGS "$CDEBUGFLAGS"
add_var COPTFLAGS "$COPTFLAGS"
Expand Down
2 changes: 1 addition & 1 deletion tools/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ ALL_PROGRAMS += $(TOOLS)
# We force make to relink this every time, to detect version changes.
# Do it atomically, otherwise parallel builds can get upset!
tools/headerversions: $(FORCE) tools/headerversions.o libccan.a
@trap "rm -f $@.tmp.$$$$" EXIT; $(LINK.o) tools/headerversions.o libccan.a $(LOADLIBES) $(LDLIBS) -o $@.tmp.$$$$ && mv -f $@.tmp.$$$$ $@
@trap "rm -f $@.tmp.$$$$" EXIT; $(LINK.c) tools/headerversions.o libccan.a $(LOADLIBES) $(LDLIBS) -o $@.tmp.$$$$ && mv -f $@.tmp.$$$$ $@

$(TOOLS): libcommon.a

Expand Down
Loading