@@ -39,24 +39,20 @@ ifeq ($(OS),FreeBSD)
3939FLAGS += -I$(LOCALBASE ) /include
4040endif
4141
42- RUNTIME_C_SRCS := \
42+ RUNTIME_SRCS := \
4343 jltypes gf typemap ast builtins module interpreter symbol \
4444 dlload sys init task array dump staticdata toplevel jl_uv datatype \
4545 simplevector runtime_intrinsics precompile \
4646 threading partr stackwalk gc gc-debug gc-pages gc-stacks method \
4747 jlapi signal-handling safepoint timing subtype \
48- crc32c
49- RUNTIME_SRCS := APInt-C runtime_ccall processor rtutils jloptions $(RUNTIME_C_SRCS )
50- SRCS := $(RUNTIME_SRCS )
51-
52- ifeq ($(USEMSVC ) , 1)
53- SRCS += getopt
54- endif
48+ crc32c APInt-C processor
49+ SRCS := jloptions runtime_ccall rtutils
5550
5651LLVMLINK :=
5752
5853ifeq ($(JULIACODEGEN ) ,LLVM)
59- SRCS += codegen jitlayers disasm debuginfo llvm-simdloop llvm-ptls llvm-muladd \
54+ SRCS += codegen llvm-ptls
55+ RUNTIME_SRCS += jitlayers debuginfo disasm llvm-simdloop llvm-muladd \
6056 llvm-final-gc-lowering llvm-pass-helpers llvm-late-gc-lowering \
6157 llvm-lower-handlers llvm-gc-invariant-verifier llvm-propagate-addrspaces \
6258 llvm-multiversioning llvm-alloc-opt cgmemmgr llvm-api
@@ -77,10 +73,17 @@ FLAGS += -I$(shell $(LLVM_CONFIG_HOST) --src-root)/tools/polly/tools # Required
7773endif
7874endif
7975else
80- SRCS += anticodegen
76+ RUNTIME_SRCS += anticodegen
8177LLVM_LIBS := support
8278endif
8379
80+ ifeq ($(USEMSVC ) , 1)
81+ SRCS += getopt
82+ endif
83+
84+ SRCS += $(RUNTIME_SRCS )
85+
86+
8487# headers are used for dependency tracking, while public headers will be part of the dist
8588UV_HEADERS :=
8689HEADERS := $(BUILDDIR ) /julia_version.h $(wildcard $(SRCDIR ) /support/* .h) $(addprefix $(SRCDIR ) /,julia.h julia_assert.h julia_threads.h tls.h locks.h atomics.h julia_internal.h options.h timing.h)
@@ -91,26 +94,31 @@ UV_HEADERS += uv/*.h
9194endif
9295PUBLIC_HEADER_TARGETS := $(addprefix $(build_includedir ) /julia/,$(notdir $(PUBLIC_HEADERS ) ) $(UV_HEADERS ) )
9396
97+ LLVM_LDFLAGS := $(shell $(LLVM_CONFIG_HOST ) --ldflags)
98+ LLVM_CXXFLAGS := $(shell $(LLVM_CONFIG_HOST ) --cxxflags)
99+
94100ifeq ($(JULIACODEGEN ) ,LLVM)
95101ifneq ($(USE_SYSTEM_LLVM ) ,0)
96- LLVMLINK += $(shell $(LLVM_CONFIG_HOST ) --ldflags --libs --system-libs)
102+ LLVMLINK += $(LLVM_LDFLAGS ) $( shell $(LLVM_CONFIG_HOST ) --libs --system-libs)
97103# HACK: llvm-config doesn't correctly point to shared libs on all platforms
98104# https://github.com/JuliaLang/julia/issues/29981
99105else
100106ifneq ($(USE_LLVM_SHLIB ) ,1)
101- LLVMLINK += $(shell $( LLVM_CONFIG_HOST ) --ldflags) $(shell $(LLVM_CONFIG_HOST ) --libs $(LLVM_LIBS ) ) $(shell $( LLVM_CONFIG_HOST ) --ldflags ) $(shell $(LLVM_CONFIG_HOST ) --system-libs 2> /dev/null)
107+ LLVMLINK += $(LLVM_LDFLAGS ) $(shell $(LLVM_CONFIG_HOST ) --libs $(LLVM_LIBS ) ) $($( LLVM_LDFLAGS ) $(shell $(LLVM_CONFIG_HOST ) --system-libs 2> /dev/null)
102108else
103- LLVMLINK += $(shell $( LLVM_CONFIG_HOST ) --ldflags ) -lLLVM
109+ LLVMLINK += $(LLVM_LDFLAGS ) -lLLVM
104110endif
105111endif
106112ifeq ($(USE_LLVM_SHLIB ) ,1)
107113FLAGS += -DLLVM_SHLIB
108114endif # USE_LLVM_SHLIB == 1
109115endif
110116
111- CLANGLINK :=
112- CLANGLINK += -lclangAnalysis -lclangStaticAnalyzerCore -lclangASTMatchers -lclangAST -lclangLex -lclangBasic
113- CLANGLINK += $(LLVMLINK )
117+ CLANG_LDFLAGS := $(LLVM_LDFLAGS )
118+ ifeq ($(OS ) , Darwin)
119+ CLANG_LDFLAGS += -Wl,-undefined,dynamic_lookup
120+ endif
121+
114122
115123COMMON_LIBS := -L$(build_shlibdir ) -L$(build_libdir ) $(LIBUV ) $(LIBUTF8PROC ) $(NO_WHOLE_ARCHIVE ) $(LLVMLINK ) $(OSLIBS ) $(LIBUNWIND )
116124DEBUG_LIBS := $(WHOLE_ARCHIVE ) $(BUILDDIR ) /flisp/libflisp-debug.a $(WHOLE_ARCHIVE ) $(BUILDDIR ) /support/libsupport-debug.a $(COMMON_LIBS )
@@ -154,9 +162,9 @@ $(BUILDDIR)/%.o: $(SRCDIR)/%.c $(HEADERS) | $(BUILDDIR)
154162$(BUILDDIR ) /% .dbg.obj : $(SRCDIR ) /% .c $(HEADERS ) | $(BUILDDIR )
155163 @$(call PRINT_CC, $(CC ) $(JCPPFLAGS ) $(JCFLAGS ) $(DEBUGFLAGS ) -c $< -o $@ )
156164$(BUILDDIR ) /% .o : $(SRCDIR ) /% .cpp $(SRCDIR ) /llvm-version.h $(HEADERS ) $(LLVM_CONFIG_ABSOLUTE ) | $(BUILDDIR )
157- @$(call PRINT_CC, $(CXX ) $(shell $( LLVM_CONFIG_HOST ) --cxxflags ) $(JCPPFLAGS ) $(JCXXFLAGS ) $(SHIPFLAGS ) $(CXX_DISABLE_ASSERTION ) -c $< -o $@ )
165+ @$(call PRINT_CC, $(CXX ) $(LLVM_CXXFLAGS ) $(JCPPFLAGS ) $(JCXXFLAGS ) $(SHIPFLAGS ) $(CXX_DISABLE_ASSERTION ) -c $< -o $@ )
158166$(BUILDDIR ) /% .dbg.obj : $(SRCDIR ) /% .cpp $(SRCDIR ) /llvm-version.h $(HEADERS ) $(LLVM_CONFIG_ABSOLUTE ) | $(BUILDDIR )
159- @$(call PRINT_CC, $(CXX ) $(shell $( LLVM_CONFIG_HOST ) --cxxflags ) $(JCPPFLAGS ) $(JCXXFLAGS ) $(DEBUGFLAGS ) -c $< -o $@ )
167+ @$(call PRINT_CC, $(CXX ) $(LLVM_CXXFLAGS ) $(JCPPFLAGS ) $(JCXXFLAGS ) $(DEBUGFLAGS ) -c $< -o $@ )
160168
161169# public header rules
162170$(eval $(call dir_target,$(build_includedir)/julia))
@@ -196,7 +204,7 @@ endif
196204 $(INSTALL_NAME_CMD)libccalltest.$(SHLIB_EXT) $@
197205
198206$(build_shlibdir ) /libllvmcalltest.$(SHLIB_EXT ) : $(SRCDIR ) /llvmcalltest.cpp $(LLVM_CONFIG_ABSOLUTE )
199- @$(call PRINT_CC, $(CXX ) $(shell $( LLVM_CONFIG_HOST ) --cxxflags ) $(JCXXFLAGS ) $(JCPPFLAGS ) $(DEBUGFLAGS ) -O3 $< $(fPIC ) -shared -o $@ $(JLDFLAGS ) -L$(build_shlibdir ) -L$(build_libdir ) $(NO_WHOLE_ARCHIVE ) $(LLVMLINK ) )
207+ @$(call PRINT_CC, $(CXX ) $(LLVM_CXXFLAGS ) $(JCXXFLAGS ) $(JCPPFLAGS ) $(DEBUGFLAGS ) -O3 $< $(fPIC ) -shared -o $@ $(JLDFLAGS ) -L$(build_shlibdir ) -L$(build_libdir ) $(NO_WHOLE_ARCHIVE ) $(LLVMLINK ) )
200208
201209julia_flisp.boot.inc.phony : $(BUILDDIR ) /julia_flisp.boot.inc
202210
@@ -348,7 +356,8 @@ clean-support:
348356cleanall : clean clean-flisp clean-support clean-analyzegc
349357
350358$(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT ) : $(SRCDIR ) /clangsa/GCChecker.cpp $(LLVM_CONFIG_ABSOLUTE )
351- @$(call PRINT_CC, $(CXX ) -g $(fPIC ) -shared -o $@ -DCLANG_PLUGIN -I$(build_includedir ) $(shell $(LLVM_CONFIG_HOST ) --cxxflags) $(CPPFLAGS ) $(CXXFLAGS ) $(LDFLAGS ) $(CXXLDFLAGS ) -L$(build_libdir ) $< $(CLANGLINK ) )
359+ @$(call PRINT_CC, $(CXX ) -g $(fPIC ) -shared -o $@ -DCLANG_PLUGIN -I$(build_includedir ) -L$(build_libdir ) \
360+ $(LLVM_CXXFLAGS ) $(CLANG_LDFLAGS ) $(CPPFLAGS ) $(CXXFLAGS ) $(LDFLAGS ) $(CXXLDFLAGS ) $< )
352361
353362# Throw an error if a proper version of `clang` is not available.
354363# Note that for a default install, you will need to have run the following
@@ -363,15 +372,28 @@ endif
363372endif
364373
365374
375+ # Note: we're passing *FLAGS here computed based on your system compiler to
376+ # clang. If that causes you problems, you might want to build and/or run
377+ # specific clang-sa-* files with clang explicitly selected:
378+ # make CC=~+/../usr/tools/clang CXX=~+/../usr/tools/clang USECLANG=1 analyzegc
379+ # make USECLANG=1 clang-sa-*
366380CLANGSA_FLAGS :=
367381ifeq ($(OS ) , Darwin) # on new XCode, the files are hidden
368382CLANGSA_FLAGS += -isysroot $(shell xcode-select -p) /Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
369383endif
370- clang-sa-% : $(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT ) | analyzegc-deps-check
371- @$(call PRINT_ANALYZE, $(build_depsbindir ) /clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text -Xclang -load -Xclang $(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT ) $(CLANGSA_FLAGS ) $(CPPFLAGS ) $(CFLAGS ) $(DEBUGFLAGS ) -Xclang -analyzer-checker=core$(COMMA ) julia.GCChecker --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c $(SRCDIR ) /$* .c)
384+ ifeq ($(USEGCC ) ,1)
385+ # try to help clang find the c++ files for CC by guessing the value for --prefix
386+ # by dropping lib/gcc/<platform>/<version> from the install directory it reports
387+ CLANGSA_FLAGS += --gcc-toolchain="$(abspath $(shell LANG=C $(CC ) -print-search-dirs | grep '^install: ' | sed -e "s/^install: //") /../../../..) "
388+ endif
389+
390+ clang-sa-% : $(SRCDIR ) /% .c $(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT ) | analyzegc-deps-check
391+ @$(call PRINT_ANALYZE, $(build_depsbindir ) /clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text -Xclang -load -Xclang $(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT ) $(CLANGSA_FLAGS ) $(JCPPFLAGS ) $(JCFLAGS ) $(DEBUGFLAGS ) -Xclang -analyzer-checker=core$(COMMA ) julia.GCChecker --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c $< )
392+ clang-sa-% : $(SRCDIR ) /% .cpp $(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT ) | analyzegc-deps-check
393+ @$(call PRINT_ANALYZE, $(build_depsbindir ) /clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text -Xclang -load -Xclang $(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT ) $(CLANGSA_FLAGS ) $(LLVM_CXXFLAGS ) $(JCPPFLAGS ) $(JCXXFLAGS ) $(DEBUGFLAGS ) -Xclang -analyzer-checker=core$(COMMA ) julia.GCChecker --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c++ $< )
372394
373395# Add C files as a target of `analyzegc`
374- analyzegc : $(addprefix clang-sa-,$(RUNTIME_C_SRCS ) )
396+ analyzegc : $(addprefix clang-sa-,$(RUNTIME_SRCS ) )
375397
376398clean-analyzegc :
377399 rm -f $(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT )
0 commit comments