Skip to content

Commit c3a08fe

Browse files
committed
Makefile: For gcanalyze, use Clang's CFLAGS not GCC's
It's supported to build the analysis plugin with GCC, but the flags we actually run it with need to match Clang.
1 parent 20752db commit c3a08fe

File tree

2 files changed

+60
-34
lines changed

2 files changed

+60
-34
lines changed

Make.inc

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -486,37 +486,61 @@ MACOSX_VERSION_MIN := 11.0
486486
endif
487487
endif
488488

489-
ifeq ($(USEGCC),1)
490-
CC := $(CROSS_COMPILE)gcc
491-
CXX := $(CROSS_COMPILE)g++
492-
JCFLAGS := -std=gnu11 -pipe $(fPIC) -fno-strict-aliasing -D_FILE_OFFSET_BITS=64
489+
JCFLAGS_COMMON := -std=gnu11 -pipe $(fPIC) -fno-strict-aliasing -D_FILE_OFFSET_BITS=64
490+
JCFLAGS_CLANG := $(JCFLAGS_COMMON)
491+
JCFLAGS_GCC := $(JCFLAGS_COMMON)
492+
493493
# AArch64 needs this flag to generate the .eh_frame used by libunwind
494-
JCPPFLAGS := -fasynchronous-unwind-tables
495-
JCXXFLAGS := -pipe $(fPIC) -fno-rtti -std=c++14
494+
JCPPFLAGS_COMMON := -fasynchronous-unwind-tables
495+
JCPPFLAGS_CLANG := $(JCPPFLAGS_COMMON)
496+
JCPPFLAGS_GCC := $(JCPPFLAGS_COMMON)
497+
498+
JCXXFLAGS_COMMON := -pipe $(fPIC) -fno-rtti -std=c++14
499+
JCXXFLAGS_CLANG := $(JCXXFLAGS_COMMON) -pedantic
500+
JCXXFLAGS_GCC := $(JCXXFLAGS_COMMON)
501+
502+
DEBUGFLAGS_COMMON := -O0 -DJL_DEBUG_BUILD -fstack-protector
503+
DEBUGFLAGS_CLANG := $(DEBUGFLAGS_COMMON) -g
504+
DEBUGFLAGS_GCC := $(DEBUGFLAGS_COMMON) -ggdb2
505+
506+
SHIPFLAGS_COMMON := -O3
507+
SHIPFLAGS_CLANG := $(SHIPFLAGS_COMMON) -g
508+
SHIPFLAGS_GCC := $(SHIPFLAGS_COMMON) -ggdb2 -falign-functions
509+
510+
ifeq ($(OS), Darwin)
511+
JCPPFLAGS_CLANG += -D_LARGEFILE_SOURCE -D_DARWIN_USE_64_BIT_INODE=1
512+
endif
513+
496514
ifneq ($(OS), WINNT)
497515
# Do not enable on windows to avoid warnings from libuv.
498-
JCXXFLAGS += -pedantic
516+
JCXXFLAGS_GCC += -pedantic
499517
endif
500-
DEBUGFLAGS := -O0 -ggdb2 -DJL_DEBUG_BUILD -fstack-protector
501-
SHIPFLAGS := -O3 -ggdb2 -falign-functions
518+
519+
ifeq ($(USEGCC),1)
520+
CC := $(CROSS_COMPILE)gcc
521+
CXX := $(CROSS_COMPILE)g++
522+
JCFLAGS := $(JCFLAGS_GCC)
523+
JCPPFLAGS := $(JCPPFLAGS_GCC)
524+
JCXXFLAGS := $(JCXXFLAGS_GCC)
525+
DEBUGFLAGS := $(DEBUGFLAGS_GCC)
526+
SHIPFLAGS := $(SHIPFLAGS_GCC)
502527
endif
503528

