diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in index b1f0ce73e124..99b3d549d5d4 100644 --- a/gcc/jit/Make-lang.in +++ b/gcc/jit/Make-lang.in @@ -55,7 +55,17 @@ else ifneq (,$(findstring darwin,$(host))) -LIBGCCJIT_AGE = 1 +# NOTE that we are building here for the host, and so tests for target- +# specific functionality will only work when host == target. This causes +# fails when building cross-compilers with different object formats (at +# least when the respective linkers do not accept the same command line +# options). Fortunately, for Darwin we can safely hard-code the relevant +# host options, since all usable linkers support them). + +LIBGCCJIT_CURRENT = 26 +LIBGCCJIT_REVISION = 0 +LIBGCCJIT_AGE = 26 +LIBGCCJIT_COMPAT = 0 LIBGCCJIT_BASENAME = libgccjit LIBGCCJIT_SONAME = \ @@ -63,18 +73,18 @@ LIBGCCJIT_SONAME = \ LIBGCCJIT_FILENAME = $(LIBGCCJIT_BASENAME).$(LIBGCCJIT_VERSION_NUM).dylib LIBGCCJIT_LINKER_NAME = $(LIBGCCJIT_BASENAME).dylib -# Conditionalize the use of the LD_VERSION_SCRIPT_OPTION and -# LD_SONAME_OPTION depending if configure found them, using $(if) -# We have to define a COMMA here, otherwise the commas in the "true" -# result are treated as separators by the $(if). +# Darwin does not have a version script option. Exported symbols are controlled +# by the following, and library versioning is done using libtool. +# We have to define a COMMA here, otherwise the commas are treated as +# separators. COMMA := , LIBGCCJIT_VERSION_SCRIPT_OPTION = \ - $(if $(LD_VERSION_SCRIPT_OPTION),\ - -Wl$(COMMA)$(LD_VERSION_SCRIPT_OPTION)$(COMMA)$(srcdir)/jit/libgccjit.map) + -Wl$(COMMA)-exported_symbols_list$(COMMA)$(srcdir)/jit/libgccjit.exports +# For Darwin host, we need a l64 or ld64-compatible linker, that uses +# -install_name to introduce this. LIBGCCJIT_SONAME_OPTION = \ - $(if $(LD_SONAME_OPTION), \ - -Wl$(COMMA)$(LD_SONAME_OPTION)$(COMMA)$(LIBGCCJIT_SONAME)) + -Wl$(COMMA)-install_name$(COMMA)$(LIBGCCJIT_SONAME) LIBGCCJIT_SONAME_SYMLINK = $(LIBGCCJIT_FILENAME) LIBGCCJIT_LINKER_NAME_SYMLINK = $(LIBGCCJIT_LINKER_NAME) @@ -143,15 +153,18 @@ ifneq (,$(findstring mingw,$(target))) # Create import library LIBGCCJIT_EXTRA_OPTS = -Wl,--out-implib,$(LIBGCCJIT_IMPORT_LIB) else - ifneq (,$(findstring darwin,$(host))) -# TODO : Construct a Darwin-style symbol export file. -LIBGCCJIT_EXTRA_OPTS = -Wl,-compatibility_version,$(LIBGCCJIT_VERSION_NUM) \ - -Wl,-current_version,$(LIBGCCJIT_VERSION_NUM).$(LIBGCCJIT_MINOR_NUM).$(LIBGCCJIT_AGE) \ - $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \ - $(LIBGCCJIT_SONAME_OPTION) +LIBGCCJIT_VERS = $(LIBGCCJIT_CURRENT).$(LIBGCCJIT_REVISION).$(LIBGCCJIT_AGE) +LIBGCCJIT_EXTRA_OPTS = -Wl,-current_version,$(LIBGCCJIT_VERS) \ + -Wl,-compatibility_version,$(LIBGCCJIT_COMPAT) \ + $(LIBGCCJIT_VERSION_SCRIPT_OPTION) $(LIBGCCJIT_SONAME_OPTION) +# Use the default (shared) libgcc. +JIT_LDFLAGS = $(filter-out -static-libgcc, $(LDFLAGS)) +ifeq (,$(findstring darwin8,$(host))) +JIT_LDFLAGS += -Wl,-rpath,@loader_path +endif else - +JIT_LDFLAGS = $(LDFLAGS) LIBGCCJIT_EXTRA_OPTS = $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \ $(LIBGCCJIT_SONAME_OPTION) endif @@ -170,7 +183,7 @@ $(LIBGCCJIT_FILENAME): $(jit_OBJS) \ $(LIBDEPS) $(srcdir)/jit/libgccjit.map \ $(EXTRA_GCC_OBJS_EXCLUSIVE) $(jit.prev) @$(call LINK_PROGRESS,$(INDEX.jit),start) - +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ -shared \ + +$(LLINKER) $(ALL_LINKERFLAGS) $(JIT_LDFLAGS) -o $@ -shared \ $(jit_OBJS) libbackend.a libcommon-target.a libcommon.a \ $(CPPLIB) $(LIBDECNUMBER) $(EXTRA_GCC_LIBS) $(LIBS) $(BACKENDLIBS) \ $(EXTRA_GCC_OBJS_EXCLUSIVE) \ diff --git a/gcc/jit/libgccjit.exports b/gcc/jit/libgccjit.exports new file mode 100644 index 000000000000..e32bbe2fd408 --- /dev/null +++ b/gcc/jit/libgccjit.exports @@ -0,0 +1,233 @@ +# Linker export list for Darwin libgccjit.dylib + +# Contributed by Iain Sandoe . +# +# This file is part of GCC. +# +# GCC is free software you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC see the file COPYING3. If not see +# . */ + +# The initial release of the library. +# Keep this list sorted alphabetically: +_gcc_jit_block_add_assignment +_gcc_jit_block_add_assignment_op +_gcc_jit_block_add_comment +_gcc_jit_block_add_eval +_gcc_jit_block_as_object +_gcc_jit_block_end_with_conditional +_gcc_jit_block_end_with_jump +_gcc_jit_block_end_with_return +_gcc_jit_block_end_with_void_return +_gcc_jit_block_get_function +_gcc_jit_context_acquire +_gcc_jit_context_compile +_gcc_jit_context_compile_to_file +_gcc_jit_context_dump_to_file +_gcc_jit_context_dump_reproducer_to_file +_gcc_jit_context_enable_dump +_gcc_jit_context_get_builtin_function +_gcc_jit_context_get_first_error +_gcc_jit_context_get_last_error +_gcc_jit_context_get_type +_gcc_jit_context_get_int_type +_gcc_jit_context_new_array_access +_gcc_jit_context_new_array_type +_gcc_jit_context_new_binary_op +_gcc_jit_context_new_call +_gcc_jit_context_new_call_through_ptr +_gcc_jit_context_new_cast +_gcc_jit_context_new_child_context +_gcc_jit_context_new_comparison +_gcc_jit_context_new_field +_gcc_jit_context_new_function +_gcc_jit_context_new_function_ptr_type +_gcc_jit_context_new_global +_gcc_jit_context_new_location +_gcc_jit_context_new_opaque_struct +_gcc_jit_context_new_param +_gcc_jit_context_new_rvalue_from_double +_gcc_jit_context_new_rvalue_from_int +_gcc_jit_context_new_rvalue_from_long +_gcc_jit_context_new_rvalue_from_ptr +_gcc_jit_context_new_string_literal +_gcc_jit_context_new_struct_type +_gcc_jit_context_new_unary_op +_gcc_jit_context_new_union_type +_gcc_jit_context_null +_gcc_jit_context_one +_gcc_jit_context_release +_gcc_jit_context_set_bool_option +_gcc_jit_context_set_int_option +_gcc_jit_context_set_logfile +_gcc_jit_context_set_str_option +_gcc_jit_context_zero +_gcc_jit_field_as_object +_gcc_jit_function_as_object +_gcc_jit_function_dump_to_dot +_gcc_jit_function_get_param +_gcc_jit_function_new_block +_gcc_jit_function_new_local +_gcc_jit_location_as_object +_gcc_jit_lvalue_as_object +_gcc_jit_lvalue_as_rvalue +_gcc_jit_lvalue_access_field +_gcc_jit_lvalue_get_address +_gcc_jit_object_get_context +_gcc_jit_object_get_debug_string +_gcc_jit_param_as_lvalue +_gcc_jit_param_as_object +_gcc_jit_param_as_rvalue +_gcc_jit_result_get_code +_gcc_jit_result_get_global +_gcc_jit_result_release +_gcc_jit_rvalue_access_field +_gcc_jit_rvalue_as_object +_gcc_jit_rvalue_dereference +_gcc_jit_rvalue_dereference_field +_gcc_jit_rvalue_get_type +_gcc_jit_struct_as_type +_gcc_jit_struct_set_fields +_gcc_jit_type_as_object +_gcc_jit_type_get_const +_gcc_jit_type_get_pointer +_gcc_jit_type_get_volatile + +# Add support for adding arbitrary command-line options (PR jit/66628). +# LIBGCCJIT_ABI_1 +_gcc_jit_context_add_command_line_option + +# Add support for disabling the check for unreachable blocks (PR jit/66546). +# LIBGCCJIT_ABI_2 +_gcc_jit_context_set_bool_allow_unreachable_blocks + +# Add support for switch statements. +# LIBGCCJIT_ABI_3 +_gcc_jit_block_end_with_switch +_gcc_jit_case_as_object +_gcc_jit_context_new_case + +# Add timing API. +#LIBGCCJIT_ABI_4 +_gcc_jit_context_get_timer +_gcc_jit_context_set_timer +_gcc_jit_timer_new +_gcc_jit_timer_release +_gcc_jit_timer_push +_gcc_jit_timer_pop +_gcc_jit_timer_print + +# LIBGCCJIT_ABI_5 +_gcc_jit_context_set_bool_use_external_driver + +# LIBGCCJIT_ABI_6 +_gcc_jit_rvalue_set_bool_require_tail_call + +# LIBGCCJIT_ABI_7 +_gcc_jit_type_get_aligned + +# LIBGCCJIT_ABI_8 +_gcc_jit_type_get_vector + +# LIBGCCJIT_ABI_9 +_gcc_jit_function_get_address + +# LIBGCCJIT_ABI_10 +_gcc_jit_context_new_rvalue_from_vector + +# LIBGCCJIT_ABI_11 +_gcc_jit_context_add_driver_option + +# LIBGCCJIT_ABI_12 +_gcc_jit_context_new_bitfield + +# LIBGCCJIT_ABI_13 +_gcc_jit_version_major +_gcc_jit_version_minor +_gcc_jit_version_patchlevel + +# LIBGCCJIT_ABI_14 +_gcc_jit_global_set_initializer + +# LIBGCCJIT_ABI_15 +_gcc_jit_block_add_extended_asm +_gcc_jit_block_end_with_extended_asm_goto +_gcc_jit_extended_asm_as_object +_gcc_jit_extended_asm_set_volatile_flag +_gcc_jit_extended_asm_set_inline_flag +_gcc_jit_extended_asm_add_output_operand +_gcc_jit_extended_asm_add_input_operand +_gcc_jit_extended_asm_add_clobber +_gcc_jit_context_add_top_level_asm + +# LIBGCCJIT_ABI_16 +_gcc_jit_function_get_return_type +_gcc_jit_function_get_param_count +_gcc_jit_function_type_get_return_type +_gcc_jit_function_type_get_param_count +_gcc_jit_function_type_get_param_type +_gcc_jit_type_unqualified +_gcc_jit_type_dyncast_array +_gcc_jit_type_is_bool +_gcc_jit_type_dyncast_function_ptr_type +_gcc_jit_type_is_integral +_gcc_jit_type_is_pointer +_gcc_jit_type_dyncast_vector +_gcc_jit_vector_type_get_element_type +_gcc_jit_vector_type_get_num_units +_gcc_jit_struct_get_field +_gcc_jit_type_is_struct +_gcc_jit_struct_get_field_count + +# LIBGCCJIT_ABI_17 +_gcc_jit_lvalue_set_tls_model + +# LIBGCCJIT_ABI_18 +_gcc_jit_lvalue_set_link_section + +#LIBGCCJIT_ABI_19 +_gcc_jit_context_new_array_constructor +_gcc_jit_context_new_struct_constructor +_gcc_jit_context_new_union_constructor +_gcc_jit_global_set_initializer_rvalue + +# LIBGCCJIT_ABI_20 +_gcc_jit_compatible_types +_gcc_jit_type_get_size + +# LIBGCCJIT_ABI_21 +_gcc_jit_context_new_bitcast + +# LIBGCCJIT_ABI_22 +_gcc_jit_lvalue_set_register_name + +# LIBGCCJIT_ABI_23 +_gcc_jit_context_set_bool_print_errors_to_stderr + +# LIBGCCJIT_ABI_24 +_gcc_jit_lvalue_set_alignment +_gcc_jit_lvalue_get_alignment + +# LIBGCCJIT_ABI_25 +_gcc_jit_type_get_restrict + +# LIBGCCJIT_ABI_26 +_gcc_jit_function_add_attribute +_gcc_jit_function_add_string_attribute +_gcc_jit_lvalue_add_string_attribute +_gcc_jit_function_add_integer_array_attribute + +# LIBGCCJIT_ABI_27 +_gcc_jit_context_new_sizeof + +