Skip to content

Commit afc10f3

Browse files
committed
1.1.2 release
2 parents 1769968 + 92f948c commit afc10f3

File tree

12 files changed

+134
-59
lines changed

12 files changed

+134
-59
lines changed

pico_sdk_version.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ set(PICO_SDK_VERSION_MAJOR 1)
66
set(PICO_SDK_VERSION_MINOR 1)
77
# PICO_BUILD_DEFINE: PICO_SDK_VERSION_REVISION, SDK version revision, type=int, group=pico_base
88
# PICO_CONFIG: PICO_SDK_VERSION_REVISION, SDK version revision, type=int, group=pico_base
9-
set(PICO_SDK_VERSION_REVISION 1)
9+
set(PICO_SDK_VERSION_REVISION 2)
1010
# PICO_BUILD_DEFINE: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base
1111
# PICO_CONFIG: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base
1212
#set(PICO_SDK_VERSION_PRE_RELEASE_ID develop)

src/rp2_common/boot_stage2/CMakeLists.txt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2_FILE, Default stage2 file to use unless overridden by pico_set_boot_stage2 on the TARGET; this setting is useful when explicitly setting the default build from a per board CMake file, group=build
2-
# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2, Simpler alternative to specifying PICO_DEFAULT_BOOT_STAGE2_FILE where the file is src/boards/{PICO_DEFAULT_BOOT_STAGE2_FILE}.S, default=compile_time_choice, group=build
1+
# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2_FILE, Default boot stage 2 file to use unless overridden by pico_set_boot_stage2 on the TARGET; this setting is useful when explicitly setting the default build from a per board CMake file, group=build
2+
# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2, Simpler alternative to specifying PICO_DEFAULT_BOOT_STAGE2_FILE where the file is src/rp2_common/boot_stage2/{PICO_DEFAULT_BOOT_STAGE2}.S, default=compile_time_choice, group=build
3+
34
if (DEFINED ENV{PICO_DEFAULT_BOOT_STAGE2_FILE})
45
set(PICO_DEFAULT_BOOT_STAGE2_FILE $ENV{PICO_DEFAULT_BOOT_STAGE2_FILE})
56
message("Using PICO_DEFAULT_BOOT_STAGE2_FILE from environment ('${PICO_DEFAULT_BOOT_STAGE2_FILE}')")
7+
elif (PICO_DEFAULT_BOOT_STAGE2_FILE)
8+
# explicitly set, so cache it
9+
set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_DEFAULT_BOOT_STAGE2_FILE}" CACHE STRING "boot stage 2 source file" FORCE)
610
endif()
7-
set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_DEFAULT_BOOT_STAGE2_FILE}" CACHE STRING "boot_stage2 source file" FORCE)
811

912
set(PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME compile_time_choice) # local var
1013
if (NOT PICO_DEFAULT_BOOT_STAGE2_FILE)
@@ -15,12 +18,12 @@ if (NOT PICO_DEFAULT_BOOT_STAGE2_FILE)
1518
if (NOT DEFINED PICO_DEFAULT_BOOT_STAGE2)
1619
set(PICO_DEFAULT_BOOT_STAGE2 ${PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME})
1720
endif()
18-
set(PICO_DEFAULT_BOOT_STAGE2 "${PICO_DEFAULT_BOOT_STAGE2}" CACHE STRING "boot_stage2 short name" FORCE)
21+
set(PICO_DEFAULT_BOOT_STAGE2 "${PICO_DEFAULT_BOOT_STAGE2}" CACHE STRING "boot stage 2 short name" FORCE)
1922
set(PICO_DEFAULT_BOOT_STAGE2_FILE "${CMAKE_CURRENT_LIST_DIR}/${PICO_DEFAULT_BOOT_STAGE2}.S")
2023
endif()
2124

2225
if (NOT EXISTS ${PICO_DEFAULT_BOOT_STAGE2_FILE})
23-
message(FATAL_ERROR "Specified boot_stage2 source '${PICO_DEFAULT_BOOT_STAGE2_FILE}' does not exist.")
26+
message(FATAL_ERROR "Specified boot stage 2 source '${PICO_DEFAULT_BOOT_STAGE2_FILE}' does not exist.")
2427
endif()
2528

