diff options
-rw-r--r-- | configure.ac | 10 | ||||
-rw-r--r-- | llvm/.gitignore | 1 | ||||
-rw-r--r-- | llvm/Makefile.am | 25 | ||||
-rwxr-xr-x | llvm/build_llvm_config.sh | 47 | ||||
-rwxr-xr-x | mono/mini/Makefile.am.in | 83 |
5 files changed, 102 insertions, 64 deletions
diff --git a/configure.ac b/configure.ac index 3cf5501d985..54491f2d45e 100644 --- a/configure.ac +++ b/configure.ac @@ -3741,7 +3741,7 @@ if test "x$enable_llvm" = "xyes"; then if test "x$with_llvm" != "x"; then LLVM_CONFIG=$with_llvm/bin/llvm-config if test ! -x $LLVM_CONFIG; then - internal_llvm=yes + AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.]) fi else AC_PATH_PROG(LLVM_CONFIG, llvm-config, no) @@ -3778,8 +3778,16 @@ if test "x$enable_llvm" = "xyes"; then AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end]) fi # ENABLE_LLVM +# AC_DEFINE necessary for correct restore behavior on Linux AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno"]) +if test "x$internal_llvm" != "xno"; then + AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build]) +fi + AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno"]) +if test "x$internal_llvm_asserts" != "xno"; then + AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions]) +fi AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes]) diff --git a/llvm/.gitignore b/llvm/.gitignore index b336cc7cec9..32c9cdda7eb 100644 --- a/llvm/.gitignore +++ b/llvm/.gitignore @@ -1,2 +1,3 @@ /Makefile /Makefile.in +/llvm_config.mk diff --git a/llvm/Makefile.am b/llvm/Makefile.am index 0f287070d68..52fcfd8e09d 100644 --- a/llvm/Makefile.am +++ b/llvm/Makefile.am @@ -1,12 +1,33 @@ EXTRA_DIST=SUBMODULES.json build.mk +if ENABLE_LLVM if INTERNAL_LLVM -all-local: configure-llvm build-llvm install-llvm +all-local: configure-llvm build-llvm install-llvm llvm_config.mk -clean-local: clean-llvm +clean-local: clean-llvm clean-llvm-config +llvm_config.mk: install-llvm + ./build_llvm_config.sh $(abspath $(CURDIR))/usr/bin/llvm-config $(LLVM_CODEGEN_LIBS) > llvm_config.mk + +else +all-local: llvm_config.mk + +clean-local: clean-llvm-config + +llvm_config.mk: + ./build_llvm_config.sh `which llvm-config` $(LLVM_CODEGEN_LIBS) > llvm_config.mk endif +else +all-local: + +clean-local: +endif + +clean-llvm-config: + - rm -rf llvm_config.mk + +.PHONY: clean-llvm-config llvm_config.mk include build.mk diff --git a/llvm/build_llvm_config.sh b/llvm/build_llvm_config.sh new file mode 100755 index 00000000000..d6d06f269bd --- /dev/null +++ b/llvm/build_llvm_config.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +llvm_config=$1 +extra_libs="${@:2}" + +llvm_api_version=`$llvm_config --mono-api-version` || "0" +with_llvm=`$llvm_config --prefix` + +llvm_config_cflags=`$llvm_config --cflags` + +if [[ $llvm_config_cflags = *"stdlib=libc++"* ]]; then +llvm_libc_c="-stdlib=libc++" +llvm_libc_link="-lc++" +else +llvm_libc_c="" +llvm_libc_link="-lstdc++" +fi + +# llvm-config --clfags adds warning and optimization flags we don't want +shared_llvm_cflags="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DLLVM_API_VERSION=$llvm_api_version $llvm_libc_c" +cxxflag_additions="-std=c++11 -fno-rtti -fexceptions" + +ldflags="-L$with_llvm/lib" + +llvm_system=`$llvm_config --system-libs` + + + +llvm_core_components=`$llvm_config --libs analysis core bitwriter` +llvm_old_jit=`$llvm_config --libs mcjit jit 2>>/dev/null` +llvm_new_jit=`$llvm_config --libs orcjit 2>>/dev/null` +llvm_extra=`$llvm_config --libs $extra_libs` +llvm_lib_components="$llvm_core_components $llvm_old_jit $llvm_new_jit $llvm_extra" + +echo "LLVM_CFLAGS_INTERNAL=$shared_llvm_cflags" +echo "LLVM_CXXFLAGS_INTERNAL=$shared_llvm_cflags $cxxflag_additions" +echo "LLVM_LDFLAGS_INTERNAL=$ldflags" +echo "LLVM_LIBS_INTERNAL=$llvm_lib_components $ldflags $llvm_system $llvm_libc_link" + + + + + + + + + diff --git a/mono/mini/Makefile.am.in b/mono/mini/Makefile.am.in index 448d26d8f3b..ad72df34615 100755 --- a/mono/mini/Makefile.am.in +++ b/mono/mini/Makefile.am.in @@ -35,60 +35,19 @@ sgen_libs = \ $(glib_libs) if ENABLE_LLVM -# We need to define -# LLVM_CFLAGS -# LLVM_CXXFLAGS -# LLVM_LDFLAGS -# llvm_libs - -if INTERNAL_LLVM -llvm_config:=$(monodir)/llvm/usr/bin/llvm-config -else -llvm_config:=$(LLVM_CONFIG) -endif - -llvm_api_version:=$(or $(shell $(llvm_config) --mono-api-version 2>/dev/null),0) - -LLVM_CFLAGS:= \ - $(LLVM_CFLAGS_EXTERNAL) \ - $(shell $(llvm_config) --cflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g') \ - -DLLVM_API_VERSION=$(llvm_api_version) - -LLVM_CXXFLAGS:= \ - $(LLVM_CXXFLAGS_EXTERNAL) \ - $(shell $(llvm_config) --cxxflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g') \ - -fno-rtti \ - -fexceptions \ - -DLLVM_API_VERSION=$(llvm_api_version) - -LLVM_LDFLAGS:= \ - $(LLVM_LDFLAGS_EXTERNAL) \ - $(shell $(llvm_config) --ldflags) \ - $(shell $(llvm_config) --libs analysis core bitwriter) \ - $(shell $(llvm_config) --libs mcjit jit) \ - $(shell $(llvm_config) --libs orcjit) \ - $(shell $(llvm_config) --libs $(LLVM_CODEGEN_LIBS)) \ - $(shell $(llvm_config) --system-libs 2>/dev/null | grep -- -) \ - $(if $(findstring -stdlib=libc++,$(LLVM_CXXFLAGS)),-lc++,-lstdc++) - -llvm_libs= \ - $(LLVM_LIBS_EXTERNAL) - -else - -LLVM_CFLAGS= -LLVM_CXXFLAGS= -LLVM_LDFLAGS= -llvm_libs= - -endif +-include $(top_srcdir)/llvm/llvm_config.mk +LLVM_CFLAGS=$(LLVM_CFLAGS_INTERNAL) $(LLVM_CFLAGS_EXTERNAL) +LLVM_CXXFLAGS=$(LLVM_CXXFLAGS_INTERNAL) $(LLVM_CXXFLAGS_EXTERNAL) +LLVM_LDFLAGS=$(LLVM_LDFLAGS_INTERNAL) $(LLVM_LDFLAGS_EXTERNAL) +LLVM_LIBS=$(LLVM_LIBS_INTERNAL) $(LLVM_LIBS_EXTERNAL) print-llvm-info: - echo "version: $(llvm_api_version)" echo "cflags: $(LLVM_CFLAGS)" echo "cxxflags: $(LLVM_CXXFLAGS)" echo "ldflags: $(LLVM_LDFLAGS)" - echo "libs: $(llvm_libs)" + echo "libs: $(LLVM_LIBS)" +endif + if FULL_AOT_TESTS # if the tests are going to run with framework assemblies compiled with @@ -213,12 +172,10 @@ noinst_LTLIBRARIES = $(mini_common_lib) if LOADED_LLVM lib_LTLIBRARIES += libmono-llvm.la libmono_llvm_la_SOURCES = mini-llvm.c mini-llvm-cpp.cpp llvm-jit.cpp -libmono_llvm_la_LIBADD = $(glib_libs) $(llvm_libs) +libmono_llvm_la_LIBADD = $(glib_libs) $(LLVM_LIBS) $(LLVM_LDFLAGS) if HOST_DARWIN -libmono_llvm_la_LDFLAGS=-Wl,-undefined -Wl,suppress -Wl,-flat_namespace $(LLVM_LDFLAGS) -else -libmono_llvm_la_LDFLAGS=$(LLVM_LDFLAGS) +libmono_llvm_la_LDFLAGS=-Wl,-undefined -Wl,suppress -Wl,-flat_namespace endif endif @@ -276,10 +233,8 @@ endif if LOADED_LLVM LLVMMONOF= -LLVMMONOLD= else -LLVMMONOF=$(llvm_libs) -LLVMMONOLD=$(LLVM_LDFLAGS) +LLVMMONOF=$(LLVM_LIBS) $(LLVM_LDFLAGS) endif mono_boehm_LDADD = \ @@ -290,7 +245,7 @@ mono_boehm_LDADD = \ $(MONO_DTRACE_OBJECT) mono_boehm_LDFLAGS = \ - $(static_flags) $(monobinldflags) $(monobin_platform_ldflags) $(LLVMMONOLD) + $(static_flags) $(monobinldflags) $(monobin_platform_ldflags) mono_sgen_LDADD = \ $(MONO_SGEN_LIB) \ @@ -299,7 +254,7 @@ mono_sgen_LDADD = \ -lm \ $(MONO_DTRACE_OBJECT) -mono_sgen_LDFLAGS = $(static_flags) $(monobinldflags) $(monobin_platform_ldflags) $(LLVMMONOLD) +mono_sgen_LDFLAGS = $(static_flags) $(monobinldflags) $(monobin_platform_ldflags) if BITCODE libmonoldflags += -no-undefined @@ -732,12 +687,12 @@ libmini_la_CFLAGS = $(mono_CFLAGS) libmonoboehm_2_0_la_SOURCES = libmonoboehm_2_0_la_CFLAGS = $(mono_boehm_CFLAGS) libmonoboehm_2_0_la_LIBADD = libmini.la $(interp_libs_with_mini) $(dbg_libs_with_mini) $(boehm_libs) $(LIBMONO_DTRACE_OBJECT) $(LLVMMONOF) -libmonoboehm_2_0_la_LDFLAGS = $(libmonoldflags) $(monobin_platform_ldflags) $(LLVMMONOLD) +libmonoboehm_2_0_la_LDFLAGS = $(libmonoldflags) $(monobin_platform_ldflags) libmonosgen_2_0_la_SOURCES = libmonosgen_2_0_la_CFLAGS = $(mono_sgen_CFLAGS) libmonosgen_2_0_la_LIBADD = libmini.la $(interp_libs_with_mini) $(dbg_libs_with_mini) $(sgen_libs) $(LIBMONO_DTRACE_OBJECT) $(LLVMMONOF) -libmonosgen_2_0_la_LDFLAGS = $(libmonoldflags) $(monobin_platform_ldflags) $(LLVMMONOLD) +libmonosgen_2_0_la_LDFLAGS = $(libmonoldflags) $(monobin_platform_ldflags) libmonoincludedir = $(includedir)/mono-$(API_VER)/mono/jit @@ -1038,9 +993,15 @@ patch-automake: tags: etags -o TAGS `find .. -name "*.h" -o -name "*.c"` +if ENABLE_LLVM +llvm_makefile_dep = $(top_srcdir)/llvm/llvm_config.mk +endif + if HAS_EXTENSION_MODULE else -Makefile.am: Makefile.am.in +Makefile.am: Makefile.am.in $(llvm_makefile_dep) echo "##################### Generated from Makefile.am.in, do not modify ##########################" > $@ cat $< >> $@ + endif + |