Skip to content

Commit f5dcb90

Browse files
Submodule manager working!
1 parent 6597cab commit f5dcb90

File tree

2 files changed

+128
-95
lines changed

2 files changed

+128
-95
lines changed

targets/TARGET_STM/TARGET_STM32U0/STM32Cube_FW/CMakeLists.txt

Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -7,80 +7,80 @@ add_library(mbed-stm32u0cube-fw INTERFACE)
77

88
target_sources(mbed-stm32u0cube-fw
99
INTERFACE
10-
STM32U0xx_HAL_Driver/stm32u0xx_ll_lptim.c
11-
STM32U0xx_HAL_Driver/stm32u0xx_ll_lpuart.c
12-
STM32U0xx_HAL_Driver/stm32u0xx_ll_opamp.c
13-
STM32U0xx_HAL_Driver/stm32u0xx_ll_pwr.c
14-
STM32U0xx_HAL_Driver/stm32u0xx_ll_rng.c
15-
STM32U0xx_HAL_Driver/stm32u0xx_ll_rtc.c
16-
STM32U0xx_HAL_Driver/stm32u0xx_ll_spi.c
17-
STM32U0xx_HAL_Driver/stm32u0xx_ll_tim.c
18-
STM32U0xx_HAL_Driver/stm32u0xx_ll_usart.c
19-
STM32U0xx_HAL_Driver/stm32u0xx_ll_usb.c
20-
STM32U0xx_HAL_Driver/stm32u0xx_ll_utils.c
21-
STM32U0xx_HAL_Driver/stm32u0xx_hal.c
22-
STM32U0xx_HAL_Driver/stm32u0xx_hal_adc.c
23-
STM32U0xx_HAL_Driver/stm32u0xx_hal_adc_ex.c
24-
STM32U0xx_HAL_Driver/stm32u0xx_hal_comp.c
25-
STM32U0xx_HAL_Driver/stm32u0xx_hal_cortex.c
26-
STM32U0xx_HAL_Driver/stm32u0xx_hal_crc.c
27-
STM32U0xx_HAL_Driver/stm32u0xx_hal_crc_ex.c
28-
STM32U0xx_HAL_Driver/stm32u0xx_hal_cryp.c
29-
STM32U0xx_HAL_Driver/stm32u0xx_hal_cryp_ex.c
30-
STM32U0xx_HAL_Driver/stm32u0xx_hal_dac.c
31-
STM32U0xx_HAL_Driver/stm32u0xx_hal_dac_ex.c
32-
STM32U0xx_HAL_Driver/stm32u0xx_hal_dma.c
33-
STM32U0xx_HAL_Driver/stm32u0xx_hal_dma_ex.c
34-
STM32U0xx_HAL_Driver/stm32u0xx_hal_exti.c
35-
STM32U0xx_HAL_Driver/stm32u0xx_hal_flash.c
36-
STM32U0xx_HAL_Driver/stm32u0xx_hal_flash_ex.c
37-
STM32U0xx_HAL_Driver/stm32u0xx_hal_gpio.c
38-
STM32U0xx_HAL_Driver/stm32u0xx_hal_i2c.c
39-
STM32U0xx_HAL_Driver/stm32u0xx_hal_i2c_ex.c
40-
STM32U0xx_HAL_Driver/stm32u0xx_hal_irda.c
41-
STM32U0xx_HAL_Driver/stm32u0xx_hal_iwdg.c
42-
STM32U0xx_HAL_Driver/stm32u0xx_hal_lcd.c
43-
STM32U0xx_HAL_Driver/stm32u0xx_hal_lptim.c
44-
STM32U0xx_HAL_Driver/stm32u0xx_hal_opamp.c
45-
STM32U0xx_HAL_Driver/stm32u0xx_hal_opamp_ex.c
46-
STM32U0xx_HAL_Driver/stm32u0xx_hal_pcd.c
47-
STM32U0xx_HAL_Driver/stm32u0xx_hal_pcd_ex.c
48-
STM32U0xx_HAL_Driver/stm32u0xx_hal_pwr.c
49-
STM32U0xx_HAL_Driver/stm32u0xx_hal_pwr_ex.c
50-
STM32U0xx_HAL_Driver/stm32u0xx_hal_rcc.c
51-
STM32U0xx_HAL_Driver/stm32u0xx_hal_rcc_ex.c
52-
STM32U0xx_HAL_Driver/stm32u0xx_hal_rng.c
53-
STM32U0xx_HAL_Driver/stm32u0xx_hal_rng_ex.c
54-
STM32U0xx_HAL_Driver/stm32u0xx_hal_rtc.c
55-
STM32U0xx_HAL_Driver/stm32u0xx_hal_rtc_ex.c
56-
STM32U0xx_HAL_Driver/stm32u0xx_hal_smartcard.c
57-
STM32U0xx_HAL_Driver/stm32u0xx_hal_smartcard_ex.c
58-
STM32U0xx_HAL_Driver/stm32u0xx_hal_spi.c
59-
STM32U0xx_HAL_Driver/stm32u0xx_hal_spi_ex.c
60-
STM32U0xx_HAL_Driver/stm32u0xx_hal_tim.c
61-
STM32U0xx_HAL_Driver/stm32u0xx_hal_tim_ex.c
62-
STM32U0xx_HAL_Driver/stm32u0xx_hal_tsc.c
63-
STM32U0xx_HAL_Driver/stm32u0xx_hal_uart.c
64-
STM32U0xx_HAL_Driver/stm32u0xx_hal_uart_ex.c
65-
STM32U0xx_HAL_Driver/stm32u0xx_hal_usart.c
66-
STM32U0xx_HAL_Driver/stm32u0xx_hal_usart_ex.c
67-
STM32U0xx_HAL_Driver/stm32u0xx_hal_wwdg.c
68-
STM32U0xx_HAL_Driver/stm32u0xx_ll_adc.c
69-
STM32U0xx_HAL_Driver/stm32u0xx_ll_comp.c
70-
STM32U0xx_HAL_Driver/stm32u0xx_ll_crc.c
71-
STM32U0xx_HAL_Driver/stm32u0xx_ll_crs.c
72-
STM32U0xx_HAL_Driver/stm32u0xx_ll_dac.c
73-
STM32U0xx_HAL_Driver/stm32u0xx_ll_dma.c
74-
STM32U0xx_HAL_Driver/stm32u0xx_ll_exti.c
75-
STM32U0xx_HAL_Driver/stm32u0xx_ll_gpio.c
76-
STM32U0xx_HAL_Driver/stm32u0xx_ll_i2c.c
10+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_lptim.c
11+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_lpuart.c
12+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_opamp.c
13+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_pwr.c
14+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_rng.c
15+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_rtc.c
16+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_spi.c
17+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_tim.c
18+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_usart.c
19+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_usb.c
20+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_utils.c
21+
stm32u0xx-hal-driver/Src/stm32u0xx_hal.c
22+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_adc.c
23+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_adc_ex.c
24+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_comp.c
25+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_cortex.c
26+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_crc.c
27+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_crc_ex.c
28+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_cryp.c
29+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_cryp_ex.c
30+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_dac.c
31+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_dac_ex.c
32+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_dma.c
33+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_dma_ex.c
34+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_exti.c
35+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_flash.c
36+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_flash_ex.c
37+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_gpio.c
38+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_i2c.c
39+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_i2c_ex.c
40+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_irda.c
41+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_iwdg.c
42+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_lcd.c
43+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_lptim.c
44+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_opamp.c
45+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_opamp_ex.c
46+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_pcd.c
47+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_pcd_ex.c
48+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_pwr.c
49+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_pwr_ex.c
50+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_rcc.c
51+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_rcc_ex.c
52+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_rng.c
53+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_rng_ex.c
54+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_rtc.c
55+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_rtc_ex.c
56+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_smartcard.c
57+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_smartcard_ex.c
58+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_spi.c
59+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_spi_ex.c
60+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_tim.c
61+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_tim_ex.c
62+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_tsc.c
63+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_uart.c
64+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_uart_ex.c
65+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_usart.c
66+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_usart_ex.c
67+
stm32u0xx-hal-driver/Src/stm32u0xx_hal_wwdg.c
68+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_adc.c
69+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_comp.c
70+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_crc.c
71+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_crs.c
72+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_dac.c
73+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_dma.c
74+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_exti.c
75+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_gpio.c
76+
stm32u0xx-hal-driver/Src/stm32u0xx_ll_i2c.c
7777
system_stm32u0xx.c
7878
)
7979