2629
# needed by function below
@@ -52,15 +55,15 @@ function(pico_define_boot_stage2 NAME SOURCES)
5255

5356
pico_add_dis_output(${NAME})
5457
pico_add_map_output(${NAME})
55-
58+
5659
set(ORIGINAL_BIN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.bin)
5760
set(PADDED_CHECKSUMMED_ASM ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_padded_checksummed.S)
5861

5962
find_package (Python3 REQUIRED COMPONENTS Interpreter)
6063

6164
add_custom_target(${NAME}_bin DEPENDS ${ORIGINAL_BIN})
6265
add_custom_command(OUTPUT ${ORIGINAL_BIN} DEPENDS ${NAME} COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${NAME}> ${ORIGINAL_BIN})
63-
66+
6467
add_custom_target(${NAME}_padded_checksummed_asm DEPENDS ${PADDED_CHECKSUMMED_ASM})
6568
add_custom_command(OUTPUT ${PADDED_CHECKSUMMED_ASM} DEPENDS ${ORIGINAL_BIN}
6669
COMMAND ${Python3_EXECUTABLE} ${PICO_BOOT_STAGE2_DIR}/pad_checksum -s 0xffffffff ${ORIGINAL_BIN} ${PADDED_CHECKSUMMED_ASM}
@@ -89,7 +92,7 @@ macro(pico_set_boot_stage2 TARGET NAME)
8992
if ("EXECUTABLE" STREQUAL "${target_type}")
9093
set_target_properties(${TARGET} PROPERTIES PICO_TARGET_BOOT_STAGE2 "${NAME}")
9194
else()
92-
message(FATAL_ERROR "boot stage2 implementation must be set on executable not library")
95+
message(FATAL_ERROR "boot stage 2 implementation must be set on executable not library")
9396
endif()
9497
endmacro()
9598

src/rp2_common/boot_stage2/compile_time_choice.S

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,9 @@
1111
#include "boot_stage2/config.h"
1212

1313
#ifdef PICO_BUILD_BOOT_STAGE2_NAME
14-
// boot stage2 is configured by cmake, so use the name specified there
14+
// boot stage 2 is configured by cmake, so use the name specified there
1515
#error PICO_BUILD_BOOT_STAGE2_NAME should not be defined for compile_time_choice builds
1616
#else
17-
// boot stage2 is selected by board configu header, so we have to do some work
18-
#if PICO_BOOT_STAGE2_CHOOSE_IS25LP080
19-
#include "boot2_is25lp080.S"
20-
#elif PICO_BOOT_STAGE2_CHOOSE_W25Q080
21-
#include "boot2_w28q080.S"
22-
#elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL
23-
#include "boot2_w25x10cl.S"
24-
#elif PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H
25-
#include "boot2_generic_03h.S"
26-
#else
27-
#error unknown boot stage2 choice
28-
#endif
17+
// boot stage 2 is selected by board config header, and PICO_BOOT_STAGE2_ASM is set in boot_stage2/config.h
18+
#include PICO_BOOT_STAGE2_ASM
2919
#endif

src/rp2_common/boot_stage2/include/boot_stage2/config.h

Lines changed: 58 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,74 @@
99

1010
// NOTE THIS HEADER IS INCLUDED FROM ASSEMBLY
1111

12+
#include "pico/config.h"
13+
1214
// PICO_CONFIG: PICO_BUILD_BOOT_STAGE2_NAME, The name of the boot stage 2 if selected by the build, group=boot_stage2
13-
// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_IS25LP080, Select boot2_is25lp080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2
14-
// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25Q080, Select boot2_w28q080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2
15-
// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25X10CL, Select boot2_is25lp080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2
16-
// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H, Select boot2_generic_03h as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=true, group=boot_stage2
15+
#ifdef PICO_BUILD_BOOT_STAGE2_NAME
16+
#define _BOOT_STAGE2_SELECTED
17+
#else
18+
// check that multiple boot stage 2 options haven't been set...
19+
20+
// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_IS25LP080, Select boot2_is25lp080 as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2
21+
#ifndef PICO_BOOT_STAGE2_CHOOSE_IS25LP080
22+
#define PICO_BOOT_STAGE2_CHOOSE_IS25LP080 0
23+
#elif PICO_BOOT_STAGE2_CHOOSE_IS25LP080
24+
#ifdef _BOOT_STAGE2_SELECTED
25+
#error multiple boot stage 2 options chosen
26+
#endif
27+
#define _BOOT_STAGE2_SELECTED
28+
#endif
29+
// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25Q080, Select boot2_w25q080 as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2
30+
#ifndef PICO_BOOT_STAGE2_CHOOSE_W25Q080
31+
#define PICO_BOOT_STAGE2_CHOOSE_W25Q080 0
32+
#elif PICO_BOOT_STAGE2_CHOOSE_W25Q080
33+
#ifdef _BOOT_STAGE2_SELECTED
34+
#error multiple boot stage 2 options chosen
35+
#endif
36+
#define _BOOT_STAGE2_SELECTED
37+
#endif
38+
// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25X10CL, Select boot2_w25x10cl as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2
39+
#ifndef PICO_BOOT_STAGE2_CHOOSE_W25X10CL
40+
#define PICO_BOOT_STAGE2_CHOOSE_W25X10CL 0
41+
#elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL
42+
#ifdef _BOOT_STAGE2_SELECTED
43+
#error multiple boot stage 2 options chosen
44+
#endif
45+
#define _BOOT_STAGE2_SELECTED
46+
#endif
47+
// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H, Select boot2_generic_03h as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=1, group=boot_stage2
48+
#if defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) && PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H
49+
#ifdef _BOOT_STAGE2_SELECTED
50+
#error multiple boot stage 2 options chosen
51+
#endif
52+
#define _BOOT_STAGE2_SELECTED
53+
#endif
54+
55+
#endif // PICO_BUILD_BOOT_STAGE2_NAME
1756

1857
#ifdef PICO_BUILD_BOOT_STAGE2_NAME
19-
// boot stage2 is configured by cmake, so use the name specified there
58+
// boot stage 2 is configured by cmake, so use the name specified there
2059
#define PICO_BOOT_STAGE2_NAME PICO_BUILD_BOOT_STAGE2_NAME
2160
#else
22-
// boot stage2 is selected by board configu header, so we have to do some work
23-
// NOTE: this switch is mirrored in compile_time_choice.S
61+
// boot stage 2 is selected by board config header, so we have to do some work
2462
#if PICO_BOOT_STAGE2_CHOOSE_IS25LP080
25-
#define PICO_BOOT_STAGE2_NAME "boot2_is25lp080"
63+
#define _BOOT_STAGE2 boot2_is25lp080
2664
#elif PICO_BOOT_STAGE2_CHOOSE_W25Q080
27-
#define PICO_BOOT_STAGE2_NAME "boot2_w28q080"
65+
#define _BOOT_STAGE2 boot2_w25q080
2866
#elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL
29-
#define PICO_BOOT_STAGE2_NAME "boot2_w25x10cl"
30-
#elif PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H || !defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H)
67+
#define _BOOT_STAGE2 boot2_w25x10cl
68+
#elif !defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) || PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H
3169
#undef PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H
3270
#define PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H 1
33-
#define PICO_BOOT_STAGE2_NAME "boot2_generic_03h"
71+
#define _BOOT_STAGE2 boot2_generic_03h
3472
#else
35-
#error no bootstage2 is defined by PICO_BOOT_STAGE2_CHOOSE_ macro
73+
#error no boot stage 2 is defined by PICO_BOOT_STAGE2_CHOOSE_ macro
3674
#endif
75+
// we can't include cdefs in assembly, so define our own, but avoid conflict with real ones for c inclusion
76+
#define _PICO__STRING(x) #x
77+
#define _PICO__XSTRING(x) _PICO__STRING(x)
78+
#define _PICO__CONCAT1(x, y) x ## y
79+
#define PICO_BOOT_STAGE2_NAME _PICO__XSTRING(_BOOT_STAGE2)
80+
#define PICO_BOOT_STAGE2_ASM _PICO__XSTRING(_PICO__CONCAT1(_BOOT_STAGE2,.S))
81+
#endif
3782
#endif
38-
#endif

src/rp2_common/hardware_dma/dma.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,10 @@ void print_dma_ctrl(dma_channel_hw_t *channel) {
6060
ctrl & DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_BITS ? 1 : 0,
6161
ctrl & DMA_CH0_CTRL_TRIG_EN_BITS ? 1 : 0);
6262
}
63+
#endif
6364

