Skip to content

Commit 642c2cf

Browse files
committed
Refactor atmega-hal for opt-out deprecated globals
1 parent 42bd207 commit 642c2cf

33 files changed

+3853
-2732
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ jobs:
120120
if: "${{ matrix.m.type == 'mcu' }}"
121121
run: cd "mcu/${{ matrix.m.crate }}" && cargo build --features "${{ matrix.m.name }}" -Z build-std=core --target "../../avr-specs/avr-${{ matrix.m.spec }}.json"
122122
- name: Test-compile HAL crate for an MCU (no deprecated globals)
123-
if: "${{ matrix.m.crate == 'attiny-hal' }}"
123+
if: "${{ matrix.m.crate == 'attiny-hal' || matrix.m.crate == 'atmega-hal' }}"
124124
run: >-
125125
cd "mcu/${{ matrix.m.crate }}" &&
126126
cargo build --features "${{ matrix.m.name }}-no-deprecated-globals" -Z build-std=core --target "../../avr-specs/avr-${{ matrix.m.spec }}.json"

mcu/atmega-hal/Cargo.toml

+126-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "atmega-hal"
3-
version = "0.1.0"
3+
version = "0.2.0"
44

55
authors = ["Rahix <[email protected]>"]
66
edition = "2021"
@@ -12,28 +12,137 @@ categories = ["no-std", "embedded", "hardware-support"]
1212

1313
[features]
1414
rt = ["avr-device/rt"]
15-
device-selected = []
1615
enable-extra-adc = []
17-
atmega48p = ["avr-device/atmega48p", "device-selected"]
18-
atmega164pa = ["avr-device/atmega164pa", "device-selected"]
19-
atmega168 = ["avr-device/atmega168", "device-selected"]
20-
atmega328p = ["avr-device/atmega328p", "device-selected"]
21-
atmega328pb = ["avr-device/atmega328pb", "device-selected"]
22-
atmega32a = ["avr-device/atmega32a", "device-selected"]
23-
atmega32u4 = ["avr-device/atmega32u4", "device-selected"]
24-
atmega2560 = ["avr-device/atmega2560", "device-selected"]
25-
atmega128a = ["avr-device/atmega128a", "device-selected"]
26-
atmega1280 = ["avr-device/atmega1280", "device-selected"]
27-
atmega1284p = ["avr-device/atmega1284p", "device-selected"]
28-
atmega8 = ["avr-device/atmega8", "device-selected"]
16+
17+
# MCU-specific targets. Due to use of deprecated globals, only one MCU can be selected at a time
18+
# In atmega-hal 0.3.0 the defaults will change to no deprecated globals
19+
atmega48p = ["atmega48p-deprecated-globals"]
20+
atmega164pa = ["atmega164pa-deprecated-globals"]
21+
atmega168 = ["atmega168-deprecated-globals"]
22+
atmega328p = ["atmega328p-deprecated-globals"]
23+
atmega328pb = ["atmega328pb-deprecated-globals"]
24+
atmega32a = ["atmega32a-deprecated-globals"]
25+
atmega32u4 = ["atmega32u4-deprecated-globals"]
26+
atmega2560 = ["atmega2560-deprecated-globals"]
27+
atmega128a = ["atmega128a-deprecated-globals"]
28+
atmega1280 = ["atmega1280-deprecated-globals"]
29+
atmega1284p = ["atmega1284p-deprecated-globals"]
30+
atmega8 = ["atmega8-deprecated-globals"]
31+
32+
# MCU-specific targets with deprecated globals. This is the default in atmega-hal <0.3.0
33+
atmega48p-deprecated-globals = ["_mcu-atmega48p", "deprecated-globals"]
34+
atmega164pa-deprecated-globals = ["_mcu-atmega164pa", "deprecated-globals"]
35+
atmega168-deprecated-globals = ["_mcu-atmega168", "deprecated-globals"]
36+
atmega328p-deprecated-globals = ["_mcu-atmega328p", "deprecated-globals"]
37+
atmega328pb-deprecated-globals = ["_mcu-atmega328pb", "deprecated-globals"]
38+
atmega32a-deprecated-globals = ["_mcu-atmega32a", "deprecated-globals"]
39+
atmega32u4-deprecated-globals = ["_mcu-atmega32u4", "deprecated-globals"]
40+
atmega2560-deprecated-globals = ["_mcu-atmega2560", "deprecated-globals"]
41+
atmega128a-deprecated-globals = ["_mcu-atmega128a", "deprecated-globals"]
42+
atmega1280-deprecated-globals = ["_mcu-atmega1280", "deprecated-globals"]
43+
atmega1284p-deprecated-globals = ["_mcu-atmega1284p", "deprecated-globals"]
44+
atmega8-deprecated-globals = ["_mcu-atmega8", "deprecated-globals"]
45+
46+
# MCU-specific targets without deprecated globals. This will be the default in atmega-hal 0.3.0
47+
atmega48p-no-deprecated-globals = ["_mcu-atmega48p"]
48+
atmega164pa-no-deprecated-globals = ["_mcu-atmega164pa"]
49+
atmega168-no-deprecated-globals = ["_mcu-atmega168"]
50+
atmega328p-no-deprecated-globals = ["_mcu-atmega328p"]
51+
atmega328pb-no-deprecated-globals = ["_mcu-atmega328pb"]
52+
atmega32a-no-deprecated-globals = ["_mcu-atmega32a"]
53+
atmega32u4-no-deprecated-globals = ["_mcu-atmega32u4"]
54+
atmega2560-no-deprecated-globals = ["_mcu-atmega2560"]
55+
atmega128a-no-deprecated-globals = ["_mcu-atmega128a"]
56+
atmega1280-no-deprecated-globals = ["_mcu-atmega1280"]
57+
atmega1284p-no-deprecated-globals = ["_mcu-atmega1284p"]
58+
atmega8-no-deprecated-globals = ["_mcu-atmega8"]
2959

