[M5+] swap toolchain to gcc15Stdenv + libstdc++
This commit is contained in:
@@ -185,7 +185,6 @@ auto Database::resolve(const std::string& package, const std::string& version,
|
||||
.find_package = row.find_package,
|
||||
.targets = row.targets,
|
||||
.source = row.source,
|
||||
.requires_libcxx_override = row.requires_libcxx_override,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,12 +14,6 @@ struct Recipe {
|
||||
std::string find_package; // post-substitution
|
||||
std::vector<std::string> targets; // post-substitution
|
||||
std::string source; // 'curated' | 'manual' | etc.
|
||||
// Set when the dep needs `.override { stdenv = llvmPkgs.libcxxStdenv; }`
|
||||
// to link against the user's libc++-built project (e.g. nixpkgs ships
|
||||
// it built against libstdc++ — abseil-cpp, llvm). verify_link toggles
|
||||
// this on after a libstdc++/libc++ link failure. Codegen wraps the
|
||||
// buildInputs entry in the override expression when true.
|
||||
bool requires_libcxx_override = false;
|
||||
|
||||
bool operator==(const Recipe&) const = default;
|
||||
};
|
||||
@@ -43,7 +37,6 @@ struct OverlayRow {
|
||||
std::vector<std::string> targets;
|
||||
std::string source;
|
||||
std::int64_t verified_at = 0;
|
||||
bool requires_libcxx_override = false;
|
||||
};
|
||||
|
||||
// RAII wrapper for an open sqlite3 connection used by the overlay database.
|
||||
@@ -97,13 +90,6 @@ auto overlay_delete_recipe(OverlayState& state, const std::string& package,
|
||||
const std::string& source)
|
||||
-> cargoxx::util::Result<void>;
|
||||
|
||||
// Toggle the libcxx-override flag for an existing row. Used by
|
||||
// `verify_link` after a libstdc++/libc++ link mismatch.
|
||||
auto overlay_set_libcxx_override(OverlayState& state, const std::string& package,
|
||||
const std::string& version_range,
|
||||
const std::string& source, bool value)
|
||||
-> cargoxx::util::Result<void>;
|
||||
|
||||
// Drops every overlay row for `package` whose source is not "manual".
|
||||
// Used by `cargoxx add` to invalidate stale auto-discovered recipes
|
||||
// when the resolver/scanner logic has changed under the user — they
|
||||
@@ -146,11 +132,6 @@ class Database {
|
||||
const std::string& version_range,
|
||||
const std::string& source) -> util::Result<void>;
|
||||
|
||||
auto set_libcxx_override(const std::string& package,
|
||||
const std::string& version_range,
|
||||
const std::string& source, bool value)
|
||||
-> util::Result<void>;
|
||||
|
||||
// Evict every non-manual overlay row for `package`. Called by
|
||||
// `cargoxx add` so users never have to manually drop stale
|
||||
// auto-discovered recipes when cargoxx's resolver/scanner logic
|
||||
|
||||
@@ -90,25 +90,6 @@ auto overlay_open(const std::filesystem::path& path)
|
||||
});
|
||||
}
|
||||
|
||||
// Add the libcxx-override column to legacy overlay files. SQLite's
|
||||
// ADD COLUMN errors when the column already exists; treat that as
|
||||
// success (the column is present, which is all we need).
|
||||
constexpr const char* MIGRATE =
|
||||
"ALTER TABLE recipes ADD COLUMN requires_libcxx_override INTEGER NOT NULL DEFAULT 0";
|
||||
char* mig_err = nullptr;
|
||||
if (sqlite3_exec(state->handle(), MIGRATE, nullptr, nullptr, &mig_err) != SQLITE_OK) {
|
||||
if (mig_err && std::string_view{mig_err}.find("duplicate column") ==
|
||||
std::string_view::npos) {
|
||||
std::string msg = std::format("cannot migrate overlay schema: {}",
|
||||
mig_err ? mig_err : "?");
|
||||
sqlite3_free(mig_err);
|
||||
return std::unexpected(util::Error{
|
||||
util::ErrorCode::LinkdbCorrupt, std::move(msg), "", path, std::nullopt,
|
||||
});
|
||||
}
|
||||
sqlite3_free(mig_err);
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -118,8 +99,8 @@ auto overlay_insert_manual(OverlayState& state, const std::string& package,
|
||||
constexpr const char* SQL =
|
||||
"INSERT OR REPLACE INTO recipes "
|
||||
"(package, version_range, nixpkgs_attr, find_package, targets, components, source, "
|
||||
" verified_at, requires_libcxx_override) "
|
||||
"VALUES (?, ?, ?, ?, ?, NULL, 'manual', ?, ?)";
|
||||
" verified_at) "
|
||||
"VALUES (?, ?, ?, ?, ?, NULL, 'manual', ?)";
|
||||
|
||||
sqlite3* db = state.handle();
|
||||
sqlite3_stmt* stmt = nullptr;
|
||||
@@ -138,7 +119,6 @@ auto overlay_insert_manual(OverlayState& state, const std::string& package,
|
||||
sqlite3_bind_text(stmt, 4, r.find_package.c_str(), -1, SQLITE_TRANSIENT);
|
||||
sqlite3_bind_text(stmt, 5, targets_str.c_str(), -1, SQLITE_TRANSIENT);
|
||||
sqlite3_bind_int64(stmt, 6, now);
|
||||
sqlite3_bind_int(stmt, 7, r.requires_libcxx_override ? 1 : 0);
|
||||
|
||||
auto rc = sqlite3_step(stmt);
|
||||
sqlite3_finalize(stmt);
|
||||
@@ -157,8 +137,8 @@ auto overlay_insert(OverlayState& state, const std::string& package,
|
||||
constexpr const char* SQL =
|
||||
"INSERT OR REPLACE INTO recipes "
|
||||
"(package, version_range, nixpkgs_attr, find_package, targets, components, source, "
|
||||
" verified_at, requires_libcxx_override) "
|
||||
"VALUES (?, ?, ?, ?, ?, NULL, ?, ?, ?)";
|
||||
" verified_at) "
|
||||
"VALUES (?, ?, ?, ?, ?, NULL, ?, ?)";
|
||||
|
||||
sqlite3* db = state.handle();
|
||||
sqlite3_stmt* stmt = nullptr;
|
||||
@@ -175,7 +155,6 @@ auto overlay_insert(OverlayState& state, const std::string& package,
|
||||
sqlite3_bind_text(stmt, 5, targets_str.c_str(), -1, SQLITE_TRANSIENT);
|
||||
sqlite3_bind_text(stmt, 6, source.c_str(), -1, SQLITE_TRANSIENT);
|
||||
sqlite3_bind_int64(stmt, 7, verified_at);
|
||||
sqlite3_bind_int(stmt, 8, r.requires_libcxx_override ? 1 : 0);
|
||||
|
||||
auto rc = sqlite3_step(stmt);
|
||||
sqlite3_finalize(stmt);
|
||||
@@ -266,8 +245,7 @@ auto overlay_evict_auto(OverlayState& state, const std::string& package)
|
||||
auto overlay_query(OverlayState& state, const std::string& package)
|
||||
-> util::Result<std::vector<OverlayRow>> {
|
||||
constexpr const char* SQL =
|
||||
"SELECT version_range, nixpkgs_attr, find_package, targets, source, verified_at, "
|
||||
" requires_libcxx_override "
|
||||
"SELECT version_range, nixpkgs_attr, find_package, targets, source, verified_at "
|
||||
"FROM recipes WHERE package = ?";
|
||||
|
||||
sqlite3* db = state.handle();
|
||||
@@ -298,7 +276,6 @@ auto overlay_query(OverlayState& state, const std::string& package)
|
||||
}
|
||||
row.source = column_text(stmt, 4);
|
||||
row.verified_at = sqlite3_column_int64(stmt, 5);
|
||||
row.requires_libcxx_override = sqlite3_column_int(stmt, 6) != 0;
|
||||
out.push_back(std::move(row));
|
||||
}
|
||||
sqlite3_finalize(stmt);
|
||||
@@ -323,30 +300,6 @@ auto overlay_is_fresh(const OverlayRow& row, std::int64_t now) -> bool {
|
||||
return (now - row.verified_at) < THIRTY_DAYS_SECONDS;
|
||||
}
|
||||
|
||||
auto overlay_set_libcxx_override(OverlayState& state, const std::string& package,
|
||||
const std::string& version_range,
|
||||
const std::string& source, bool value)
|
||||
-> util::Result<void> {
|
||||
constexpr const char* SQL =
|
||||
"UPDATE recipes SET requires_libcxx_override = ? "
|
||||
"WHERE package = ? AND version_range = ? AND source = ?";
|
||||
sqlite3* db = state.handle();
|
||||
sqlite3_stmt* stmt = nullptr;
|
||||
if (sqlite3_prepare_v2(db, SQL, -1, &stmt, nullptr) != SQLITE_OK) {
|
||||
return std::unexpected(sqlite_error(db, "prepare update libcxx_override"));
|
||||
}
|
||||
sqlite3_bind_int(stmt, 1, value ? 1 : 0);
|
||||
sqlite3_bind_text(stmt, 2, package.c_str(), -1, SQLITE_TRANSIENT);
|
||||
sqlite3_bind_text(stmt, 3, version_range.c_str(), -1, SQLITE_TRANSIENT);
|
||||
sqlite3_bind_text(stmt, 4, source.c_str(), -1, SQLITE_TRANSIENT);
|
||||
auto rc = sqlite3_step(stmt);
|
||||
sqlite3_finalize(stmt);
|
||||
if (rc != SQLITE_DONE) {
|
||||
return std::unexpected(sqlite_error(db, "step update libcxx_override"));
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
} // namespace detail
|
||||
|
||||
auto Database::add_manual(const std::string& package, const std::string& version_range,
|
||||
@@ -410,15 +363,4 @@ auto Database::evict_auto_recipes(const std::string& package)
|
||||
return detail::overlay_evict_auto(*overlay_, package);
|
||||
}
|
||||
|
||||
auto Database::set_libcxx_override(const std::string& package,
|
||||
const std::string& version_range,
|
||||
const std::string& source, bool value)
|
||||
-> util::Result<void> {
|
||||
if (auto ok = require_overlay(overlay_); !ok) {
|
||||
return std::unexpected(ok.error());
|
||||
}
|
||||
return detail::overlay_set_libcxx_override(*overlay_, package, version_range,
|
||||
source, value);
|
||||
}
|
||||
|
||||
} // namespace cargoxx::linkdb
|
||||
|
||||
Reference in New Issue
Block a user