Skip to content

Commit

Permalink
Merge pull request #15 from kendryte/develop
Browse files Browse the repository at this point in the history
Release 0.3.0
  • Loading branch information
sunnycase authored Sep 30, 2018
2 parents 8ee1eee + e3cff45 commit b071dc0
Show file tree
Hide file tree
Showing 55 changed files with 1,576 additions and 3,821 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ If you want to start a new project, for instance, `hello_world`, you only need t

```shell
mkdir build && cd build
cmake .. -DPROJ=<ProjectName> -DTOOLCHAIN=/opt/riscv-toolchain/bin && make
cmake .. -DPROJ=<ProjectName> -DTOOLCHAIN=/opt/riscv-toolchain/bin/ && make
```

You will get 2 key files, `hello_world` and `hello_world.bin`.
Expand All @@ -21,3 +21,5 @@ You will get 2 key files, `hello_world` and `hello_world.bin`.
2. If you want to flash it in UOG, using `hello_world.bin`, then using flash-tool(s) burn <ProjectName>.bin to your flash.

This is very important, don't make a mistake in files.

*If you don't like place code inside SDK, see `CMakeLists.txt.example.cmake`*
1 change: 1 addition & 0 deletions cmake/dump-config.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ message(" CMAKE_C_COMPILER=${CMAKE_C_COMPILER}")
message(" CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}")
message(" CMAKE_LINKER=${CMAKE_LINKER}")
message(" CMAKE_OBJCOPY=${CMAKE_OBJCOPY}")
message(" CMAKE_OBJDUMP=${CMAKE_OBJDUMP}")
message(" CMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}")
message("")
message(" CMAKE_C_FLAGS=${CMAKE_C_FLAGS}")
Expand Down
24 changes: 3 additions & 21 deletions cmake/executable.cmake
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@

message("CMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}")
message("_TC_MAKE=${_TC_MAKE}")
if (_TC_MAKE)
global_set(CMAKE_MAKE_PROGRAM "${_TC_MAKE}")
endif()
include(${CMAKE_CURRENT_LIST_DIR}/reset.cmake)

if (NOT BUILDING_SDK)
if(EXISTS ${SDK_ROOT}/libkendryte.a)
### compiled sdk
header_directories(${SDK_ROOT}/include)
add_library(kendryte STATIC IMPORTED)
set_property(TARGET kendryte PROPERTY IMPORTED_LOCATION ${SDK_ROOT}/libkendryte.a)
else()
### source code sdk
header_directories(${SDK_ROOT}/lib)
add_subdirectory(${SDK_ROOT}/lib SDK)
endif()
Expand All @@ -21,24 +18,9 @@ removeDuplicateSubstring(${CMAKE_CXX_FLAGS} CMAKE_CXX_FLAGS)

message("SOURCE_FILES=${SOURCE_FILES}")
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
# add_dependencies(${PROJECT_NAME} kendryte) # TODO: third_party
# target_link_libraries(${PROJECT_NAME} kendryte) # TODO: third_party
# link_directories(${CMAKE_BINARY_DIR})

set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)

EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crt0.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRT0_OBJ)
EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crtbegin.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRTBEGIN_OBJ)
EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crtend.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRTEND_OBJ)
EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crti.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRTI_OBJ)
EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crtn.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRTN_OBJ)

set(CMAKE_C_LINK_EXECUTABLE
"<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> \"${CRTI_OBJ}\" \"${CRTBEGIN_OBJ}\" <OBJECTS> \"${CRTEND_OBJ}\" \"${CRTN_OBJ}\" -o <TARGET> <LINK_LIBRARIES>")

set(CMAKE_CXX_LINK_EXECUTABLE
"<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> \"${CRTI_OBJ}\" \"${CRTBEGIN_OBJ}\" <OBJECTS> \"${CRTEND_OBJ}\" \"${CRTN_OBJ}\" -o <TARGET> <LINK_LIBRARIES>")

