
Since commit 1c2d031cbd
(Add -E cmake_llvm_rc to preprocess files for
llvm-rc, 2020-01-14, v3.17.0-rc1~24^2) with llvm-rc we explicitly
preprocess RC source files and then compile separately without -I flags.
This broke cases where the RC source references data files adjacent to
itself or in the include path.
This change adds the expansion of the include paths when calling the
llvm-rc in order for the resource files to be picked up correctly by
llvm-rc. Since the RC compiled file is first preprocessed, the file
being compiled by llvm-rc resides in the build directory. In order for
llvm-rc to find the resource data specified relative to the .rc file
being compiled, the source file path is preppended in the include list
so that the original source path takes priority over all the other
includes paths specified.
A space was added in the CMAKE_INCLUDE_FLAG_RC to make the include
directive work properly for llvm-rc. Checks on the rc.exe showed that
the syntax change doesn't affect it's proper operation.
Fixes: #20529
51 lines
1.9 KiB
CMake
51 lines
1.9 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
|
|
|
|
# This file sets the basic flags for the Windows Resource Compiler.
|
|
# It also loads the available platform file for the system-compiler
|
|
# if it exists.
|
|
|
|
# make sure we don't use CMAKE_BASE_NAME from somewhere else
|
|
set(CMAKE_BASE_NAME)
|
|
if(CMAKE_RC_COMPILER MATCHES "windres[^/]*$")
|
|
set(CMAKE_BASE_NAME "windres")
|
|
else()
|
|
get_filename_component(CMAKE_BASE_NAME ${CMAKE_RC_COMPILER} NAME_WE)
|
|
endif()
|
|
set(CMAKE_SYSTEM_AND_RC_COMPILER_INFO_FILE
|
|
${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake)
|
|
include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL)
|
|
|
|
# This should be included before the _INIT variables are
|
|
# used to initialize the cache. Since the rule variables
|
|
# have if blocks on them, users can still define them here.
|
|
# But, it should still be after the platform file so changes can
|
|
# be made to those values.
|
|
if(CMAKE_USER_MAKE_RULES_OVERRIDE)
|
|
# Save the full path of the file so try_compile can use it.
|
|
include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
|
|
set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
|
|
endif()
|
|
|
|
set(CMAKE_RC_FLAGS_INIT "$ENV{RCFLAGS} ${CMAKE_RC_FLAGS_INIT}")
|
|
|
|
cmake_initialize_per_config_variable(CMAKE_RC_FLAGS "Flags for Windows Resource Compiler")
|
|
|
|
# These are the only types of flags that should be passed to the rc
|
|
# command, if COMPILE_FLAGS is used on a target this will be used
|
|
# to filter out any other flags
|
|
set(CMAKE_RC_FLAG_REGEX "^[-/](D|I)")
|
|
|
|
# now define the following rule variables
|
|
# CMAKE_RC_COMPILE_OBJECT
|
|
set(CMAKE_INCLUDE_FLAG_RC "-I ")
|
|
# compile a Resource file into an object file
|
|
if(NOT CMAKE_RC_COMPILE_OBJECT)
|
|
set(CMAKE_RC_COMPILE_OBJECT
|
|
"<CMAKE_RC_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /fo <OBJECT> <SOURCE>")
|
|
endif()
|
|
|
|
# set this variable so we can avoid loading this more than once.
|
|
set(CMAKE_RC_INFORMATION_LOADED 1)
|