I have 2 source files, one is C (cstart.c) and another is assembly (startup.S) using which i am trying to make an riscv executable.
Here is how my CMakeLists.txt Looks Like
=========================================================================
cmake_minimum_required(VERSION 3.22.1)
set(CMAKE_TRY_COMPILE_TARGET_TYPE “STATIC_LIBRARY”)
set(CMAKE_TOOLCHAIN_FILE “/workspaces/risc_v/riscv_toolchain.cmake”)
project(riscv_training_lab C ASM)
message(STATUS “CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}”)
message(STATUS “CMAKE_CROSSCOMPILING: ${CMAKE_CROSSCOMPILING}”)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cstart.o
COMMAND ${CMAKE_ASM_COMPILER} -c -g -O0 -ffreestanding -march=rv64i -mabi=lp64 -mcmodel=medany -o ${CMAKE_CURRENT_BINARY_DIR}/cstart.o ${CMAKE_CURRENT_SOURCE_DIR}/cstart.c
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cstart.c
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/startup.o
COMMAND ${CMAKE_ASM_COMPILER} -c -g -O0 -ffreestanding -march=rv64i -mabi=lp64 -mcmodel=medany -o ${CMAKE_CURRENT_BINARY_DIR}/startup.o ${CMAKE_CURRENT_SOURCE_DIR}/startup.S
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/startup.S
)
SET(OBJS
${CMAKE_CURRENT_BINARY_DIR}/cstart.o
${CMAKE_CURRENT_BINARY_DIR}/startup.o
)
add_executable(data_stack ${OBJS})
set_target_properties(data_stack PROPERTIES LINKER_LANGUAGE C)
=========================================================================
Here is how my toolchain file, which i am referring in above mentioned CMakeLists.txt looks like
========================================================================
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR riscv64)
set(RISCV_TOOLCHAIN_ROOT “/opt/riscv/freestanding/multilib”)
set(CMAKE_C_COMPILER_TARGET riscv64-unknown-elf)
set(CMAKE_CXX_COMPILER_TARGET riscv64-unknown-elf)
set(CMAKE_C_COMPILER ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-gcc)
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
set(CMAKE_CXX_COMPILER ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-g++)
set(CMAKE_STRIP ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-strip)
set(CMAKE_AR ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-gcc-ar)
set(CMAKE_RANLIB ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-ranlib)
set(CMAKE_ADDR2LINE ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-addr2line)
set(CMAKE_NM ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-nm)
set(CMAKE_LINKER ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-ld)
set(CMAKE_OBJCOPY ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-objcopy)
set(CMAKE_OBJDUMP ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-objdump)
set(CMAKE_READELF ${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-elf-readelf)
set(CMAKE_LINKER ${CMAKE_C_COMPILER})
set(CMAKE_C_LINK_EXECUTABLE ${CMAKE_C_COMPILER})
set(CMAKE_CROSSCOMPILING TRUE)
========================================================================
When i run cmake command, the CMake link.txt file so generated doe snot show any source files. Here is how the contents of link.txt looks like
=================================================
/opt/riscv/freestanding/multilib/bin/riscv64-unknown-elf-gcc
=================================================
I don’t see this issue when i dont use any toolchain. So if i use following CMakeLists.txt, i see link,txt showing source files
=========================================================================
cmake_minimum_required(VERSION 3.22.1)
project(riscv_training_lab C ASM)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cstart.o
COMMAND ${CMAKE_ASM_COMPILER} -c -g -O0 -ffreestanding -march=rv64i -mabi=lp64 -mcmodel=medany -o ${CMAKE_CURRENT_BINARY_DIR}/cstart.o ${CMAKE_CURRENT_SOURCE_DIR}/cstart.c
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cstart.c
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/startup.o
COMMAND ${CMAKE_ASM_COMPILER} -c -g -O0 -ffreestanding -march=rv64i -mabi=lp64 -mcmodel=medany -o ${CMAKE_CURRENT_BINARY_DIR}/startup.o ${CMAKE_CURRENT_SOURCE_DIR}/startup.S
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/startup.S
)
SET(OBJS
${CMAKE_CURRENT_BINARY_DIR}/cstart.o
${CMAKE_CURRENT_BINARY_DIR}/startup.o
)
add_executable(data_stack ${OBJS})
set_target_properties(data_stack PROPERTIES LINKER_LANGUAGE C)
=========================================================================
Now the contents of link.txt shown all input and output files
=================================================
/usr/bin/cc cstart.o startup.o -o data_stack
=================================================
Can you please suggest what wrong is happening when i am using riscv toolchain