3060
critical-section-impl = ["avr-device/critical-section-impl"]
3161

32-
# Allow certain downstream crates to overwrite the device selection error by themselves.
62+
default = []
63+
64+
docsrs = [
65+
"atmega48p-no-deprecated-globals",
66+
"atmega164pa-no-deprecated-globals",
67+
"atmega168-no-deprecated-globals",
68+
"atmega328p-no-deprecated-globals",
69+
"atmega328pb-no-deprecated-globals",
70+
"atmega32a-no-deprecated-globals",
71+
"atmega32u4-no-deprecated-globals",
72+
"atmega2560-no-deprecated-globals",
73+
"atmega128a-no-deprecated-globals",
74+
"atmega1280-no-deprecated-globals",
75+
"atmega1284p-no-deprecated-globals",
76+
"atmega8-no-deprecated-globals",
77+
]
78+
79+
# Include soon-to-be-deprecated globals in the crate. Only one MCU can be selected if deprecated globals are enabled
80+
deprecated-globals = []
81+
82+
# If using this crate from another library crate you may want to suppress this error and provide your own
3383
disable-device-selection-error = []
3484

35-
# We must select a microcontroller to build on docs.rs
36-
docsrs = ["atmega328p"]
85+
# MCU-specific implementation features
86+
# Do not use directly; use either an <mcu>-deprecated-globals feature or any number of <mcu>-no-deprecated-globals features
87+
_mcu-atmega48p = ["_mcu-selected", "_peripheral-spi", "_peripheral-simple-pwm", "avr-device/atmega48p"]
88+
_mcu-atmega164pa = ["_mcu-selected", "_peripheral-usart", "_peripheral-simple-pwm", "avr-device/atmega164pa"]
89+
_mcu-atmega168 = [
90+
"_mcu-selected",
91+
"_peripheral-usart",
92+
"_peripheral-spi",
93+
"_peripheral-simple-pwm",
94+
"avr-device/atmega168",
95+
]
96+
_mcu-atmega328p = [
97+
"_mcu-selected",
98+
"_peripheral-usart",
99+
"_peripheral-spi",
100+
"_peripheral-simple-pwm",
101+
"avr-device/atmega328p",
102+
]
103+
_mcu-atmega328pb = [
104+
"_mcu-selected",
105+
"_peripheral-usart",
106+
"_peripheral-spi",
107+
"_peripheral-simple-pwm",
108+
"avr-device/atmega328pb",
109+
]
110+
_mcu-atmega32a = ["_mcu-selected", "_peripheral-usart", "_peripheral-spi", "avr-device/atmega32a"]
111+
_mcu-atmega32u4 = [
112+
"_mcu-selected",
113+
"_peripheral-usart",
114+
"_peripheral-spi",
115+
"_peripheral-simple-pwm",
116+
"avr-device/atmega32u4",
117+
]
118+
_mcu-atmega2560 = [
119+
"_mcu-selected",
120+
"_peripheral-usart",
121+
"_peripheral-spi",
122+
"_peripheral-simple-pwm",
123+
"avr-device/atmega2560",
124+
]
125+
_mcu-atmega128a = ["_mcu-selected", "_peripheral-usart", "_peripheral-spi", "avr-device/atmega128a"]
126+
_mcu-atmega1280 = [
127+
"_mcu-selected",
128+
"_peripheral-usart",
129+
"_peripheral-spi",
130+
"_peripheral-simple-pwm",
131+
"avr-device/atmega1280",
132+
]
133+
_mcu-atmega1284p = [
134+
"_mcu-selected",
135+
"_peripheral-usart",
136+
"_peripheral-spi",
137+
"_peripheral-simple-pwm",
138+
"avr-device/atmega1284p",
139+
]
140+
_mcu-atmega8 = ["_mcu-selected", "_peripheral-usart", "_peripheral-spi", "_peripheral-simple-pwm", "avr-device/atmega8"]
141+
142+
_mcu-selected = []
143+
_peripheral-simple-pwm = []
144+
_peripheral-spi = []
145+
_peripheral-usart = []
37146

38147
[dependencies]
39148
avr-hal-generic = { path = "../../avr-hal-generic/" }

0 commit comments

Comments
 (0)