64-
void check_dma_channel_param_impl(uint channel) {
65+
#if PARAM_ASSERTIONS_ENABLED(DMA)
66+
void check_dma_channel_param_impl(uint __unused channel) {
6567
valid_params_if(DMA, channel < NUM_DMA_CHANNELS);
6668
}
67-
6869
#endif

src/rp2_common/hardware_gpio/gpio.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ int gpio_get_pad(uint gpio) {
2727
// This also clears the input/output/irq override bits.
2828
void gpio_set_function(uint gpio, enum gpio_function fn) {
2929
invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS);
30-
invalid_params_if(GPIO, fn << IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB & ~IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS);
30+
invalid_params_if(GPIO, ((uint32_t)fn << IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB) & ~IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS);
3131
// Set input enable on, output disable off
3232
hw_write_masked(&padsbank0_hw->io[gpio],
3333
PADS_BANK0_GPIO0_IE_BITS,

src/rp2_common/hardware_pio/include/hardware/pio.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ static inline void sm_config_set_out_shift(pio_sm_config *c, bool shift_right, b
320320
* \param join Specifies the join type. \see enum pio_fifo_join
321321
*/
322322
static inline void sm_config_set_fifo_join(pio_sm_config *c, enum pio_fifo_join join) {
323-
valid_params_if(PIO, join >= PIO_FIFO_JOIN_NONE && join <= PIO_FIFO_JOIN_RX);
323+
valid_params_if(PIO, join == PIO_FIFO_JOIN_NONE || join == PIO_FIFO_JOIN_TX || join == PIO_FIFO_JOIN_RX);
324324
c->shiftctrl = (c->shiftctrl & (uint)~(PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS | PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS)) |
325325
(((uint)join) << PIO_SM0_SHIFTCTRL_FJOIN_TX_LSB);
326326
}
@@ -350,7 +350,7 @@ static inline void sm_config_set_out_special(pio_sm_config *c, bool sticky, bool
350350
* \param status_n parameter for the mov status operation (currently a bit count)
351351
*/
352352
static inline void sm_config_set_mov_status(pio_sm_config *c, enum pio_mov_status_type status_sel, uint status_n) {
353-
valid_params_if(PIO, status_sel >= STATUS_TX_LESSTHAN && status_sel <= STATUS_RX_LESSTHAN);
353+
valid_params_if(PIO, status_sel == STATUS_TX_LESSTHAN || status_sel == STATUS_RX_LESSTHAN);
354354
c->execctrl = (c->execctrl
355355
& ~(PIO_SM0_EXECCTRL_STATUS_SEL_BITS | PIO_SM0_EXECCTRL_STATUS_N_BITS))
356356
| ((((uint)status_sel) << PIO_SM0_EXECCTRL_STATUS_SEL_LSB) & PIO_SM0_EXECCTRL_STATUS_SEL_BITS)

src/rp2_common/hardware_pwm/include/hardware/pwm.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ extern "C" {
4747
*/
4848
enum pwm_clkdiv_mode
4949
{
50-
PWM_DIV_FREE_RUNNING, ///< Free-running counting at rate dictated by fractional divider
51-
PWM_DIV_B_HIGH, ///< Fractional divider is gated by the PWM B pin
52-
PWM_DIV_B_RISING, ///< Fractional divider advances with each rising edge of the PWM B pin
53-
PWM_DIV_B_FALLING ///< Fractional divider advances with each falling edge of the PWM B pin
50+
PWM_DIV_FREE_RUNNING = 0, ///< Free-running counting at rate dictated by fractional divider
51+
PWM_DIV_B_HIGH = 1, ///< Fractional divider is gated by the PWM B pin
52+
PWM_DIV_B_RISING = 2, ///< Fractional divider advances with each rising edge of the PWM B pin
53+
PWM_DIV_B_FALLING = 3 ///< Fractional divider advances with each falling edge of the PWM B pin
5454
};
5555

5656
enum pwm_chan
@@ -144,7 +144,10 @@ static inline void pwm_config_set_clkdiv_int(pwm_config *c, uint div) {
144144
* high level, rising edge or falling edge of the B pin input.
145145
*/
146146
static inline void pwm_config_set_clkdiv_mode(pwm_config *c, enum pwm_clkdiv_mode mode) {
147-
valid_params_if(PWM, mode >= PWM_DIV_FREE_RUNNING && mode <= PWM_DIV_B_FALLING);
147+
valid_params_if(PWM, mode == PWM_DIV_FREE_RUNNING ||
148+
mode == PWM_DIV_B_RISING ||
149+
mode == PWM_DIV_B_HIGH ||
150+
mode == PWM_DIV_B_FALLING);
148151
c->csr = (c->csr & ~PWM_CH0_CSR_DIVMODE_BITS)
149152
| (((uint)mode) << PWM_CH0_CSR_DIVMODE_LSB);
150153
}
@@ -414,7 +417,10 @@ static inline void pwm_set_output_polarity(uint slice_num, bool a, bool b) {
414417
*/
415418
static inline void pwm_set_clkdiv_mode(uint slice_num, enum pwm_clkdiv_mode mode) {
416419
check_slice_num_param(slice_num);
417-
valid_params_if(PWM, mode >= PWM_DIV_FREE_RUNNING && mode <= PWM_DIV_B_FALLING);
420+
valid_params_if(PWM, mode == PWM_DIV_FREE_RUNNING ||
421+
mode == PWM_DIV_B_RISING ||
422+
mode == PWM_DIV_B_HIGH ||
423+
mode == PWM_DIV_B_FALLING);
418424
hw_write_masked(&pwm_hw->slice[slice_num].csr, ((uint)mode) << PWM_CH0_CSR_DIVMODE_LSB, PWM_CH0_CSR_DIVMODE_BITS);
419425
}
420426

src/rp2_common/hardware_sync/include/hardware/sync.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,10 @@ inline static spin_lock_t *spin_lock_instance(uint lock_num) {
204204
* \return The Spinlock ID
205205
*/
206206
inline static uint spin_lock_get_num(spin_lock_t *lock) {
207-
int lock_num = lock - (spin_lock_t *) (SIO_BASE + SIO_SPINLOCK0_OFFSET);
208-
invalid_params_if(SYNC, lock_num < 0 || lock_num >= NUM_SPIN_LOCKS);
209-
return (uint) lock_num;
207+
invalid_params_if(SYNC, (uint) lock < SIO_BASE + SIO_SPINLOCK0_OFFSET ||
208+
(uint) lock >= NUM_SPIN_LOCKS * sizeof(spin_lock_t) + SIO_BASE + SIO_SPINLOCK0_OFFSET ||
209+
((uint) lock - SIO_BASE + SIO_SPINLOCK0_OFFSET) % sizeof(spin_lock_t) != 0);
210+
return (uint) (lock - (spin_lock_t *) (SIO_BASE + SIO_SPINLOCK0_OFFSET));
210211
}
211212

212213
/*! \brief Acquire a spin lock without disabling interrupts (hence unsafe)

src/rp2_common/pico_standard_link/binary_info.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66

77
#if !PICO_NO_BINARY_INFO && !PICO_NO_PROGRAM_INFO
88
#include "pico/binary_info.h"
9+
10+
#if !PICO_NO_FLASH
911
#include "boot_stage2/config.h"
12+
#endif
1013

1114
// Note we put at most 4 pieces of binary info in the reset section because that's how much spare space we had
1215
// (picked the most common ones)... if there is a link failure because of .reset section overflow then move
@@ -89,4 +92,4 @@ bi_decl(bi_program_build_attribute("All optimization disabled"))
8992
#endif
9093
#endif
9194

92-
#endif
95+
#endif

0 commit comments

Comments
 (0)