mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	Using cc_import + interface_library/shared_library to link libcef.lib causes libcef.dll to be copied as a transitive dependency, leading to issues with complex Bazel configs. Instead, we explicitly link libcef.lib in the binary target (cc_binary + linkopts/additional_linker_inputs) and explicitly copy libcef.dll to the target directory.
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright (c) 2024 The Chromium Embedded Framework Authors. All rights
 | 
						|
# reserved. Use of this source code is governed by a BSD-style license that
 | 
						|
# can be found in the LICENSE file.
 | 
						|
 | 
						|
load("//bazel:copy_filegroups.bzl", "copy_filegroups")
 | 
						|
load("//bazel/win:mt.bzl", "add_manifest")
 | 
						|
load("//bazel/win:rc.bzl", "compile_rc")
 | 
						|
load("//bazel/win:variables.bzl",
 | 
						|
     "COMMON_LINKOPTS",
 | 
						|
     "COMMON_COPTS", "COMMON_COPTS_RELEASE", "COMMON_COPTS_DEBUG",
 | 
						|
     "COMMON_DEFINES", "COMMON_DEFINES_RELEASE", "COMMON_DEFINES_DEBUG")
 | 
						|
load("@rules_cc//cc:defs.bzl", "cc_binary")
 | 
						|
 | 
						|
def declare_exe(name, srcs, manifest_srcs, rc_file, resources_srcs, resources_deps=[],
 | 
						|
                deps=[], linkopts=[], copts=[], local_defines=[], data=[],
 | 
						|
                additional_linker_inputs=[], features=[], **kwargs):
 | 
						|
    # Resource file.
 | 
						|
    res_target = "{}_res".format(name)
 | 
						|
    compile_rc(
 | 
						|
        name = res_target,
 | 
						|
        rc_file = rc_file,
 | 
						|
        srcs = resources_srcs,
 | 
						|
        deps = resources_deps,
 | 
						|
        out = "{}.res".format(name),
 | 
						|
        target_compatible_with = ["@platforms//os:windows"],
 | 
						|
    )
 | 
						|
 | 
						|
    # Copy DLLs and resources into the current project.
 | 
						|
    copy_target = "{}_dlls_and_resources".format(name)
 | 
						|
    copy_filegroups(
 | 
						|
        name = copy_target,
 | 
						|
        filegroups = [
 | 
						|
            "@cef//:dlls",
 | 
						|
            "@cef//:resources",
 | 
						|
        ],
 | 
						|
        remove_prefixes = [
 | 
						|
            "Debug",
 | 
						|
            "Release",
 | 
						|
            "Resources",
 | 
						|
        ],
 | 
						|
    )
 | 
						|
 | 
						|
    # Executable target.
 | 
						|
    binary_target = "{}_no_manifest".format(name)
 | 
						|
    cc_binary(
 | 
						|
        name = binary_target,
 | 
						|
        srcs = srcs,
 | 
						|
        deps = [
 | 
						|
            "@cef//:cef_wrapper",
 | 
						|
            "@cef//:cef_sandbox",
 | 
						|
        ] + deps,
 | 
						|
        linkopts = [
 | 
						|
            "$(location @cef//:cef_lib)",
 | 
						|
            "$(location :{})".format(res_target),
 | 
						|
        ] + COMMON_LINKOPTS + linkopts,
 | 
						|
        copts = COMMON_COPTS + select({
 | 
						|
            "@cef//:windows_dbg": COMMON_COPTS_DEBUG,
 | 
						|
            "//conditions:default": COMMON_COPTS_RELEASE,
 | 
						|
        }) + copts,
 | 
						|
        local_defines = COMMON_DEFINES + select({
 | 
						|
            "@cef//:windows_dbg": COMMON_DEFINES_DEBUG,
 | 
						|
            "//conditions:default": COMMON_DEFINES_RELEASE,
 | 
						|
        }) + local_defines,
 | 
						|
        additional_linker_inputs = [
 | 
						|
            "@cef//:cef_lib",
 | 
						|
            ":{}".format(res_target),
 | 
						|
        ] + additional_linker_inputs,
 | 
						|
        data = [
 | 
						|
            ":{}".format(copy_target),
 | 
						|
        ] + data,
 | 
						|
        features = ["generate_pdb_file"] + features,
 | 
						|
        target_compatible_with = ["@platforms//os:windows"],
 | 
						|
        **kwargs
 | 
						|
    )
 | 
						|
 | 
						|
    # Add manifest and rename to final executable.
 | 
						|
    add_manifest(
 | 
						|
        name = name,
 | 
						|
        mt_files = manifest_srcs,
 | 
						|
        in_binary = ":{}".format(binary_target),
 | 
						|
        out_binary = "{}.exe".format(name),
 | 
						|
        target_compatible_with = ["@platforms//os:windows"],
 | 
						|
    )
 |