• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1################交叉编译#####################
2#cross-compilation config
3set(CMAKE_SYSTEM_NAME Linux)
4set(CMAKE_SYSTEM_PROCESSOR arm)
5
6set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
7set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
8set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
9set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
10
11
12set(CPU_TYPE "$ENV{CPU_TYPE}" )
13set(PLAM_TYPE "$ENV{PLAM_TYPE}" )
14set(LIB_TYPE "$ENV{LIB_TYPE}"  )
15set(SYSTEM "$ENV{SYSTEM}" )
16set(CORE "$ENV{CORE}" )
17set(LIB_RUN_TYPE "$ENV{LIB_RUN_TYPE}" )
18set(BUILD_DIR "$ENV{BUILD_TMP_DIR}" ) #version id
19set(OBJCOPY_PATH "$ENV{OBJCOPY_PATH}" ) #OBJCOPY_PATH
20set(COMPILE_MODE "$ENV{COMPILE_MODE}" )
21set(CC_TYPE "$ENV{CC_TYPE}" )
22set(TOOLCHAIN_DIR "$ENV{HCC_PATH}") #该路径应该是外部传入,指向编译工具路径
23
24
25# 设置gcc_arm64编译器公共的编译选项
26set(CC_OPT_LEVEL "-Os")
27set(CC_WARN_FLAGS "-Wformat-signedness")
28set(CC_MD_DEPENDENT_FLAGS "-Wl,--build-id=none")
29# 初始化为空,不能删除这句
30set(CC_OPT_FLAGS "")
31set(CC_SEC_FLAGS "${CC_SEC_FLAGS} -fno-PIE")
32# 待确认的编译选项,暂时没进行分类,待处理
33set(CC_OTHER_FLAGS "--specs=nosys.specs -fno-builtin -fno-dwarf2-cfi-asm -mcmodel=large -fomit-frame-pointer -fzero-initialized-in-bss -fdollars-in-identifiers -ffunction-sections -fdata-sections -fno-aggressive-loop-optimizations -fno-optimize-strlen -fno-schedule-insns -fno-inline-small-functions -fno-inline-functions-called-once -fno-strict-aliasing -finline-limit=20 -mstrict-align -mlittle-endian -nostartfiles -funwind-tables")
34set(CC_DEFINE_FLAGS "")
35
36##compiler specified in /etc/profile
37set(CMAKE_C_COMPILER "${TOOLCHAIN_DIR}/aarch64-none-elf-gcc" CACHE PATH "arm-gcc C compiler" FORCE)
38set(CMAKE_ASM_COMPILER "${TOOLCHAIN_DIR}/aarch64-none-elf-gcc" CACHE PATH "arm-gcc ASM compiler" FORCE)
39
40# 设置C和ASM相关的所有使用的编译选项
41set(CMAKE_C_FLAGS "${CC_OPT_LEVEL} ${CC_OVERALL_FLAGS_COMMON} ${CC_WARN_FLAGS_COMMON} ${CC_WARN_FLAGS} ${CC_LANGUAGE_FLAGS_COMMON} ${CC_LANGUAGE_FLAGS} ${CC_CDG_FLAGS} ${CC_MD_DEPENDENT_FLAGS} ${CC_OPT_FLAGS} ${CC_SEC_FLAGS} ${CC_OTHER_FLAGS} ${CC_DEFINE_FLAGS_COMMON} ${CC_DEFINE_FLAGS}")
42set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} ${ASM_EXTRA_FLAGS}")
43set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <FLAGS> <INCLUDES> -c <SOURCE> -o <OBJECT>")
44file(STRINGS "$ENV{CONFIG_FILE_PATH}/defconfig" config_options REGEX "^CONFIG_OS_OPTION_POSIX" ENCODING "UTF-8")
45foreach(config_option ${config_options})
46    set(CMAKE_C_COMPILE_OBJECT "${CMAKE_C_COMPILE_OBJECT} -D_GNU_SOURCE -D_POSIX_THREADS -D_POSIX_THREAD_PRIORITY_SCHEDULING -D_POSIX_PRIORITY_SCHEDULING -D_POSIX_TIMERS -D_POSIX_CPUTIME -D_POSIX_THREAD_CPUTIME -D_POSIX_MONOTONIC_CLOCK -D_POSIX_TIMEOUTS -D_POSIX_CLOCK_SELECTION -D_POSIX_THREAD_PRIO_PROTECT -D_UNIX98_THREAD_MUTEX_ATTRIBUTES -D_POSIX_READER_WRITER_LOCKS")
47endforeach()
48set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <FLAGS> <INCLUDES> -c <SOURCE> -o <OBJECT>")
49
50set(CMAKE_LINKER "${TOOLCHAIN_DIR}/aarch64-none-elf-ld" CACHE STRING "" FORCE)
51set(CMAKE_AR "${TOOLCHAIN_DIR}/aarch64-none-elf-ar" CACHE STRING "" FORCE)
52set(CMAKE_C_LINK_FLAGS "-r ")
53set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> -r <TARGET> <OBJECTS>")
54