@@ -11,8 +11,7 @@ CmakeInfo = provider(
1111 "includes" : "" ,
1212 "quote_includes" : "" ,
1313 "stripped_includes" : "" ,
14- "imported_static_libs" : "" ,
15- "imported_dynamic_libs" : "" ,
14+ "imported_libs" : "" ,
1615 "copts" : "" ,
1716 "linkopts" : "" ,
1817 "force_cxx_compilation" : "" ,
@@ -41,10 +40,8 @@ def _file_kind(file):
4140 return "src"
4241 if ext in ("h" , "hh" , "hpp" , "def" , "inc" ):
4342 return "hdr"
44- if ext == "a" :
45- return "static_lib"
46- if ext in ("so" , "dylib" ):
47- return "dynamic_lib"
43+ if ext in ("a" , "so" , "dylib" ):
44+ return "lib"
4845 return None
4946
5047def _get_includes (includes ):
@@ -70,8 +67,7 @@ def _cmake_aspect_impl(target, ctx):
7067 by_kind .setdefault (_file_kind (f ), []).append (_cmake_file (f ))
7168 hdrs = by_kind .get ("hdr" , [])
7269 srcs = by_kind .get ("src" , [])
73- static_libs = by_kind .get ("static_lib" , [])
74- dynamic_libs = by_kind .get ("dynamic_lib" , [])
70+ libs = by_kind .get ("lib" , [])
7571 if not srcs and is_binary :
7672 empty = ctx .actions .declare_file (name + "_empty.cpp" )
7773 ctx .actions .write (empty , "" )
@@ -134,12 +130,15 @@ def _cmake_aspect_impl(target, ctx):
134130 system_includes = system_includes ,
135131 quote_includes = quote_includes ,
136132 stripped_includes = stripped_includes ,
137- imported_static_libs = static_libs ,
138- imported_dynamic_libs = dynamic_libs ,
133+ imported_libs = libs ,
139134 copts = copts ,
140135 linkopts = linkopts ,
141136 defines = compilation_ctx .defines .to_list (),
142- local_defines = compilation_ctx .local_defines .to_list (),
137+ local_defines = [
138+ d
139+ for d in compilation_ctx .local_defines .to_list ()
140+ if not d .startswith ("BAZEL_CURRENT_REPOSITORY" )
141+ ],
143142 force_cxx_compilation = force_cxx_compilation ,
144143 transitive_deps = depset (deps , transitive = [dep .transitive_deps for dep in deps ]),
145144 ),
@@ -156,20 +155,10 @@ def _map_cmake_info(info, is_windows):
156155 commands = [
157156 "add_%s(%s)" % (info .kind , args ),
158157 ]
159- if info .imported_static_libs and info .imported_dynamic_libs :
160- commands += [
161- "if(BUILD_SHARED_LIBS)" ,
162- " target_link_libraries(%s %s %s)" %
163- (info .name , info .modifier or "PUBLIC" , " " .join (info .imported_dynamic_libs )),
164- "else()" ,
165- " target_link_libraries(%s %s %s)" %
166- (info .name , info .modifier or "PUBLIC" , " " .join (info .imported_static_libs )),
167- "endif()" ,
168- ]
169- elif info .imported_static_libs or info .imported_dynamic_libs :
158+ if info .imported_libs :
170159 commands += [
171160 "target_link_libraries(%s %s %s)" %
172- (info .name , info .modifier or "PUBLIC" , " " .join (info .imported_dynamic_lib + info . imported_static_libs )),
161+ (info .name , info .modifier or "PUBLIC" , " " .join (info .imported_libs )),
173162 ]
174163 if info .deps :
175164 libs = {}
@@ -223,7 +212,7 @@ def _map_cmake_info(info, is_windows):
223212
224213GeneratedCmakeFiles = provider (
225214 fields = {
226- "files " : "" ,
215+ "targets " : "" ,
227216 },
228217)
229218
@@ -232,7 +221,11 @@ def _generate_cmake_impl(ctx):
232221 inputs = []
233222
234223 infos = {}
235- for dep in ctx .attr .targets :
224+ targets = list (ctx .attr .targets )
225+ for include in ctx .attr .includes :
226+ targets += include [GeneratedCmakeFiles ].targets .to_list ()
227+
228+ for dep in targets :
236229 for info in [dep [CmakeInfo ]] + dep [CmakeInfo ].transitive_deps .to_list ():
237230 if info .name != None :
238231 inputs += info .inputs
@@ -244,11 +237,6 @@ def _generate_cmake_impl(ctx):
244237 commands += _map_cmake_info (info , is_windows )
245238 commands .append ("" )
246239
247- for include in ctx .attr .includes :
248- for file in include [GeneratedCmakeFiles ].files .to_list ():
249- inputs .append (file )
250- commands .append ("include(${BAZEL_EXEC_ROOT}/%s)" % file .path )
251-
252240 # we want to use a run or run_shell action to register a bunch of files like inputs, but we cannot write all
253241 # in a shell command as we would hit the command size limit. So we first write the file and then copy it with
254242 # the dummy inputs
@@ -259,7 +247,7 @@ def _generate_cmake_impl(ctx):
259247
260248 return [
261249 DefaultInfo (files = depset ([output ])),
262- GeneratedCmakeFiles (files = depset ([ output ] )),
250+ GeneratedCmakeFiles (targets = depset (ctx . attr . targets )),
263251 ]
264252
265253generate_cmake = rule (
0 commit comments