Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac10
-rw-r--r--llvm/.gitignore1
-rw-r--r--llvm/Makefile.am25
-rwxr-xr-xllvm/build_llvm_config.sh47
-rwxr-xr-xmono/mini/Makefile.am.in83
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
+