Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 18 additions & 13 deletions src/generator/msvc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -468,19 +468,24 @@ impl Msvc {
Self::generate_inner(subproject, proj_opts, targets)?;
}

for lib in &project.static_libraries {
if !targets.contains_key(&as_key(lib)) {
add_static_lib(lib, proj_opts, targets)?;
}
}
for lib in &project.object_libraries {
if !targets.contains_key(&as_key(lib)) {
add_object_lib(lib, proj_opts, targets)?;
}
}
for lib in &project.shared_libraries {
if !targets.contains_key(&as_key(lib)) {
add_shared_lib(lib, proj_opts, targets)?;
for lib in &project.link_targets {
match lib {
LinkPtr::Static(lib) => {
if !targets.contains_key(&as_key(lib)) {
add_static_lib(lib, proj_opts, targets)?;
}
}
LinkPtr::Object(lib) => {
if !targets.contains_key(&as_key(lib)) {
add_object_lib(lib, proj_opts, targets)?;
}
}
LinkPtr::Interface(_) => {}
LinkPtr::Shared(lib) => {
if !targets.contains_key(&as_key(lib)) {
add_shared_lib(lib, proj_opts, targets)?;
}
}
}
}
for exe in &project.executables {
Expand Down
42 changes: 20 additions & 22 deletions src/generator/ninja.rs
Original file line number Diff line number Diff line change
Expand Up @@ -385,27 +385,28 @@ impl Ninja {
Ninja::generate_inner(subproject, generator_opts, rules, build_lines, link_targets)?;
}

for lib in &project.static_libraries {
if !link_targets.contains_key(&LinkPtr::Static(lib.clone())) {
add_static_lib_target(lib, generator_opts, rules, build_lines, link_targets)?;
}
}

for lib in &project.object_libraries {
if !link_targets.contains_key(&LinkPtr::Object(lib.clone())) {
add_object_lib_target(lib, generator_opts, rules, build_lines, link_targets)?;
for lib in &project.link_targets {
match lib {
LinkPtr::Static(lib) => {
if !link_targets.contains_key(&LinkPtr::Static(lib.clone())) {
add_static_lib_target(lib, generator_opts, rules, build_lines, link_targets)?;
}
}
LinkPtr::Object(lib) => {
if !link_targets.contains_key(&LinkPtr::Object(lib.clone())) {
add_object_lib_target(lib, generator_opts, rules, build_lines, link_targets)?;
}
}
LinkPtr::Interface(lib) => {
let key = LinkPtr::Interface(lib.clone());
link_targets.entry(key).or_default();
}
LinkPtr::Shared(lib) => {
add_shared_lib_target(lib, generator_opts, rules, build_lines, link_targets)?;
}
}
}

for lib in &project.interface_libraries {
let key = LinkPtr::Interface(lib.clone());
link_targets.entry(key).or_default();
}

for lib in &project.shared_libraries {
add_shared_lib_target(lib, generator_opts, rules, build_lines, link_targets)?;
}

for exe in &project.executables {
add_executable_target(exe, generator_opts, rules, build_lines, link_targets)?;
}
Expand Down Expand Up @@ -1271,10 +1272,7 @@ fn test_position_independent_code() {
generator_vars: None,
output_name: None,
})],
static_libraries: vec![create_lib(weak_parent)],
object_libraries: Vec::new(),
interface_libraries: Vec::new(),
shared_libraries: Vec::new(),
link_targets: vec![LinkPtr::Static(create_lib(weak_parent))],
});
let toolchain = Toolchain {
msvc_platforms: vec!["x64".to_owned(), "Win32".to_owned(), "ARM64".to_owned()],
Expand Down
189 changes: 95 additions & 94 deletions src/generator/xcode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1115,92 +1115,95 @@ fn project_targets(
let mut native_target_keys = Vec::new();
let mut external_projects = HashMap::<String, (Key, Key)>::new();

for lib in &project.object_libraries {
let key = new_native_target_archive(
lib.as_ref(),
&lib.sources,
&lib.generator_vars,
native_target_build_configs,
toolchain,
graph,
id_gen,
global_targets,
&mut external_projects,
build_dir,
)?;
let nt = graph.native_targets.get(&key).unwrap();
let prod_ref = graph.file_references.get(&nt.product_reference).unwrap();
global_targets.insert(
as_key(lib),
GlobalTargetMeta {
project_info: project.info.clone(),
native_target_id: nt.id.clone(),
product_reference_id: prod_ref.id.clone(),
target_name: nt.name.clone(),
product_name: nt.product_name.clone(),
local_key: key,
product_kind: XcodeProductKind::StaticArchive,
},
);
native_target_keys.push(key);
}

for lib in &project.static_libraries {
let key = new_native_target_archive(
lib.as_ref(),
&lib.sources,
&lib.generator_vars,
native_target_build_configs,
toolchain,
graph,
id_gen,
global_targets,
&mut external_projects,
build_dir,
)?;
let nt = graph.native_targets.get(&key).unwrap();
let prod_ref = graph.file_references.get(&nt.product_reference).unwrap();
global_targets.insert(
as_key(lib),
GlobalTargetMeta {
project_info: project.info.clone(),
native_target_id: nt.id.clone(),
product_reference_id: prod_ref.id.clone(),
target_name: nt.name.clone(),
product_name: nt.product_name.clone(),
local_key: key,
product_kind: XcodeProductKind::StaticArchive,
},
);
native_target_keys.push(key);
}

for lib in &project.shared_libraries {
let key = new_native_target_shared(
lib,
native_target_build_configs,
toolchain,
graph,
id_gen,
global_targets,
&mut external_projects,
build_dir,
)?;
let nt = graph.native_targets.get(&key).unwrap();
let prod_ref = graph.file_references.get(&nt.product_reference).unwrap();
global_targets.insert(
as_key(lib),
GlobalTargetMeta {
project_info: project.info.clone(),
native_target_id: nt.id.clone(),
product_reference_id: prod_ref.id.clone(),
target_name: nt.name.clone(),
product_name: nt.product_name.clone(),
local_key: key,
product_kind: XcodeProductKind::DynamicLibrary,
},
);
native_target_keys.push(key);
for lib in &project.link_targets {
match lib {
LinkPtr::Static(lib) => {
let key = new_native_target_archive(
lib.as_ref(),
&lib.sources,
&lib.generator_vars,
native_target_build_configs,
toolchain,
graph,
id_gen,
global_targets,
&mut external_projects,
build_dir,
)?;
let nt = graph.native_targets.get(&key).unwrap();
let prod_ref = graph.file_references.get(&nt.product_reference).unwrap();
global_targets.insert(
as_key(lib),
GlobalTargetMeta {
project_info: project.info.clone(),
native_target_id: nt.id.clone(),
product_reference_id: prod_ref.id.clone(),
target_name: nt.name.clone(),
product_name: nt.product_name.clone(),
local_key: key,
product_kind: XcodeProductKind::StaticArchive,
},
);
native_target_keys.push(key);
}
LinkPtr::Object(lib) => {
let key = new_native_target_archive(
lib.as_ref(),
&lib.sources,
&lib.generator_vars,
native_target_build_configs,
toolchain,
graph,
id_gen,
global_targets,
&mut external_projects,
build_dir,
)?;
let nt = graph.native_targets.get(&key).unwrap();
let prod_ref = graph.file_references.get(&nt.product_reference).unwrap();
global_targets.insert(
as_key(lib),
GlobalTargetMeta {
project_info: project.info.clone(),
native_target_id: nt.id.clone(),
product_reference_id: prod_ref.id.clone(),
target_name: nt.name.clone(),
product_name: nt.product_name.clone(),
local_key: key,
product_kind: XcodeProductKind::StaticArchive,
},
);
native_target_keys.push(key);
}
LinkPtr::Shared(lib) => {
let key = new_native_target_shared(
lib,
native_target_build_configs,
toolchain,
graph,
id_gen,
global_targets,
&mut external_projects,
build_dir,
)?;
let nt = graph.native_targets.get(&key).unwrap();
let prod_ref = graph.file_references.get(&nt.product_reference).unwrap();
global_targets.insert(
as_key(lib),
GlobalTargetMeta {
project_info: project.info.clone(),
native_target_id: nt.id.clone(),
product_reference_id: prod_ref.id.clone(),
target_name: nt.name.clone(),
product_name: nt.product_name.clone(),
local_key: key,
product_kind: XcodeProductKind::DynamicLibrary,
},
);
native_target_keys.push(key);
}
LinkPtr::Interface(_) => {}
}
}

for exe in &project.executables {
Expand Down Expand Up @@ -2443,10 +2446,11 @@ fn test_pbxproj_generation() {
}),
dependencies: Vec::new(),
executables: vec![exe],
static_libraries: vec![adder],
object_libraries: vec![subtracter],
interface_libraries: vec![arithmetic],
shared_libraries: Vec::new(),
link_targets: vec![
LinkPtr::Object(subtracter.clone()),
LinkPtr::Static(adder.clone()),
LinkPtr::Interface(arithmetic.clone()),
],
}
});

Expand Down Expand Up @@ -2552,10 +2556,7 @@ fn test_xcode_transform() {
}),
dependencies: Vec::new(),
executables: vec![exe],
static_libraries: vec![adder],
object_libraries: Vec::new(),
interface_libraries: vec![iface],
shared_libraries: Vec::new(),
link_targets: vec![LinkPtr::Static(adder.clone()), LinkPtr::Interface(iface.clone())],
}
});

