|
|
@@ -120,7 +120,8 @@ fs::path export_project_library(const build_params& params, |
|
|
|
void export_project(const build_params& params, const project& project) { |
|
|
|
if (project.manifest().name.empty()) { |
|
|
|
throw compile_failure( |
|
|
|
fmt::format("Cannot generate an export when the project has no name (Provide a package.dds with a `Name` field)")); |
|
|
|
fmt::format("Cannot generate an export when the project has no name (Provide a " |
|
|
|
"package.dds with a `Name` field)")); |
|
|
|
} |
|
|
|
const auto export_root = params.out_root / fmt::format("{}.lpk", project.manifest().name); |
|
|
|
spdlog::info("Generating project export: {}", export_root.string()); |
|
|
@@ -265,9 +266,9 @@ fs::path obj_for_source(const object_file_index& idx, path_ref source_path) { |
|
|
|
/** |
|
|
|
* Create the static library archive for the given library object. |
|
|
|
*/ |
|
|
|
fs::path create_lib_archive(const build_params& params, |
|
|
|
const library& lib, |
|
|
|
const object_file_index& obj_idx) { |
|
|
|
std::optional<fs::path> create_lib_archive(const build_params& params, |
|
|
|
const library& lib, |
|
|
|
const object_file_index& obj_idx) { |
|
|
|
archive_spec arc; |
|
|
|
arc.out_path = lib_archive_path(params, lib); |
|
|
|
|
|
|
@@ -279,6 +280,10 @@ fs::path create_lib_archive(const build_params& params, |
|
|
|
| to_vector // |
|
|
|
; |
|
|
|
|
|
|
|
if (arc.input_files.empty()) { |
|
|
|
return std::nullopt; |
|
|
|
} |
|
|
|
|
|
|
|
spdlog::info("Create archive for {}: {}", lib.name(), arc.out_path.string()); |
|
|
|
auto ar_cmd = params.toolchain.create_archive_command(arc); |
|
|
|
if (fs::exists(arc.out_path)) { |
|
|
@@ -308,7 +313,11 @@ fs::path link_one_exe(path_ref dest, |
|
|
|
assert(fs::exists(main_obj)); |
|
|
|
|
|
|
|
link_exe_spec spec; |
|
|
|
extend(spec.inputs, {main_obj, lib_archive_path(params, lib)}); |
|
|
|
spec.inputs.push_back(main_obj); |
|
|
|
auto lib_arc_path = lib_archive_path(params, lib); |
|
|
|
if (fs::is_regular_file(lib_arc_path)) { |
|
|
|
spec.inputs.push_back(lib_arc_path); |
|
|
|
} |
|
|
|
spec.output = dest; |
|
|
|
const auto link_command = params.toolchain.create_link_executable_command(spec); |
|
|
|
|
|
|
@@ -342,15 +351,18 @@ std::vector<fs::path> link_executables(source_kind sk, |
|
|
|
} |
|
|
|
|
|
|
|
struct link_results { |
|
|
|
fs::path archive_path; |
|
|
|
std::vector<fs::path> test_exes; |
|
|
|
std::vector<fs::path> app_exes; |
|
|
|
std::optional<fs::path> archive_path; |
|
|
|
std::vector<fs::path> test_exes; |
|
|
|
std::vector<fs::path> app_exes; |
|
|
|
}; |
|
|
|
|
|
|
|
link_results |
|
|
|
link_project_lib(const build_params& params, const library& lib, const object_file_index& obj_idx) { |
|
|
|
link_results res; |
|
|
|
res.archive_path = create_lib_archive(params, lib, obj_idx); |
|
|
|
auto op_arc_path = create_lib_archive(params, lib, obj_idx); |
|
|
|
if (op_arc_path) { |
|
|
|
res.archive_path = *op_arc_path; |
|
|
|
} |
|
|
|
|
|
|
|
auto get_test_exe_path = [&](const source_file sf) { |
|
|
|
return params.out_root |