diff --git a/tools/buildmgr/cbuildgen/config/AC6.6.18.0.cmake b/tools/buildmgr/cbuildgen/config/AC6.6.18.0.cmake index d175be6de..612131d80 100644 --- a/tools/buildmgr/cbuildgen/config/AC6.6.18.0.cmake +++ b/tools/buildmgr/cbuildgen/config/AC6.6.18.0.cmake @@ -13,6 +13,8 @@ set(AS "armasm") set(CC "armclang") set(CXX "armclang") set(CPP "armclang") +set(LD "armlink") +set(AR "armar") set(OC "fromelf") if(DEFINED REGISTERED_TOOLCHAIN_ROOT) @@ -28,6 +30,8 @@ if(DEFINED TOOLCHAIN_ROOT AND NOT TOOLCHAIN_ROOT STREQUAL "") set(CC ${TOOLCHAIN_ROOT}/${CC}${EXT}) set(CXX ${TOOLCHAIN_ROOT}/${CXX}${EXT}) set(CPP ${TOOLCHAIN_ROOT}/${CPP}${EXT}) + set(LD ${TOOLCHAIN_ROOT}/${LD}${EXT}) + set(AR ${TOOLCHAIN_ROOT}/${AR}${EXT}) set(OC ${TOOLCHAIN_ROOT}/${OC}${EXT}) endif() @@ -626,6 +630,8 @@ set(CMAKE_AS_ARM_COMPILER "${CC}") set(CMAKE_AS_GNU_COMPILER "${CC}") set(CMAKE_C_COMPILER "${CC}") set(CMAKE_CXX_COMPILER "${CXX}") +set(CMAKE_LINKER "${LD}") +set(CMAKE_AR "${AR}") set(CMAKE_OBJCOPY "${OC}") set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CMakeASM") diff --git a/tools/buildmgr/cbuildgen/config/CMakeASM/CMakeDetermineAS_ARMCompiler.cmake b/tools/buildmgr/cbuildgen/config/CMakeASM/CMakeDetermineAS_ARMCompiler.cmake index edc061d05..a8b6f70fb 100644 --- a/tools/buildmgr/cbuildgen/config/CMakeASM/CMakeDetermineAS_ARMCompiler.cmake +++ b/tools/buildmgr/cbuildgen/config/CMakeASM/CMakeDetermineAS_ARMCompiler.cmake @@ -1,2 +1,4 @@ set(CMAKE_AS_ARM_COMPILER_ENV_VAR "AS_ARM") -configure_file(${CMAKE_MODULE_PATH}/CMakeAS_ARMCompiler.cmake.in ${CMAKE_PLATFORM_INFO_DIR}/CMakeAS_ARMCompiler.cmake) \ No newline at end of file +configure_file(${CMAKE_MODULE_PATH}/CMakeAS_ARMCompiler.cmake.in ${CMAKE_PLATFORM_INFO_DIR}/CMakeAS_ARMCompiler.cmake) +include(${CMAKE_ROOT}/Modules/Compiler/ARMClang.cmake) +__compiler_armclang(AS_ARM) diff --git a/tools/buildmgr/test/integrationtests/src/CBuildAC6Tests.cpp b/tools/buildmgr/test/integrationtests/src/CBuildAC6Tests.cpp index 0e0316857..8b58ac08f 100644 --- a/tools/buildmgr/test/integrationtests/src/CBuildAC6Tests.cpp +++ b/tools/buildmgr/test/integrationtests/src/CBuildAC6Tests.cpp @@ -92,6 +92,17 @@ TEST_F(CBuildAC6Tests, Asm) { CheckCMakeLists (param); } +// Verify and build project with single legacy assembly file +TEST_F(CBuildAC6Tests, ArmAsm) { + TestParam param = { "AC6/ArmAsm", "Target" }; + + RunCBuildScriptClean(param); + RunCBuildScript(param); + CheckCMakeLists(param); + const string outputFile = examples_folder + "/" + param.name + "/OutDir/Blinky.axf"; + ASSERT_TRUE(fs::exists(outputFile)); +} + // Validate project compilation having minimal configurations TEST_F(CBuildAC6Tests, Minimal) { TestParam param = { "AC6/Minimal", "MyProject" }; diff --git a/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/ArmSyntax.s b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/ArmSyntax.s new file mode 100644 index 000000000..98f3cccb6 --- /dev/null +++ b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/ArmSyntax.s @@ -0,0 +1,8 @@ + + AREA DATA + + IF :LNOT::DEF:_RTE_ + INFO 1, "_RTE_ is not defined!" + ENDIF + + END diff --git a/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/CMakeLists.txt.ref b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/CMakeLists.txt.ref new file mode 100644 index 000000000..8ee83d36c --- /dev/null +++ b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/CMakeLists.txt.ref @@ -0,0 +1,70 @@ +# CMSIS Build CMakeLists generated on 2023-08-29T15:26:15 + +cmake_minimum_required(VERSION 3.22) + +# Target options + +set(TARGET Blinky) +set(CPU Cortex-M3) +set(PRJ_DIR "C:/sandbox/devtools/build/TestOutput/TestData/Examples/AC6/ArmAsm") +set(OUT_DIR "C:/sandbox/devtools/build/TestOutput/TestData/Examples/AC6/ArmAsm/OutDir") +set(INT_DIR "C:/sandbox/devtools/build/TestOutput/TestData/Examples/AC6/ArmAsm/IntDir") +set(FPU NO_FPU) +set(DSP NO_DSP) +set(TZ NO_TZ) +set(SECURE Non-secure) +set(MVE NO_MVE) +set(BYTE_ORDER Little-endian) +set(AS_FLAGS_GLOBAL "-masm=auto") +set(LD_SCRIPT "C:/sandbox/devtools/build/TestOutput/TestData/Examples/AC6/ArmAsm/LinkerScript.sct") + +set(DEFINES + ARMCM3 + _RTE_ +) + +set(INC_PATHS + "C:/sandbox/devtools/build/TestOutput/TestData/Examples/AC6/ArmAsm/RTE/_Target_1" + "C:/Users/Test/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/CMSIS/Core/Include" + "C:/Users/Test/AppData/Local/Arm/Packs/ARM/CMSIS/5.9.0/Device/ARM/ARMCM3/Include" +) + +set(AS_ARM_SRC_FILES + "C:/sandbox/devtools/build/TestOutput/TestData/Examples/AC6/ArmAsm/ArmSyntax.s" +) + +# Toolchain config map + +set(TOOLCHAIN_VERSION_MIN "6.0.0") +set(TOOLCHAIN_VERSION_MAX "6.99.99") +include ("C:/sandbox/cbuild/etc/AC6.6.18.0.cmake") +include ("C:/sandbox/cbuild/etc/CMSIS-Build-Utils.cmake") + +# Setup project + +project(${TARGET} LANGUAGES AS_ARM) + +cbuild_get_running_toolchain(TOOLCHAIN_ROOT TOOLCHAIN_VERSION AS_ARM) + +# Global Flags + +set(CMAKE_AS_ARM_FLAGS "${AS_ARM_CPU} ${AS_ARM_BYTE_ORDER} ${AS_ARM_DEFINES} ${AS_ARM_FLAGS} ${AS_FLAGS_GLOBAL}") +set(CMAKE_C_LINK_FLAGS "${LD_CPU} ${_LS}\"${LD_SCRIPT}\" ${LD_SECURE} ${LD_FLAGS}") + +# Local Flags + +foreach(SRC ${AS_ARM_SRC_FILES}) + set_source_files_properties(${SRC} PROPERTIES LANGUAGE AS_ARM) +endforeach() + +# Compilation Database + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +add_custom_target(database COMMAND ${CMAKE_COMMAND} -E copy_if_different "${INT_DIR}/compile_commands.json" "${OUT_DIR}") + +# Setup Target + +add_executable(${TARGET} ${AS_ARM_SRC_FILES}) +set_target_properties(${TARGET} PROPERTIES PREFIX "" SUFFIX ".axf" OUTPUT_NAME "Blinky") +set_target_properties(${TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUT_DIR} LINK_DEPENDS ${LD_SCRIPT}) +target_include_directories(${TARGET} PUBLIC ${INC_PATHS}) diff --git a/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/LinkerScript.sct b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/LinkerScript.sct new file mode 100644 index 000000000..9f6ac06a3 --- /dev/null +++ b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/LinkerScript.sct @@ -0,0 +1,9 @@ + +LR_IROM1 0x08000000 0x00080000 { ; load region size_region + ER_IROM1 0x08000000 0x00080000 { ; load address = execution address + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00001000 { ; RW data + .ANY (+RW +ZI) + } +} diff --git a/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/RTE/_Target_1/RTE_Components.h b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/RTE/_Target_1/RTE_Components.h new file mode 100644 index 000000000..24840404a --- /dev/null +++ b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/RTE/_Target_1/RTE_Components.h @@ -0,0 +1,20 @@ +/* + * CBUILDGEN generated file: DO NOT EDIT! + * Generated by: cbuildgen version 2.1.0-dev1 + * + * Project: 'Target' + * Target: 'Target 1' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "ARMCM3.h" + + + +#endif /* RTE_COMPONENTS_H */ diff --git a/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/Target.cprj b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/Target.cprj new file mode 100644 index 000000000..7ae5d4539 --- /dev/null +++ b/tools/buildmgr/test/testinput/Examples/AC6/ArmAsm/Target.cprj @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<cprj schemaVersion="2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd"> + + <created timestamp="2020-09-04T10:07:24" tool="uVision V5.31.0.0"/> + + <packages> + <package name="CMSIS" vendor="ARM"/> + <package name="ARM_Compiler" vendor="Keil"/> + </packages> + + <compilers> + <compiler name="AC6" version="6.0.0:6.99.99"/> + </compilers> + + <target Ddsp="NO_DSP" Dendian="Little-endian" Dfpu="NO_FPU" Dmve="NO_MVE" Dname="ARMCM3" Dsecure="Non-secure" Dtz="NO_TZ" Dvendor="ARM:82"> + <output elf="Blinky.axf" name="Blinky" type="exe"/> + <ldflags compiler="AC6" file="./LinkerScript.sct"/> + <asflags add="-masm=auto" compiler="AC6"/> + </target> + + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM"/> + </components> + + <files> + <group name="Source Files"> + <file category="sourceAsm" name="./ArmSyntax.s"> + </file> + </group> + </files> + +</cprj>