update script to pass issue about CMAKE_LINK & PROJECT()

pull/13/head
GongT 2018-09-25 18:21:10 +08:00
parent 299a500ed1
commit 5a5a6d465b
5 changed files with 47 additions and 34 deletions

View File

@ -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}")

View File

@ -1,9 +1,13 @@
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()
@ -14,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

7
cmake/reset.cmake Normal file
View File

@ -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
cmake/save.cmake Normal file
View File

@ -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}")

View File

@ -10,31 +10,40 @@ endif ()
message(STATUS "Check for RISCV toolchain ...")
IF("${TOOLCHAIN}" STREQUAL "")
message(STATUS "Using default RISCV toolchain")
if(NOT TOOLCHAIN)
# do nothing
elseif(NOT "${TOOLCHAIN}" MATCHES "/$")
global_set(TOOLCHAIN "${TOOLCHAIN}")
endif()
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")
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()
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)