504529
ifeq ($(USECLANG),1)
505-
CC := $(CROSS_COMPILE)clang
506-
CXX := $(CROSS_COMPILE)clang++
507-
JCFLAGS := -std=gnu11 -pipe $(fPIC) -fno-strict-aliasing -D_FILE_OFFSET_BITS=64
508-
# AArch64 needs this flag to generate the .eh_frame used by libunwind
509-
JCPPFLAGS := -fasynchronous-unwind-tables
510-
JCXXFLAGS := -pipe $(fPIC) -fno-rtti -pedantic -std=c++14
511-
DEBUGFLAGS := -O0 -g -DJL_DEBUG_BUILD -fstack-protector
512-
SHIPFLAGS := -O3 -g
530+
CC := $(CROSS_COMPILE)clang
531+
CXX := $(CROSS_COMPILE)clang++
532+
JCFLAGS := $(JCFLAGS_CLANG)
533+
JCPPFLAGS := $(JCPPFLAGS_CLANG)
534+
JCXXFLAGS := $(JCXXFLAGS_CLANG)
535+
DEBUGFLAGS := $(DEBUGFLAGS_CLANG)
536+
SHIPFLAGS := $(SHIPFLAGS_CLANG)
537+
513538
ifeq ($(OS), Darwin)
514539
CC += -mmacosx-version-min=$(MACOSX_VERSION_MIN)
515540
CXX += -mmacosx-version-min=$(MACOSX_VERSION_MIN)
516541
FC += -mmacosx-version-min=$(MACOSX_VERSION_MIN)
517542
# export MACOSX_DEPLOYMENT_TARGET so that ld picks it up, especially for deps
518543
export MACOSX_DEPLOYMENT_TARGET=$(MACOSX_VERSION_MIN)
519-
JCPPFLAGS += -D_LARGEFILE_SOURCE -D_DARWIN_USE_64_BIT_INODE=1
520544
endif
521545
endif
522546

src/Makefile

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -170,16 +170,18 @@ DOBJS := $(SRCS:%=$(BUILDDIR)/%.dbg.obj)
170170
CODEGEN_OBJS := $(CODEGEN_SRCS:%=$(BUILDDIR)/%.o)
171171
CODEGEN_DOBJS := $(CODEGEN_SRCS:%=$(BUILDDIR)/%.dbg.obj)
172172

173-
SHIPFLAGS += $(FLAGS)
174-
DEBUGFLAGS += $(FLAGS)
175-
176-
# if not absolute, then relative to the directory of the julia executable
177-
SHIPFLAGS += "-DJL_SYSTEM_IMAGE_PATH=\"$(build_private_libdir_rel)/sys.$(SHLIB_EXT)\""
178-
DEBUGFLAGS += "-DJL_SYSTEM_IMAGE_PATH=\"$(build_private_libdir_rel)/sys-debug.$(SHLIB_EXT)\""
179-
180173
# Add SONAME defines so we can embed proper `dlopen()` calls.
181-
SHIPFLAGS += "-DJL_LIBJULIA_SONAME=\"$(LIBJULIA_PATH_REL).$(JL_MAJOR_SHLIB_EXT)\""
182-
DEBUGFLAGS += "-DJL_LIBJULIA_SONAME=\"$(LIBJULIA_PATH_REL)-debug.$(JL_MAJOR_SHLIB_EXT)\""
174+
ADDL_SHIPFLAGS := "-DJL_SYSTEM_IMAGE_PATH=\"$(build_private_libdir_rel)/sys.$(SHLIB_EXT)\"" \
175+
"-DJL_LIBJULIA_SONAME=\"$(LIBJULIA_PATH_REL).$(JL_MAJOR_SHLIB_EXT)\""
176+
ADDL_DEBUGFLAGS := "-DJL_SYSTEM_IMAGE_PATH=\"$(build_private_libdir_rel)/sys-debug.$(SHLIB_EXT)\"" \
177+
"-DJL_LIBJULIA_SONAME=\"$(LIBJULIA_PATH_REL)-debug.$(JL_MAJOR_SHLIB_EXT)\""
178+
179+
SHIPFLAGS += $(FLAGS) $(ADDL_SHIPFLAGS)
180+
DEBUGFLAGS += $(FLAGS) $(ADDL_DEBUGFLAGS)
181+
SHIPFLAGS_GCC += $(FLAGS) $(ADDL_SHIPFLAGS)
182+
DEBUGFLAGS_GCC += $(FLAGS) $(ADDL_DEBUGFLAGS)
183+
SHIPFLAGS_CLANG += $(FLAGS) $(ADDL_SHIPFLAGS)
184+
DEBUGFLAGS_CLANG += $(FLAGS) $(ADDL_DEBUGFLAGS)
183185

