ADM/GW/CMakeLists.txt
3minbe 85257c3f29 ver 26.3.3.2
- Drive_Mode.c 수정
  : bool 변수 삭제
- Drive_Mode.c/RcRequestCheck 함수 수정
  : RC ACU 동시 요청 시 비상정지
  : 마지막 요청을 RC_ModeReq에 저장하도록 수정
- Drive_Mode.c/ExecuteEmergencyMode 함수 수정
  : VCU_Emergency_Flag 조건 추가
- VSCode에서 빌드 가능하도록 수정
  : GW/Debug_STANDALONE 생성
2026-03-03 20:24:50 +09:00

182 lines
5.1 KiB
CMake

cmake_minimum_required(VERSION 3.20)
project(GW LANGUAGES C ASM)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
set(GW_TARGET GW.elf)
set(GW_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/Project_Settings/Linker_Files/linker_flash.ld")
if(NOT EXISTS "${GW_LINKER_SCRIPT}")
message(FATAL_ERROR "Linker script not found: ${GW_LINKER_SCRIPT}")
endif()
if(NOT DEFINED ENV{S32_SDK_PATH})
message(FATAL_ERROR "S32_SDK_PATH is not set. It must point to the PlatformSDK_S32K3_2021_03 directory.")
endif()
file(TO_CMAKE_PATH "$ENV{S32_SDK_PATH}" S32_SDK_PATH)
set(S32_RTD_ROOT "${S32_SDK_PATH}/SW32K3_RTD_4_4_0_9_0_D2103")
if(CMAKE_SYSROOT)
set(GW_SYSROOT_FLAG "--sysroot=${CMAKE_SYSROOT}")
else()
set(GW_SYSROOT_FLAG "")
endif()
foreach(required_sdk_dir
"${S32_RTD_ROOT}/Base_TS_T40D34M9I0R0/header"
"${S32_RTD_ROOT}/Base_TS_T40D34M9I0R0/include"
"${S32_RTD_ROOT}/Platform_TS_T40D34M9I0R0/include"
"${S32_RTD_ROOT}/Platform_TS_T40D34M9I0R0/startup/include")
if(NOT EXISTS "${required_sdk_dir}")
message(FATAL_ERROR "Required SDK include directory not found: ${required_sdk_dir}")
endif()
endforeach()
set(GW_SOURCE_ROOTS
"${CMAKE_CURRENT_SOURCE_DIR}/Project_Settings/Startup_Code"
"${CMAKE_CURRENT_SOURCE_DIR}/RTD/src"
"${CMAKE_CURRENT_SOURCE_DIR}/board"
"${CMAKE_CURRENT_SOURCE_DIR}/generate/include"
"${CMAKE_CURRENT_SOURCE_DIR}/generate/src"
"${CMAKE_CURRENT_SOURCE_DIR}/src"
)
set(GW_DIRECT_INCLUDE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}"
)
set(GW_RECURSIVE_INCLUDE_ROOTS
"${CMAKE_CURRENT_SOURCE_DIR}/RTD/include"
"${CMAKE_CURRENT_SOURCE_DIR}/board"
"${CMAKE_CURRENT_SOURCE_DIR}/generate/include"
"${CMAKE_CURRENT_SOURCE_DIR}/generate/src"
"${CMAKE_CURRENT_SOURCE_DIR}/src"
"${CMAKE_CURRENT_SOURCE_DIR}/src/HAL/watchdog_hal/inc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/uds"
"${S32_RTD_ROOT}/Base_TS_T40D34M9I0R0/header"
"${S32_RTD_ROOT}/Base_TS_T40D34M9I0R0/include"
"${S32_RTD_ROOT}/Platform_TS_T40D34M9I0R0/include"
"${S32_RTD_ROOT}/Platform_TS_T40D34M9I0R0/startup/include"
)
function(gw_collect_directories out_var)
set(result "")
foreach(root IN LISTS ARGN)
if(EXISTS "${root}")
list(APPEND result "${root}")
file(GLOB_RECURSE children LIST_DIRECTORIES true CONFIGURE_DEPENDS "${root}/*")
foreach(child IN LISTS children)
if(IS_DIRECTORY "${child}")
list(APPEND result "${child}")
endif()
endforeach()
endif()
endforeach()
list(REMOVE_DUPLICATES result)
set(${out_var} "${result}" PARENT_SCOPE)
endfunction()
gw_collect_directories(GW_INCLUDE_DIRS ${GW_RECURSIVE_INCLUDE_ROOTS})
list(APPEND GW_INCLUDE_DIRS ${GW_DIRECT_INCLUDE_DIRS})
list(REMOVE_DUPLICATES GW_INCLUDE_DIRS)
set(GW_SOURCES "")
foreach(root IN LISTS GW_SOURCE_ROOTS)
file(GLOB_RECURSE root_sources CONFIGURE_DEPENDS
"${root}/*.c"
"${root}/*.s"
"${root}/*.S")
list(APPEND GW_SOURCES ${root_sources})
endforeach()
list(REMOVE_DUPLICATES GW_SOURCES)
add_executable(${GW_TARGET} ${GW_SOURCES})
target_include_directories(${GW_TARGET} PRIVATE ${GW_INCLUDE_DIRS})
target_compile_definitions(${GW_TARGET} PRIVATE
D_CACHE_ENABLE
I_CACHE_ENABLE
GCC
S32K3XX
CPU_S32K344
)
target_compile_options(${GW_TARGET} PRIVATE
$<$<COMPILE_LANGUAGE:ASM>:-x$<SEMICOLON>assembler-with-cpp>
$<$<COMPILE_LANGUAGE:C>:-std=c99>
-Os
-fshort-enums
-funsigned-char
-fstack-usage
-fdump-ipa-all
-fomit-frame-pointer
-fno-zero-initialized-in-bss
-ggdb3
-pedantic
-Wall
-Wextra
-fmessage-length=0
-funsigned-bitfields
-fno-common
-Wunused
-Wstrict-prototypes
-Wsign-compare
-Werror=implicit-function-declaration
-Wundef
-mcpu=cortex-m7
-mthumb
-mlittle-endian
-mfloat-abi=soft
-specs=nano.specs
-specs=nosys.specs
${GW_SYSROOT_FLAG}
)
target_link_options(${GW_TARGET} PRIVATE
-nostartfiles
--entry=Reset_Handler
-Wl,-Map,${CMAKE_CURRENT_BINARY_DIR}/GW.map
-Wl,--gc-sections
-Wl,-u,_printf_float
-Wl,-u,_scanf_float
-n
-mcpu=cortex-m7
-mthumb
-mlittle-endian
-mfloat-abi=soft
-specs=nano.specs
-specs=nosys.specs
${GW_SYSROOT_FLAG}
-T${GW_LINKER_SCRIPT}
)
target_link_libraries(${GW_TARGET} PRIVATE c m gcc)
set_property(TARGET ${GW_TARGET} PROPERTY LINK_DEPENDS "${GW_LINKER_SCRIPT}")
if(CMAKE_OBJCOPY)
set(ARM_OBJCOPY "${CMAKE_OBJCOPY}")
else()
find_program(ARM_OBJCOPY arm-none-eabi-objcopy REQUIRED)
endif()
if(CMAKE_SIZE)
set(ARM_SIZE "${CMAKE_SIZE}")
else()
find_program(ARM_SIZE arm-none-eabi-size REQUIRED)
endif()
add_custom_command(
TARGET ${GW_TARGET}
POST_BUILD
COMMAND ${ARM_OBJCOPY} -O srec $<TARGET_FILE:${GW_TARGET}> "${CMAKE_CURRENT_BINARY_DIR}/GW.srec"
COMMAND ${ARM_SIZE} --format=berkeley $<TARGET_FILE:${GW_TARGET}>
BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/GW.srec"
COMMENT "Generating SREC and size report"
)