Expand Down
5 changes: 2 additions & 3 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
mod executable;
pub mod generator;
mod interface_library;
mod link_type;
pub mod link_type;
mod misc;
mod object_library;
pub mod project;
Expand Down Expand Up @@ -37,8 +37,7 @@ use reqwest::StatusCode;
use serde::Deserialize;
use starlark::{
environment::{
Globals, //
GlobalsBuilder,
GlobalsBuilder, //
Module,
},
eval::Evaluator,
Expand Down
22 changes: 10 additions & 12 deletions src/object_library.rs
Original file line number Diff line number Diff line change
Expand Up @@ -233,22 +233,20 @@ mod tests {
info: Arc::new(crate::project::ProjectInfo { name: "test".to_owned(), path: PathBuf::from(".") }),
dependencies: Vec::new(),
executables: Vec::new(),
static_libraries: vec![
leaf_shared,
leaf_pub_pub,
leaf_pub_priv,
leaf_priv_pub,
leaf_priv_priv,
mid_pub,
mid_priv,
link_targets: vec![
LinkPtr::Object(main_lib.clone()),
LinkPtr::Static(leaf_shared.clone()),
LinkPtr::Static(leaf_pub_pub.clone()),
LinkPtr::Static(leaf_pub_priv.clone()),
LinkPtr::Static(leaf_priv_pub.clone()),
LinkPtr::Static(leaf_priv_priv.clone()),
LinkPtr::Static(mid_pub.clone()),
LinkPtr::Static(mid_priv.clone()),
],
object_libraries: vec![main_lib],
interface_libraries: Vec::new(),
shared_libraries: Vec::new(),
}
});

let main_lib = project.object_libraries.iter().find(|x| x.name == "main_lib").unwrap();
let main_lib = project.link_targets.iter().find(|x| x.name() == "main_lib").unwrap();

let internal_includes = main_lib.internal_includes();

Expand Down
10 changes: 2 additions & 8 deletions src/project.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ use std::{

use crate::{
executable::Executable, //
interface_library::InterfaceLibrary,
object_library::ObjectLibrary,
shared_library::SharedLibrary,
static_library::StaticLibrary,
link_type::LinkPtr,
};

#[derive(Debug)]
Expand All @@ -22,8 +19,5 @@ pub struct Project {
pub info: Arc<ProjectInfo>,
pub dependencies: Vec<Arc<Project>>,
pub executables: Vec<Arc<Executable>>,
pub static_libraries: Vec<Arc<StaticLibrary>>,
pub object_libraries: Vec<Arc<ObjectLibrary>>,
pub interface_libraries: Vec<Arc<InterfaceLibrary>>,
pub shared_libraries: Vec<Arc<SharedLibrary>>,
pub link_targets: Vec<LinkPtr>,
}
Loading