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