mod build_dep;
use std::env::var;
use std::fs::File;
use std::io::BufWriter;
use std::path::PathBuf;
use build_dep::between::*;
#[cfg(not(feature = "bmi2"))]
use build_dep::black_magics::*;
#[cfg(feature = "bmi2")]
use build_dep::pext::*;
#[cfg(not(feature = "bmi2"))]
use build_dep::sliders::BISHOP_SLIDER;
#[cfg(not(feature = "bmi2"))]
use build_dep::sliders::ROOK_SLIDER;
use build_dep::types::BitBoard;
fn create_out_file(filename: &str) -> BufWriter<File> {
let mut out_path: PathBuf = var("OUT_DIR").unwrap().into();
out_path.push(filename);
BufWriter::new(File::create(out_path).unwrap())
}
fn main() {
#[cfg(not(feature = "bmi2"))]
{
let mut attacks: [BitBoard; TABLE_SIZE] = [BitBoard::EMPTY; TABLE_SIZE];
let rook_bmagics: BlackMagics =
BlackMagics::gen(&mut attacks, ROOK_BLACK_MAGICS, ROOK_SHIFT, ROOK_SLIDER);
let bishop_bmagics: BlackMagics = BlackMagics::gen(
&mut attacks,
BISHOP_BLACK_MAGICS,
BISHOP_SHIFT,
BISHOP_SLIDER,
);
let mut rook_bmagic_file: BufWriter<File> = create_out_file("rook_bmagics.rs");
write_bmagics(rook_bmagics, "ROOK", &mut rook_bmagic_file).unwrap();
let mut bishop_bmagic_file: BufWriter<File> = create_out_file("bishop_bmagics.rs");
write_bmagics(bishop_bmagics, "BISHOP", &mut bishop_bmagic_file).unwrap();
let mut sliders_attacks: BufWriter<File> = create_out_file("sliders_attacks.rs");
write_attacks(&attacks, &mut sliders_attacks).unwrap();
}
#[cfg(feature = "bmi2")]
{
let pext_data: PextIndexData = gen_pext();
let mut pext_writer: BufWriter<File> = create_out_file("pext_data.rs");
write_pext(pext_data, &mut pext_writer).unwrap();
let mut attacks: [BitBoard; TABLE_SIZE] = [BitBoard::EMPTY; TABLE_SIZE];
gen_attacks(&mut attacks);
let mut sliders_attacks: BufWriter<File> = create_out_file("sliders_attacks.rs");
write_attacks(&attacks, &mut sliders_attacks).unwrap();
}
let between_table: [[BitBoard; 64]; 64] = gen_between();
let mut between_file: BufWriter<File> = create_out_file("between_array.rs");
write_between("BETWEEN", &between_table, &mut between_file).unwrap();
}