# Copyright (C) 2023 Free Software Foundation, Inc. # # 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 # . # # # For mingw Windows hosts, embed a manifest that sets the active # code page of the driver and compiler proper processes to utf8. # This only has an effect when gcc is hosted on Windows version # 1903 (May 2019 Update) or later. # The resource .rc file references the utf8 .manifest file. # Compile it into an object file using windres. # The resulting .o file gets added to host_extra_gcc_objs in # config.host for mingw hosts and gets linked into # the driver as a .o file, so it's lack of symbols is OK. utf8rc-mingw32.o : $(srcdir)/config/i386/utf8-mingw32.rc \ $(srcdir)/config/i386/winnt-utf8.manifest $(WINDRES) $< $@ # Create an object file that just exports the global symbol # HOST_EXTRA_OBJS_SYMBOL sym-mingw32.o : $(srcdir)/config/i386/sym-mingw32.cc $(COMPILER) -c $< # Combine the two object files into one which has both the # compiled utf8 resource and the HOST_EXTRA_OBJS_SYMBOL symbol. # The resulting .o file gets added to host_extra_objs in # config.host for mingw hosts and gets archived into # libbackend.a which gets linked into the compiler proper. # If nothing references it into libbackend.a, it will not # get linked into the compiler proper eventually. # Therefore we need to request the symbol at compiler link time. # -nostdlib is required for supporting old gcc versions that # don't apply it automatically with -r. utf8-mingw32.o : utf8rc-mingw32.o sym-mingw32.o $(COMPILER) -r -nostdlib utf8rc-mingw32.o sym-mingw32.o -o $@ # Force compilers to link against the utf8 resource by # requiring the symbol to be defined. # Otherwise the object file won't get linked in the compilers # because nothing is referencing it in libbackend.a # This is expected because the resource object is not supposed # to have any symbols, it just has to be linked into the # executable in order for Windows to use the utf8 code page. # Some build environments are passing these flags to other # programs as well, so make the symbol definition optional # such that these programs don't fail to build when they # don't find it. $(COMPILERS) : override LDFLAGS += -Wl,--undefined=HOST_EXTRA_OBJS_SYMBOL