8080
target_include_directories(mbed-stm32u0cube-fw
8181
INTERFACE
8282
.
8383
CMSIS
84-
STM32U0xx_HAL_Driver
85-
STM32U0xx_HAL_Driver/Legacy
84+
stm32u0xx-hal-driver/Inc
85+
stm32u0xx-hal-driver/Inc/Legacy
8686
)

tools/cmake/mbed_submodule_management.cmake

Lines changed: 59 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ option(MBED_USE_SHALLOW_SUBMODULES "If true, clone submodules as shallow. This r
2424
# as long as it does not have any local changes.
2525
#
2626
function(mbed_setup_submodule SUBMODULE_PATH)
27-
2827
# Parse args
2928
cmake_parse_arguments(PARSE_ARGV 1 ARGS "" "CHECK_FILE;IF_LABEL" "")
3029
if("${ARGS_CHECK_FILE}" STREQUAL "")
@@ -40,7 +39,7 @@ function(mbed_setup_submodule SUBMODULE_PATH)
4039

4140
# Is the submodule cloned?
4241
set(FULL_SUBMODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/${SUBMODULE_PATH})
43-
file(RELATIVE_PATH SOURCE_DIR_REL_SUBMODULE_PATH ${CMAKE_SOURCE_DIR} FULL_SUBMODULE_PATH)
42+
file(RELATIVE_PATH SOURCE_DIR_REL_SUBMODULE_PATH ${CMAKE_SOURCE_DIR} ${FULL_SUBMODULE_PATH})
4443
if(EXISTS "${FULL_SUBMODULE_PATH}/${ARGS_CHECK_FILE}")
4544
set(SUBMODULE_CLONED TRUE)
4645
else()
@@ -71,32 +70,46 @@ git submodule update --init ${SUBMODULE_PATH}")
7170

7271
message(STATUS "Cloning git submodule ${SOURCE_DIR_REL_SUBMODULE_PATH}...")
7372
execute_process(
74-
COMMAND Git::Git submodule update --init ${SHALLOW_ARGS} ${SUBMODULE_PATH}
73+
COMMAND ${GIT_EXECUTABLE} submodule update --init ${SHALLOW_ARGS} ${SUBMODULE_PATH}
7574
COMMAND_ERROR_IS_FATAL ANY
76-
COMMAND_ECHO STDOUT
7775
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
7876
)
7977
endif()
8078

79+
# To get the current commit that the submodule is actually on, we need this command.
80+
# See https://stackoverflow.com/a/54238999
81+
execute_process(
82+
COMMAND ${GIT_EXECUTABLE} submodule status ${SUBMODULE_PATH}
83+
COMMAND_ERROR_IS_FATAL ANY
84+
OUTPUT_VARIABLE SUBMODULE_GIT_SUBMODULE_STATUS
85+
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
86+
)
87+
if(NOT "${SUBMODULE_GIT_SUBMODULE_STATUS}" MATCHES "^[ +]([0-9a-z]+)")
88+
message(WARNING "Unable to parse output of 'git submodule status ${SOURCE_DIR_REL_SUBMODULE_PATH}': \"${SUBMODULE_GIT_SUBMODULE_STATUS}\". Not touching this submodule.")
89+
return()
90+
endif()
91+
string(SUBSTRING ${CMAKE_MATCH_1} 0 8 SUBMODULE_CURRENT_HASH)
92+
8193
# Check whether the submodule is on the right commit
8294
execute_process(
83-
COMMAND Git::Git status --porcelain=2 ${SUBMODULE_PATH}
95+
COMMAND ${GIT_EXECUTABLE} status --porcelain=2 ${SUBMODULE_PATH}
8496
COMMAND_ERROR_IS_FATAL ANY
8597
OUTPUT_VARIABLE SUBMODULE_GIT_STATUS
8698
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
8799
)
100+
set(SUBMODULE_COMMIT_CHANGED FALSE)
101+
set(SUBMODULE_TRACKED_CHANGES FALSE)
102+
set(SUBMODULE_UNTRACKED_CHANGES FALSE)
88103
if("${SUBMODULE_GIT_STATUS}" STREQUAL "")
89104
# Submodule is up to date, OK
105+
set(SUBMODULE_SUPERPROJECT_POINTER_HASH ${SUBMODULE_CURRENT_HASH})
90106
else()
91107
# Some sort of change detected. Check what kind of change it is.
92108
# Format documented here: https://git-scm.com/docs/git-status#_changed_tracked_entries
93109
if(NOT "${SUBMODULE_GIT_STATUS}" MATCHES "^1 .M S(.)(.)(.) [0-9]+ [0-9]+ [0-9]+ ([0-9a-z]+)")
94110
message(WARNING "Unable to parse output of 'git status --porcelain=2 ${SOURCE_DIR_REL_SUBMODULE_PATH}': \"${SUBMODULE_GIT_STATUS}\". Not touching this submodule.")
95111
return()
96112
endif()
97-
set(SUBMODULE_COMMIT_CHANGED FALSE)
98-
set(SUBMODULE_TRACKED_CHANGES FALSE)
99-
set(SUBMODULE_UNTRACKED_CHANGES FALSE)
100113
if(${CMAKE_MATCH_1} STREQUAL "C")
101114
set(SUBMODULE_COMMIT_CHANGED TRUE)
102115
endif()
@@ -106,36 +119,56 @@ git submodule update --init ${SUBMODULE_PATH}")
106119
if(${CMAKE_MATCH_3} STREQUAL "U")
107120
set(SUBMODULE_UNTRACKED_CHANGES TRUE)
108121
endif()
109-
string(SUBSTRING CMAKE_MATCH_4 0 8 SUBMODULE_SUPERPROJECT_POINTER_HASH)
110-
111-
# To get the current commit that the submodule is actually on, we need a slightly different command.
112-
# See https://stackoverflow.com/a/54238999
113-
execute_process(
114-
COMMAND Git::Git submodule status ${SUBMODULE_PATH}
115-
COMMAND_ERROR_IS_FATAL ANY
116-
OUTPUT_VARIABLE SUBMODULE_GIT_SUBMODULE_STATUS
117-
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
118-
)
119-
if(NOT "${SUBMODULE_GIT_SUBMODULE_STATUS}" MATCHES "+([0-9a-z]+)")
120-
message(WARNING "Unable to parse output of 'git submodule status ${SOURCE_DIR_REL_SUBMODULE_PATH}': \"${SUBMODULE_GIT_SUBMODULE_STATUS}\". Not touching this submodule.")
121-
return()
122-
endif()
123-
string(SUBSTRING CMAKE_MATCH_1 0 8 SUBMODULE_CURRENT_HASH)
122+
string(SUBSTRING ${CMAKE_MATCH_4} 0 8 SUBMODULE_SUPERPROJECT_POINTER_HASH)
124123

125124
if(SUBMODULE_COMMIT_CHANGED)
126125
if(SUBMODULE_TRACKED_CHANGES OR SUBMODULE_UNTRACKED_CHANGES)
127126
message(WARNING "Submodule ${SOURCE_DIR_REL_SUBMODULE_PATH} is on the wrong commit (should be ${SUBMODULE_SUPERPROJECT_POINTER_HASH}, is ${SUBMODULE_CURRENT_HASH}, but also has local modifications. Not touching this submodule. You may wish to commit your changes and/or update the commit of this submodule in git.")
128127
return()
129128
endif()
130129

131-
message("Submodule ${SOURCE_DIR_REL_SUBMODULE_PATH} is on the wrong commit (should be ${SUBMODULE_SUPERPROJECT_POINTER_HASH}, is ${SUBMODULE_CURRENT_HASH}). This is expected if the super-project commit changed. Updating it to the correct one.")
130+
message(STATUS "Submodule ${SOURCE_DIR_REL_SUBMODULE_PATH} is on the wrong commit (should be ${SUBMODULE_SUPERPROJECT_POINTER_HASH}, is ${SUBMODULE_CURRENT_HASH}).")
131+
message(STATUS "This is expected if the super-project commit changed. Updating the commit to the correct one.")
132132
execute_process(
133-
COMMAND Git::Git submodule update ${SUBMODULE_PATH}
133+
COMMAND ${GIT_EXECUTABLE} submodule update ${SUBMODULE_PATH}
134134
COMMAND_ERROR_IS_FATAL ANY
135-
COMMAND_ECHO STDOUT
136135
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
137136
)
138137
endif()
139138
endif()
140139

140+
# Now process shallow vs deepness.
141+
# Is the submodule currently shallow?
142+
# This command can tell us -- it conveniently returns "true" or "false"
143+
# https://stackoverflow.com/a/37533086
144+
execute_process(
145+
COMMAND ${GIT_EXECUTABLE} rev-parse --is-shallow-repository
146+
COMMAND_ERROR_IS_FATAL ANY
147+
OUTPUT_VARIABLE SUBMODULE_IS_SHALLOW
148+
WORKING_DIRECTORY ${FULL_SUBMODULE_PATH}
149+
)
150+
151+
# If the submodule is shallow and we don't want it to be, unshallow it.
152+
# Note that if it is NOT shallow and should be, we do nothing. This is likely because the user or another
153+
# CMake build configuration already unshallowed it.
154+
155+
# Note: Oddly, if(SUBMODULE_IS_SHALLOW) evaluates to true when SUBMODULE_IS_SHALLOW contains the string "false".
156+
# I think this is a bug in CMake regarding the result of execute_process().
157+
# Expanding it into a string makes things work.
158+
if(${SUBMODULE_IS_SHALLOW} AND NOT MBED_USE_SHALLOW_SUBMODULES)
159+
# Now unshallow the repo
160+
message(STATUS "Submodule ${SOURCE_DIR_REL_SUBMODULE_PATH} will now be unshallowed.")
161+
162+
# Commands from here: https://stackoverflow.com/a/17937889/7083698
163+
execute_process(
164+
COMMAND ${GIT_EXECUTABLE} fetch --unshallow
165+
COMMAND ${GIT_EXECUTABLE} config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
166+
COMMAND ${GIT_EXECUTABLE} fetch origin
167+
COMMAND_ERROR_IS_FATAL ANY
168+
COMMAND_ECHO STDOUT
169+
OUTPUT_VARIABLE SUBMODULE_IS_SHALLOW
170+
WORKING_DIRECTORY ${FULL_SUBMODULE_PATH}
171+
)
172+
endif()
173+
141174
endfunction(mbed_setup_submodule)

0 commit comments

Comments
 (0)