@@ -39,24 +39,20 @@ ifeq ($(OS),FreeBSD)
39
39
FLAGS += -I$(LOCALBASE ) /include
40
40
endif
41
41
42
- RUNTIME_C_SRCS := \
42
+ RUNTIME_SRCS := \
43
43
jltypes gf typemap ast builtins module interpreter symbol \
44
44
dlload sys init task array dump staticdata toplevel jl_uv datatype \
45
45
simplevector runtime_intrinsics precompile \
46
46
threading partr stackwalk gc gc-debug gc-pages gc-stacks method \
47
47
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
55
50
56
51
LLVMLINK :=
57
52
58
53
ifeq ($(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 \
60
56
llvm-final-gc-lowering llvm-pass-helpers llvm-late-gc-lowering \
61
57
llvm-lower-handlers llvm-gc-invariant-verifier llvm-propagate-addrspaces \
62
58
llvm-multiversioning llvm-alloc-opt cgmemmgr llvm-api
@@ -77,10 +73,17 @@ FLAGS += -I$(shell $(LLVM_CONFIG_HOST) --src-root)/tools/polly/tools # Required
77
73
endif
78
74
endif
79
75
else
80
- SRCS += anticodegen
76
+ RUNTIME_SRCS += anticodegen
81
77
LLVM_LIBS := support
82
78
endif
83
79
80
+ ifeq ($(USEMSVC ) , 1)
81
+ SRCS += getopt
82
+ endif
83
+
84
+ SRCS += $(RUNTIME_SRCS )
85
+
86
+
84
87
# headers are used for dependency tracking, while public headers will be part of the dist
85
88
UV_HEADERS :=
86
89
HEADERS := $(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
91
94
endif
92
95
PUBLIC_HEADER_TARGETS := $(addprefix $(build_includedir ) /julia/,$(notdir $(PUBLIC_HEADERS ) ) $(UV_HEADERS ) )
93
96
97
+ LLVM_LDFLAGS := $(shell $(LLVM_CONFIG_HOST ) --ldflags)
98
+ LLVM_CXXFLAGS := $(shell $(LLVM_CONFIG_HOST ) --cxxflags)
99
+
94
100
ifeq ($(JULIACODEGEN ) ,LLVM)
95
101
ifneq ($(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)
97
103
# HACK: llvm-config doesn't correctly point to shared libs on all platforms
98
104
# https://github.com/JuliaLang/julia/issues/29981
99
105
else
100
106
ifneq ($(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)
102
108
else
103
- LLVMLINK += $(shell $( LLVM_CONFIG_HOST ) --ldflags ) -lLLVM
109
+ LLVMLINK += $(LLVM_LDFLAGS ) -lLLVM
104
110
endif
105
111
endif
106
112
ifeq ($(USE_LLVM_SHLIB ) ,1)
107
113
FLAGS += -DLLVM_SHLIB
108
114
endif # USE_LLVM_SHLIB == 1
109
115
endif
110
116
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
+
114
122
115
123
COMMON_LIBS := -L$(build_shlibdir ) -L$(build_libdir ) $(LIBUV ) $(LIBUTF8PROC ) $(NO_WHOLE_ARCHIVE ) $(LLVMLINK ) $(OSLIBS ) $(LIBUNWIND )
116
124
DEBUG_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)
154
162
$(BUILDDIR ) /% .dbg.obj : $(SRCDIR ) /% .c $(HEADERS ) | $(BUILDDIR )
155
163
@$(call PRINT_CC, $(CC ) $(JCPPFLAGS ) $(JCFLAGS ) $(DEBUGFLAGS ) -c $< -o $@ )
156
164
$(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 $@ )
158
166
$(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 $@ )
160
168
161
169
# public header rules
162
170
$(eval $(call dir_target,$(build_includedir)/julia))
@@ -196,7 +204,7 @@ endif
196
204
$(INSTALL_NAME_CMD)libccalltest.$(SHLIB_EXT) $@
197
205
198
206
$(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 ) )
200
208
201
209
julia_flisp.boot.inc.phony : $(BUILDDIR ) /julia_flisp.boot.inc
202
210
@@ -348,7 +356,8 @@ clean-support:
348
356
cleanall : clean clean-flisp clean-support clean-analyzegc
349
357
350
358
$(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 ) $< )
352
361
353
362
# Throw an error if a proper version of `clang` is not available.
354
363
# Note that for a default install, you will need to have run the following
@@ -363,15 +372,28 @@ endif
363
372
endif
364
373
365
374
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-*
366
380
CLANGSA_FLAGS :=
367
381
ifeq ($(OS ) , Darwin) # on new XCode, the files are hidden
368
382
CLANGSA_FLAGS += -isysroot $(shell xcode-select -p) /Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
369
383
endif
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++ $< )
372
394
373
395
# Add C files as a target of `analyzegc`
374
- analyzegc : $(addprefix clang-sa-,$(RUNTIME_C_SRCS ) )
396
+ analyzegc : $(addprefix clang-sa-,$(RUNTIME_SRCS ) )
375
397
376
398
clean-analyzegc :
377
399
rm -f $(build_shlibdir ) /libGCCheckerPlugin.$(SHLIB_EXT )
0 commit comments