diff options
| author | Dario Nieuwenhuis <[email protected]> | 2021-11-24 01:04:23 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2021-11-24 01:04:23 +0100 |
| commit | 78d109f5d5da5d24cb699e9d29e6690d4a3a6901 (patch) | |
| tree | d7436aea88807f03b93d83cc748a25b22c241594 | |
| parent | d06cb0a264ac5dd1bbc3f80083438782149c7124 (diff) | |
stm32-metapac: add `pac` feature to allow building only the macrotables.
| -rw-r--r-- | stm32-metapac-gen/src/lib.rs | 79 | ||||
| -rw-r--r-- | stm32-metapac/Cargo.toml | 7 |
2 files changed, 57 insertions, 29 deletions
diff --git a/stm32-metapac-gen/src/lib.rs b/stm32-metapac-gen/src/lib.rs index 070afb348..9fe3be55c 100644 --- a/stm32-metapac-gen/src/lib.rs +++ b/stm32-metapac-gen/src/lib.rs | |||
| @@ -425,29 +425,7 @@ pub fn gen_chip( | |||
| 425 | gpio_base, gpio_stride, | 425 | gpio_base, gpio_stride, |
| 426 | ); | 426 | ); |
| 427 | 427 | ||
| 428 | let peripheral_version_table = peripheral_versions | 428 | for (module, version) in &peripheral_versions { |
| 429 | .iter() | ||
| 430 | .map(|(kind, version)| vec![kind.clone(), version.clone()]) | ||
| 431 | .collect(); | ||
| 432 | |||
| 433 | make_table(&mut extra, "pins", &pin_table); | ||
| 434 | make_table(&mut extra, "interrupts", &interrupt_table); | ||
| 435 | make_table(&mut extra, "peripherals", &peripherals_table); | ||
| 436 | make_table(&mut extra, "peripheral_versions", &peripheral_version_table); | ||
| 437 | make_table(&mut extra, "peripheral_pins", &peripheral_pins_table); | ||
| 438 | make_table( | ||
| 439 | &mut extra, | ||
| 440 | "peripheral_dma_channels", | ||
| 441 | &peripheral_dma_channels_table, | ||
| 442 | ); | ||
| 443 | make_table(&mut extra, "peripheral_rcc", &peripheral_rcc_table); | ||
| 444 | make_table(&mut extra, "gpio_rcc", &gpio_rcc_table); | ||
| 445 | make_table(&mut extra, "dma_channels", &dma_channels_table); | ||
| 446 | make_table(&mut extra, "dbgmcu", &dbgmcu_table); | ||
| 447 | make_peripheral_counts(&mut extra, &peripheral_counts); | ||
| 448 | make_dma_channel_counts(&mut extra, &dma_channel_counts); | ||
| 449 | |||
| 450 | for (module, version) in peripheral_versions { | ||
| 451 | all_peripheral_versions.insert((module.clone(), version.clone())); | 429 | all_peripheral_versions.insert((module.clone(), version.clone())); |
| 452 | write!( | 430 | write!( |
| 453 | &mut extra, | 431 | &mut extra, |
| @@ -467,19 +445,25 @@ pub fn gen_chip( | |||
| 467 | transform::sort::Sort {}.run(&mut ir).unwrap(); | 445 | transform::sort::Sort {}.run(&mut ir).unwrap(); |
| 468 | transform::Sanitize {}.run(&mut ir).unwrap(); | 446 | transform::Sanitize {}.run(&mut ir).unwrap(); |
| 469 | 447 | ||
| 448 | // ============================== | ||
| 449 | // Setup chip dir | ||
| 450 | |||
| 470 | let chip_dir = options | 451 | let chip_dir = options |
| 471 | .out_dir | 452 | .out_dir |
| 472 | .join("src/chips") | 453 | .join("src/chips") |
| 473 | .join(chip_core_name.to_ascii_lowercase()); | 454 | .join(chip_core_name.to_ascii_lowercase()); |
| 474 | fs::create_dir_all(&chip_dir).unwrap(); | 455 | fs::create_dir_all(&chip_dir).unwrap(); |
| 475 | 456 | ||
| 476 | let items = generate::render(&ir, &gen_opts()).unwrap(); | 457 | // ============================== |
| 477 | let mut file = File::create(chip_dir.join("pac.rs")).unwrap(); | 458 | // generate pac.rs |
| 478 | let data = items.to_string().replace("] ", "]\n"); | 459 | |
| 460 | let data = generate::render(&ir, &gen_opts()).unwrap().to_string(); | ||
| 461 | let data = data.replace("] ", "]\n"); | ||
| 479 | 462 | ||
| 480 | // Remove inner attributes like #![no_std] | 463 | // Remove inner attributes like #![no_std] |
| 481 | let re = Regex::new("# *! *\\[.*\\]").unwrap(); | 464 | let data = Regex::new("# *! *\\[.*\\]").unwrap().replace_all(&data, ""); |
| 482 | let data = re.replace_all(&data, ""); | 465 | |
| 466 | let mut file = File::create(chip_dir.join("pac.rs")).unwrap(); | ||
| 483 | file.write_all(data.as_bytes()).unwrap(); | 467 | file.write_all(data.as_bytes()).unwrap(); |
| 484 | file.write_all(extra.as_bytes()).unwrap(); | 468 | file.write_all(extra.as_bytes()).unwrap(); |
| 485 | 469 | ||
| @@ -494,11 +478,48 @@ pub fn gen_chip( | |||
| 494 | .unwrap(); | 478 | .unwrap(); |
| 495 | } | 479 | } |
| 496 | 480 | ||
| 481 | // ============================== | ||
| 482 | // generate mod.rs | ||
| 483 | |||
| 484 | let mut data = String::new(); | ||
| 485 | |||
| 486 | write!(&mut data, "#[cfg(feature=\"pac\")] mod pac;").unwrap(); | ||
| 487 | write!(&mut data, "#[cfg(feature=\"pac\")] pub use pac::*; ").unwrap(); | ||
| 488 | |||
| 489 | let peripheral_version_table = peripheral_versions | ||
| 490 | .iter() | ||
| 491 | .map(|(kind, version)| vec![kind.clone(), version.clone()]) | ||
| 492 | .collect(); | ||
| 493 | |||
| 494 | make_table(&mut data, "pins", &pin_table); | ||
| 495 | make_table(&mut data, "interrupts", &interrupt_table); | ||
| 496 | make_table(&mut data, "peripherals", &peripherals_table); | ||
| 497 | make_table(&mut data, "peripheral_versions", &peripheral_version_table); | ||
| 498 | make_table(&mut data, "peripheral_pins", &peripheral_pins_table); | ||
| 499 | make_table( | ||
| 500 | &mut data, | ||
| 501 | "peripheral_dma_channels", | ||
| 502 | &peripheral_dma_channels_table, | ||
| 503 | ); | ||
| 504 | make_table(&mut data, "peripheral_rcc", &peripheral_rcc_table); | ||
| 505 | make_table(&mut data, "gpio_rcc", &gpio_rcc_table); | ||
| 506 | make_table(&mut data, "dma_channels", &dma_channels_table); | ||
| 507 | make_table(&mut data, "dbgmcu", &dbgmcu_table); | ||
| 508 | make_peripheral_counts(&mut data, &peripheral_counts); | ||
| 509 | make_dma_channel_counts(&mut data, &dma_channel_counts); | ||
| 510 | |||
| 511 | let mut file = File::create(chip_dir.join("mod.rs")).unwrap(); | ||
| 512 | file.write_all(data.as_bytes()).unwrap(); | ||
| 513 | |||
| 514 | // ============================== | ||
| 515 | // generate device.x | ||
| 516 | |||
| 497 | File::create(chip_dir.join("device.x")) | 517 | File::create(chip_dir.join("device.x")) |
| 498 | .unwrap() | 518 | .unwrap() |
| 499 | .write_all(device_x.as_bytes()) | 519 | .write_all(device_x.as_bytes()) |
| 500 | .unwrap(); | 520 | .unwrap(); |
| 501 | 521 | ||
| 522 | // ============================== | ||
| 502 | // generate default memory.x | 523 | // generate default memory.x |
| 503 | gen_memory_x(&chip_dir, &chip); | 524 | gen_memory_x(&chip_dir, &chip); |
| 504 | } | 525 | } |
| @@ -594,7 +615,7 @@ pub fn gen(options: Options) { | |||
| 594 | let x = name.to_ascii_lowercase(); | 615 | let x = name.to_ascii_lowercase(); |
| 595 | write!( | 616 | write!( |
| 596 | &mut paths, | 617 | &mut paths, |
| 597 | "#[cfg_attr(feature=\"{}\", path = \"chips/{}/pac.rs\")]", | 618 | "#[cfg_attr(feature=\"{}\", path = \"chips/{}/mod.rs\")]", |
| 598 | x, x | 619 | x, x |
| 599 | ) | 620 | ) |
| 600 | .unwrap(); | 621 | .unwrap(); |
diff --git a/stm32-metapac/Cargo.toml b/stm32-metapac/Cargo.toml index 1ca80d162..7411e6cec 100644 --- a/stm32-metapac/Cargo.toml +++ b/stm32-metapac/Cargo.toml | |||
| @@ -16,6 +16,13 @@ regex = "1.5.4" | |||
| 16 | # END BUILD DEPENDENCIES | 16 | # END BUILD DEPENDENCIES |
| 17 | 17 | ||
| 18 | [features] | 18 | [features] |
| 19 | default = ["pac"] | ||
| 20 | |||
| 21 | # Build the actual PAC. Set by default. | ||
| 22 | # If not set, only the macrotables will be generated. You may want to not set it | ||
| 23 | # if you're using stm32-metapac from a build.rs script to use the macros. | ||
| 24 | pac = [] | ||
| 25 | |||
| 19 | rt = ["cortex-m-rt/device"] | 26 | rt = ["cortex-m-rt/device"] |
| 20 | memory-x = [] | 27 | memory-x = [] |
| 21 | 28 | ||
