From d234bfdbe42161461f1f2ff34c2446b565de4137 Mon Sep 17 00:00:00 2001 From: Pierre Oechsel Date: Fri, 15 Apr 2022 09:58:26 +0100 Subject: [PATCH] flambda-backend: Cpp mangling is now a configuration option (#614) --- Makefile.config.in | 1 + configure | 20 ++++++++++++++++++++ configure.ac | 12 ++++++++++++ utils/Makefile | 1 + utils/config.mli | 3 +++ utils/config.mlp | 2 ++ 6 files changed, 39 insertions(+) diff --git a/Makefile.config.in b/Makefile.config.in index 542cbcefcb4f..3972a6f4beb0 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -225,6 +225,7 @@ WITH_OCAMLDOC=@ocamldoc@ WITH_OCAMLTEST=@ocamltest@ ASM_CFI_SUPPORTED=@asm_cfi_supported@ WITH_FRAME_POINTERS=@frame_pointers@ +WITH_CPP_MANGLING=@cpp_mangling@ WITH_PROFINFO=@profinfo@ PROFINFO_WIDTH=@profinfo_width@ WITH_FPIC=@fpic@ diff --git a/configure b/configure index 15b0ab3d4cae..628adf7fdc07 100755 --- a/configure +++ b/configure @@ -710,6 +710,7 @@ cmm_invariants flambda_invariants flambda2 flambda +cpp_mangling frame_pointers profinfo_width profinfo @@ -839,6 +840,7 @@ enable_bigarray_lib enable_ocamldoc enable_ocamltest enable_frame_pointers +enable_cpp_mangling enable_naked_pointers enable_naked_pointers_checker enable_spacetime @@ -1511,6 +1513,7 @@ Optional Features: --disable-ocamldoc do not build the ocamldoc documentation system --disable-ocamltest do not build the ocamltest driver --enable-frame-pointers use frame pointers in runtime and generated code + --enable-cpp-mangling use cpp mangling for exported symbols --disable-naked-pointers do not allow naked pointers --enable-naked-pointers-checker @@ -2882,6 +2885,7 @@ VERSION=4.12.0 + ## Generated files @@ -3129,6 +3133,12 @@ if test "${enable_frame_pointers+set}" = set; then : fi +# Check whether --enable-cpp-mangling was given. +if test "${enable_cpp_mangling+set}" = set; then : + enableval=$enable_cpp_mangling; +fi + + # Check whether --enable-naked-pointers was given. if test "${enable_naked_pointers+set}" = set; then : enableval=$enable_naked_pointers; @@ -16817,6 +16827,16 @@ $as_echo "$as_me: not using frame pointers" >&6;} frame_pointers=false fi +## CPP mangling + +if test x"$enable_cpp_mangling" = "xyes"; then : + cpp_mangling=true + $as_echo "#define WITH_CPP_MANGLING 1" >>confdefs.h + +else + cpp_mangling=false +fi + ## No naked pointers if test x"$enable_naked_pointers" = "xno" ; then : diff --git a/configure.ac b/configure.ac index 914d6069a7af..0cebbc8a26fb 100644 --- a/configure.ac +++ b/configure.ac @@ -152,6 +152,7 @@ AC_SUBST([install_source_artifacts]) AC_SUBST([profinfo]) AC_SUBST([profinfo_width]) AC_SUBST([frame_pointers]) +AC_SUBST([cpp_mangling]) AC_SUBST([flambda]) AC_SUBST([flambda2]) AC_SUBST([flambda_invariants]) @@ -278,6 +279,10 @@ AC_ARG_ENABLE([frame-pointers], [AS_HELP_STRING([--enable-frame-pointers], [use frame pointers in runtime and generated code])]) +AC_ARG_ENABLE([cpp-mangling], + [AS_HELP_STRING([--enable-cpp-mangling], + [use cpp mangling for exported symbols])]) + AC_ARG_ENABLE([naked-pointers], [AS_HELP_STRING([--disable-naked-pointers], [do not allow naked pointers])]) @@ -1738,6 +1743,13 @@ AS_IF([test x"$enable_frame_pointers" = "xyes"], [AC_MSG_NOTICE([not using frame pointers]) frame_pointers=false]) +## CPP mangling + +AS_IF([test x"$enable_cpp_mangling" = "xyes"], + [cpp_mangling=true + AC_DEFINE([WITH_CPP_MANGLING])], + [cpp_mangling=false]) + ## No naked pointers AS_IF([test x"$enable_naked_pointers" = "xno" ], diff --git a/utils/Makefile b/utils/Makefile index 3e268dd315a4..01a09c146d27 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -86,6 +86,7 @@ config.ml: config.mlp $(ROOTDIR)/Makefile.config Makefile $(call SUBST,SYSTHREAD_SUPPORT) \ $(call SUBST,TARGET) \ $(call SUBST,WITH_FRAME_POINTERS) \ + $(call SUBST,WITH_CPP_MANGLING) \ $(call SUBST,WITH_PROFINFO) \ $(call SUBST,FLAT_FLOAT_ARRAY) \ $(call SUBST,FUNCTION_SECTIONS) \ diff --git a/utils/config.mli b/utils/config.mli index b3f38ae39e31..a2c5967e85a9 100644 --- a/utils/config.mli +++ b/utils/config.mli @@ -164,6 +164,9 @@ val asm_cfi_supported: bool val with_frame_pointers : bool (** Whether assembler should maintain frame pointers *) +val with_cpp_mangling : bool +(** Whether symbol names should be following the cpp mangling convention *) + val ext_obj: string (** Extension for object files, e.g. [.o] under Unix. *) diff --git a/utils/config.mlp b/utils/config.mlp index 96c92b0402a7..83fe13dafb53 100644 --- a/utils/config.mlp +++ b/utils/config.mlp @@ -135,6 +135,7 @@ let system = "%%SYSTEM%%" let asm = "%%ASM%%" let asm_cfi_supported = %%ASM_CFI_SUPPORTED%% let with_frame_pointers = %%WITH_FRAME_POINTERS%% +let with_cpp_mangling = %%WITH_CPP_MANGLING%% let profinfo = %%WITH_PROFINFO%% let profinfo_width = %%PROFINFO_WIDTH%% @@ -190,6 +191,7 @@ let configuration_variables = p "asm" asm; p_bool "asm_cfi_supported" asm_cfi_supported; p_bool "with_frame_pointers" with_frame_pointers; + p_bool "with_cpp_mangling" with_cpp_mangling; p "ext_exe" ext_exe; p "ext_obj" ext_obj; p "ext_asm" ext_asm;