target_link_libraries(${PROJECT_NAME}
-Wl,--start-group
m kendryte
Expand Down
7 changes: 7 additions & 0 deletions cmake/reset.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
global_set(CMAKE_C_COMPILER "${__CMAKE_C_COMPILER}")
global_set(CMAKE_CXX_COMPILER "${__CMAKE_CXX_COMPILER}")
global_set(CMAKE_LINKER "${__CMAKE_LINKER}")
global_set(CMAKE_AR "${__CMAKE_AR}")
global_set(CMAKE_OBJCOPY "${__CMAKE_OBJCOPY}")
global_set(CMAKE_SIZE "${__CMAKE_SIZE}")
global_set(CMAKE_OBJDUMP "${__CMAKE_OBJDUMP}")
7 changes: 7 additions & 0 deletions cmake/save.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
global_set(__CMAKE_C_COMPILER "${CMAKE_C_COMPILER}")
global_set(__CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER}")
global_set(__CMAKE_LINKER "${CMAKE_LINKER}")
global_set(__CMAKE_AR "${CMAKE_AR}")
global_set(__CMAKE_OBJCOPY "${CMAKE_OBJCOPY}")
global_set(__CMAKE_SIZE "${CMAKE_SIZE}")
global_set(__CMAKE_OBJDUMP "${CMAKE_OBJDUMP}")
53 changes: 29 additions & 24 deletions cmake/toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,40 @@ endif ()

message(STATUS "Check for RISCV toolchain ...")

IF("${TOOLCHAIN}" STREQUAL "")
message(STATUS "Using default RISCV toolchain")

global_set(CMAKE_C_COMPILER "riscv64-unknown-elf-gcc${EXT}")
global_set(CMAKE_CXX_COMPILER "riscv64-unknown-elf-g++${EXT}")
global_set(CMAKE_LINKER "riscv64-unknown-elf-ld${EXT}")
global_set(CMAKE_AR "riscv64-unknown-elf-ar${EXT}")
global_set(CMAKE_OBJCOPY "riscv64-unknown-elf-objcopy${EXT}")
global_set(CMAKE_SIZE "riscv64-unknown-elf-size${EXT}")
global_set(CMAKE_OBJDUMP "riscv64-unknown-elf-objdump${EXT}")
ELSE()
message(STATUS "Using ${TOOLCHAIN} RISCV toolchain")

global_set(CMAKE_C_COMPILER "${TOOLCHAIN}/riscv64-unknown-elf-gcc${EXT}")
global_set(CMAKE_CXX_COMPILER "${TOOLCHAIN}/riscv64-unknown-elf-g++${EXT}")
global_set(CMAKE_LINKER "${TOOLCHAIN}/riscv64-unknown-elf-ld${EXT}")
global_set(CMAKE_AR "${TOOLCHAIN}/riscv64-unknown-elf-ar${EXT}")
global_set(CMAKE_OBJCOPY "${TOOLCHAIN}/riscv64-unknown-elf-objcopy${EXT}")
global_set(CMAKE_SIZE "${TOOLCHAIN}/riscv64-unknown-elf-size${EXT}")
global_set(CMAKE_OBJDUMP "${TOOLCHAIN}/riscv64-unknown-elf-objdump${EXT}")
ENDIF()

if (CMAKE_MAKE_PROGRAM)
global_set(_TC_MAKE "${CMAKE_MAKE_PROGRAM}")
if(NOT TOOLCHAIN)
# do nothing
elseif(NOT "${TOOLCHAIN}" MATCHES "/$")
global_set(TOOLCHAIN "${TOOLCHAIN}")
endif()

message(STATUS "Using ${TOOLCHAIN} RISCV toolchain")

global_set(CMAKE_C_COMPILER "${TOOLCHAIN}riscv64-unknown-elf-gcc${EXT}")
global_set(CMAKE_CXX_COMPILER "${TOOLCHAIN}riscv64-unknown-elf-g++${EXT}")
global_set(CMAKE_LINKER "${TOOLCHAIN}riscv64-unknown-elf-ld${EXT}")
global_set(CMAKE_AR "${TOOLCHAIN}riscv64-unknown-elf-ar${EXT}")
global_set(CMAKE_OBJCOPY "${TOOLCHAIN}riscv64-unknown-elf-objcopy${EXT}")
global_set(CMAKE_SIZE "${TOOLCHAIN}riscv64-unknown-elf-size${EXT}")
global_set(CMAKE_OBJDUMP "${TOOLCHAIN}riscv64-unknown-elf-objdump${EXT}")

execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crt0.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRT0_OBJ)
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crtbegin.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRTBEGIN_OBJ)
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crtend.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRTEND_OBJ)
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crti.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRTI_OBJ)
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=crtn.o OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE CRTN_OBJ)

global_set(CMAKE_C_LINK_EXECUTABLE
"<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> \"${CRTI_OBJ}\" \"${CRTBEGIN_OBJ}\" <OBJECTS> \"${CRTEND_OBJ}\" \"${CRTN_OBJ}\" -o <TARGET> <LINK_LIBRARIES>")

global_set(CMAKE_CXX_LINK_EXECUTABLE
"<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> \"${CRTI_OBJ}\" \"${CRTBEGIN_OBJ}\" <OBJECTS> \"${CRTEND_OBJ}\" \"${CRTN_OBJ}\" -o <TARGET> <LINK_LIBRARIES>")

## do a simple check
get_filename_component(_BIN_DIR "${CMAKE_C_COMPILER}" DIRECTORY)
if (NOT "${TOOLCHAIN}" STREQUAL "${_BIN_DIR}" AND NOT "${TOOLCHAIN}" STREQUAL "${_BIN_DIR}/")
message("TOOLCHAIN is [${TOOLCHAIN}]")
message("_BIN_DIR is [${_BIN_DIR}]")
message(WARNING "CMAKE_C_COMPILER is not in kendryte-toolchain dist/bin folder.")
endif ()

include(${CMAKE_CURRENT_LIST_DIR}/save.cmake)
Loading

0 comments on commit b071dc0

Please sign in to comment.