184186
ifeq ($(USE_CROSS_FLISP), 1)
185187
FLISPDIR := $(BUILDDIR)/flisp/host
@@ -481,36 +483,36 @@ clang-sagc-%: $(SRCDIR)/%.c $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) .F
481483
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang -D__clang_gcanalyzer__ --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text --analyzer-no-default-checks \
482484
-Xclang -load -Xclang $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) -Xclang -analyzer-checker=core$(COMMA)julia.GCChecker \
483485
$(SA_EXCEPTIONS-$(notdir $<)) \
484-
$(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(JL_CFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -x c $<)
486+
$(CLANGSA_FLAGS) $(JCPPFLAGS_CLANG) $(JCFLAGS_CLANG) $(JL_CFLAGS) $(DEBUGFLAGS_CLANG) -fcolor-diagnostics -x c $<)
485487
clang-sagc-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
486488
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang -D__clang_gcanalyzer__ --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text --analyzer-no-default-checks \
487489
-Xclang -load -Xclang $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) -Xclang -analyzer-checker=core$(COMMA)julia.GCChecker \
488490
$(SA_EXCEPTIONS-$(notdir $<)) \
489-
$(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(JL_CXXFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -x c++ $<)
491+
$(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS_CLANG) $(JCXXFLAGS_CLANG) $(JL_CXXFLAGS) $(DEBUGFLAGS_CLANG) -fcolor-diagnostics -x c++ $<)
490492

491493
clang-sa-%: JL_CXXFLAGS += -UNDEBUG
492494
clang-sa-%: $(SRCDIR)/%.c .FORCE | analyzegc-deps-check
493495
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text \
494496
-Xanalyzer -analyzer-disable-checker=deadcode.DeadStores \
495497
$(SA_EXCEPTIONS-$(notdir $<)) \
496-
$(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(JL_CFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -Werror -x c $<)
498+
$(CLANGSA_FLAGS) $(JCPPFLAGS_CLANG) $(JCFLAGS_CLANG) $(JL_CFLAGS) $(DEBUGFLAGS_CLANG) -fcolor-diagnostics -Werror -x c $<)
497499
clang-sa-%: $(SRCDIR)/%.cpp .FORCE | analyzegc-deps-check
498500
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text \
499501
-Xanalyzer -analyzer-disable-checker=deadcode.DeadStores \
500502
$(SA_EXCEPTIONS-$(notdir $<)) \
501-
$(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(JL_CXXFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -Werror -x c++ $<)
503+
$(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS_CLANG) $(JCXXFLAGS_CLANG) $(JL_CXXFLAGS) $(DEBUGFLAGS_CLANG) -fcolor-diagnostics -Werror -x c++ $<)
502504

503505
clang-tidy-%: $(SRCDIR)/%.c $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
504506
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang-tidy $< -header-filter='.*' --quiet \
505507
-load $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) --checks='-clang-analyzer-*$(COMMA)-clang-diagnostic-*$(COMMA)concurrency-implicit-atomics' --warnings-as-errors='*' \
506-
-- $(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(JL_CFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -fno-caret-diagnostics -x c)
508+
-- $(CLANGSA_FLAGS) $(JCPPFLAGS_CLANG) $(JCFLAGS_CLANG) $(JL_CFLAGS) $(DEBUGFLAGS_CLANG) -fcolor-diagnostics -fno-caret-diagnostics -x c)
507509
clang-tidy-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
508510
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang-tidy $< -header-filter='.*' --quiet \
509511
-load $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) --checks='-clang-analyzer-*$(COMMA)-clang-diagnostic-*$(COMMA)concurrency-implicit-atomics' --warnings-as-errors='*' \
510-
-- $(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(JL_CXXFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics --system-header-prefix=llvm -Wno-deprecated-declarations -fno-caret-diagnostics -x c++)
512+
-- $(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS_CLANG) $(JCXXFLAGS_CLANG) $(JL_CXXFLAGS) $(DEBUGFLAGS_CLANG) -fcolor-diagnostics --system-header-prefix=llvm -Wno-deprecated-declarations -fno-caret-diagnostics -x c++)
511513

512514
# set the exports for the source files based on where they are getting linked
513-
clang-sa-% clang-sagc-% clang-tidy-%: DEBUGFLAGS += -DJL_LIBRARY_EXPORTS
515+
clang-sa-% clang-sagc-% clang-tidy-%: DEBUGFLAGS_CLANG += -DJL_LIBRARY_EXPORTS
514516

515517
# Add C files as a target of `analyzesrc` and `analyzegc` and `tidysrc`
516518
tidysrc: $(addprefix clang-tidy-,$(filter-out $(basename $(SKIP_IMPLICIT_ATOMICS)),$(CODEGEN_SRCS) $(SRCS)))

0 commit comments

Comments
 (0)