mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-21 10:12:45 +01:00
In MSVC builds embed a VERSIONINFO resource in our exe and DLL files.
This reinstates my commits r238740/r238741 which I reverted due to a failure in the clang-cl selfhost tests on Windows. I've now fixed the issue in clang-cl that caused the failure so hopefully all should be well now. llvm-svn: 239612
This commit is contained in:
parent
12677ab0cc
commit
46ad93c20c
@ -228,6 +228,74 @@ function(set_output_directory target bindir libdir)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# If on Windows and building with MSVC, add the resource script containing the
|
||||
# VERSIONINFO data to the project. This embeds version resource information
|
||||
# into the output .exe or .dll.
|
||||
# TODO: Enable for MinGW Windows builds too.
|
||||
#
|
||||
function(add_windows_version_resource_file OUT_VAR)
|
||||
set(sources ${ARGN})
|
||||
if (MSVC)
|
||||
set(resource_file ${LLVM_SOURCE_DIR}/resources/windows_version_resource.rc)
|
||||
set(sources ${sources} ${resource_file})
|
||||
source_group("Resource Files" ${resource_file})
|
||||
set(windows_resource_file ${resource_file} PARENT_SCOPE)
|
||||
endif(MSVC)
|
||||
|
||||
set(${OUT_VAR} ${sources} PARENT_SCOPE)
|
||||
endfunction(add_windows_version_resource_file)
|
||||
|
||||
# set_windows_version_resource_properties(name resource_file...
|
||||
# VERSION_MAJOR int
|
||||
# Optional major version number (defaults to LLVM_VERSION_MAJOR)
|
||||
# VERSION_MINOR int
|
||||
# Optional minor version number (defaults to LLVM_VERSION_MINOR)
|
||||
# VERSION_PATCHLEVEL int
|
||||
# Optional patchlevel version number (defaults to LLVM_VERSION_PATCH)
|
||||
# VERSION_STRING
|
||||
# Optional version string (defaults to PACKAGE_VERSION)
|
||||
# PRODUCT_NAME
|
||||
# Optional product name string (defaults to "LLVM")
|
||||
# )
|
||||
function(set_windows_version_resource_properties name resource_file)
|
||||
cmake_parse_arguments(ARG
|
||||
""
|
||||
"VERSION_MAJOR;VERSION_MINOR;VERSION_PATCHLEVEL;VERSION_STRING;PRODUCT_NAME"
|
||||
""
|
||||
${ARGN})
|
||||
|
||||
if (NOT DEFINED ARG_VERSION_MAJOR)
|
||||
set(ARG_VERSION_MAJOR ${LLVM_VERSION_MAJOR})
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED ARG_VERSION_MINOR)
|
||||
set(ARG_VERSION_MINOR ${LLVM_VERSION_MINOR})
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED ARG_VERSION_PATCHLEVEL)
|
||||
set(ARG_VERSION_PATCHLEVEL ${LLVM_VERSION_PATCH})
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED ARG_VERSION_STRING)
|
||||
set(ARG_VERSION_STRING ${PACKAGE_VERSION})
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED ARG_PRODUCT_NAME)
|
||||
set(ARG_PRODUCT_NAME "LLVM")
|
||||
endif()
|
||||
|
||||
set_property(SOURCE ${resource_file}
|
||||
PROPERTY COMPILE_DEFINITIONS
|
||||
"RC_VERSION_FIELD_1=${ARG_VERSION_MAJOR}"
|
||||
"RC_VERSION_FIELD_2=${ARG_VERSION_MINOR}"
|
||||
"RC_VERSION_FIELD_3=${ARG_VERSION_PATCHLEVEL}"
|
||||
"RC_VERSION_FIELD_4=0"
|
||||
"RC_FILE_VERSION=\"${ARG_VERSION_STRING}\""
|
||||
"RC_INTERNAL_NAME=\"${name}\""
|
||||
"RC_PRODUCT_NAME=\"${ARG_PRODUCT_NAME}\""
|
||||
"RC_PRODUCT_VERSION=\"${ARG_VERSION_STRING}\"")
|
||||
endfunction(set_windows_version_resource_properties)
|
||||
|
||||
# llvm_add_library(name sources...
|
||||
# SHARED;STATIC
|
||||
# STATIC by default w/o BUILD_SHARED_LIBS.
|
||||
@ -316,10 +384,17 @@ function(llvm_add_library name)
|
||||
if(ARG_MODULE)
|
||||
add_library(${name} MODULE ${ALL_FILES})
|
||||
elseif(ARG_SHARED)
|
||||
add_windows_version_resource_file(ALL_FILES ${ALL_FILES})
|
||||
add_library(${name} SHARED ${ALL_FILES})
|
||||
else()
|
||||
add_library(${name} STATIC ${ALL_FILES})
|
||||
endif()
|
||||
|
||||
if(DEFINED windows_resource_file)
|
||||
set_windows_version_resource_properties(${name} ${windows_resource_file})
|
||||
set(windows_resource_file ${windows_resource_file} PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
set_output_directory(${name} ${LLVM_RUNTIME_OUTPUT_INTDIR} ${LLVM_LIBRARY_OUTPUT_INTDIR})
|
||||
llvm_update_compile_flags(${name})
|
||||
add_link_opts( ${name} )
|
||||
@ -482,11 +557,18 @@ endmacro(add_llvm_loadable_module name)
|
||||
|
||||
macro(add_llvm_executable name)
|
||||
llvm_process_sources( ALL_FILES ${ARGN} )
|
||||
add_windows_version_resource_file(ALL_FILES ${ALL_FILES})
|
||||
|
||||
if( EXCLUDE_FROM_ALL )
|
||||
add_executable(${name} EXCLUDE_FROM_ALL ${ALL_FILES})
|
||||
else()
|
||||
add_executable(${name} ${ALL_FILES})
|
||||
endif()
|
||||
|
||||
if(DEFINED windows_resource_file)
|
||||
set_windows_version_resource_properties(${name} ${windows_resource_file})
|
||||
endif()
|
||||
|
||||
llvm_update_compile_flags(${name})
|
||||
add_link_opts( ${name} )
|
||||
|
||||
|
89
resources/windows_version_resource.rc
Normal file
89
resources/windows_version_resource.rc
Normal file
@ -0,0 +1,89 @@
|
||||
// Microsoft Visual C++ resource script for embedding version information.
|
||||
// The format is described at:
|
||||
// http://msdn.microsoft.com/en-gb/library/windows/desktop/aa380599(v=vs.85).aspx
|
||||
// The VERSIONINFO resource is described at:
|
||||
// https://msdn.microsoft.com/en-gb/library/windows/desktop/aa381058(v=vs.85).aspx
|
||||
|
||||
|
||||
// Default values for required fields.
|
||||
|
||||
#ifndef RC_VERSION_FIELD_1
|
||||
#define RC_VERSION_FIELD_1 0
|
||||
#endif
|
||||
|
||||
#ifndef RC_VERSION_FIELD_2
|
||||
#define RC_VERSION_FIELD_2 0
|
||||
#endif
|
||||
|
||||
#ifndef RC_VERSION_FIELD_3
|
||||
#define RC_VERSION_FIELD_3 0
|
||||
#endif
|
||||
|
||||
#ifndef RC_VERSION_FIELD_4
|
||||
#define RC_VERSION_FIELD_4 0
|
||||
#endif
|
||||
|
||||
#ifndef RC_COMPANY_NAME
|
||||
#define RC_COMPANY_NAME ""
|
||||
#endif
|
||||
|
||||
#ifndef RC_FILE_DESCRIPTION
|
||||
#define RC_FILE_DESCRIPTION ""
|
||||
#endif
|
||||
|
||||
#ifndef RC_FILE_VERSION
|
||||
#define RC_FILE_VERSION ""
|
||||
#endif
|
||||
|
||||
#ifndef RC_INTERNAL_NAME
|
||||
#define RC_INTERNAL_NAME ""
|
||||
#endif
|
||||
|
||||
#ifndef RC_ORIGINAL_FILENAME
|
||||
#define RC_ORIGINAL_FILENAME ""
|
||||
#endif
|
||||
|
||||
#ifndef RC_PRODUCT_NAME
|
||||
#define RC_PRODUCT_NAME ""
|
||||
#endif
|
||||
|
||||
#ifndef RC_PRODUCT_VERSION
|
||||
#define RC_PRODUCT_VERSION ""
|
||||
#endif
|
||||
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION RC_VERSION_FIELD_1,RC_VERSION_FIELD_2,RC_VERSION_FIELD_3,RC_VERSION_FIELD_4
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904B0"
|
||||
BEGIN
|
||||
// Required strings
|
||||
VALUE "CompanyName", RC_COMPANY_NAME
|
||||
VALUE "FileDescription", RC_FILE_DESCRIPTION
|
||||
VALUE "FileVersion", RC_FILE_VERSION
|
||||
VALUE "InternalName", RC_INTERNAL_NAME
|
||||
VALUE "OriginalFilename", RC_ORIGINAL_FILENAME
|
||||
VALUE "ProductName", RC_PRODUCT_NAME
|
||||
VALUE "ProductVersion", RC_PRODUCT_VERSION
|
||||
|
||||
// Optional strings
|
||||
#ifdef RC_COMMENTS
|
||||
VALUE "Comments", RC_COMMENTS
|
||||
#endif
|
||||
|
||||
#ifdef RC_COPYRIGHT
|
||||
VALUE "LegalCopyright", RC_COPYRIGHT
|
||||
#endif
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
// The translation must correspond to the above BLOCK inside StringFileInfo
|
||||
// langID 0x0409 U.S. English
|
||||
// charsetID 0x04B0 Unicode
|
||||
VALUE "Translation", 0x0409, 0x04B0
|
||||
END
|
||||
END
|
Loading…
Reference in New Issue
Block a user