1*1c60b9acSAndroid Build Coastguard Worker# 2*1c60b9acSAndroid Build Coastguard Worker# CMake Toolchain file for crosscompiling on Atmel Arm products 3*1c60b9acSAndroid Build Coastguard Worker# 4*1c60b9acSAndroid Build Coastguard Worker# To build without tls 5*1c60b9acSAndroid Build Coastguard Worker# 6*1c60b9acSAndroid Build Coastguard Worker# cd build/ 7*1c60b9acSAndroid Build Coastguard Worker# cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/opt/atmel/cross-root \ 8*1c60b9acSAndroid Build Coastguard Worker# -DCMAKE_TOOLCHAIN_FILE=../contrib/cross-atmel.cmake \ 9*1c60b9acSAndroid Build Coastguard Worker# -DLWS_PLAT_FREERTOS=1 \ 10*1c60b9acSAndroid Build Coastguard Worker# -DLWS_WITH_ZLIB=0 \ 11*1c60b9acSAndroid Build Coastguard Worker# -DLWS_WITHOUT_EXTENSIONS=1 \ 12*1c60b9acSAndroid Build Coastguard Worker# -DLWS_WITH_ZIP_FOPS=0 \ 13*1c60b9acSAndroid Build Coastguard Worker# -DLWS_WITH_HTTP_STREAM_COMPRESSION=0 \ 14*1c60b9acSAndroid Build Coastguard Worker# -DLWS_WITH_MBEDTLS=0 \ 15*1c60b9acSAndroid Build Coastguard Worker# -DLWS_WITH_SSL=0 \ 16*1c60b9acSAndroid Build Coastguard Worker# -DLWS_WITH_FILE_OPS=0 17*1c60b9acSAndroid Build Coastguard Worker# 18*1c60b9acSAndroid Build Coastguard Worker 19*1c60b9acSAndroid Build Coastguard Worker# I had to edit /opt/xdk-asf-3.48.0/thirdparty/lwip/lwip-port-1.4.1-dev/sam/include/arch/cc.h 20*1c60b9acSAndroid Build Coastguard Worker# to comment out #define LWIP_PROVIDE_ERRNO 21*1c60b9acSAndroid Build Coastguard Worker 22*1c60b9acSAndroid Build Coastguard Worker# if your sdk lives somewhere else, this is the only place that should need changing 23*1c60b9acSAndroid Build Coastguard Worker 24*1c60b9acSAndroid Build Coastguard Workerset(CROSS_BASE /opt/arm-none-eabi) 25*1c60b9acSAndroid Build Coastguard Workerset(SDK_BASE /opt/xdk-asf-3.48.0) 26*1c60b9acSAndroid Build Coastguard Workerset(CROSS_PATH ${CROSS_BASE}/bin/arm-none-eabi) 27*1c60b9acSAndroid Build Coastguard Worker 28*1c60b9acSAndroid Build Coastguard Workerset(LWIP_VER 1.4.1-dev) 29*1c60b9acSAndroid Build Coastguard Workerset(FREERTOS_VER 10.0.0) 30*1c60b9acSAndroid Build Coastguard Worker 31*1c60b9acSAndroid Build Coastguard Worker# 32*1c60b9acSAndroid Build Coastguard Worker# Target operating system name. 33*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_SYSTEM_NAME Generic) 34*1c60b9acSAndroid Build Coastguard Worker 35*1c60b9acSAndroid Build Coastguard Worker# Name of C compiler. 36*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_C_COMPILER "${CROSS_PATH}-gcc") 37*1c60b9acSAndroid Build Coastguard Worker 38*1c60b9acSAndroid Build Coastguard Worker# 39*1c60b9acSAndroid Build Coastguard Worker# cmake believes we should link a NOP test program OK, but since we're 40*1c60b9acSAndroid Build Coastguard Worker# baremetal, that's not true in our case. It tries to build this test 41*1c60b9acSAndroid Build Coastguard Worker# with the cross compiler, but with no args on it, and it fails. 42*1c60b9acSAndroid Build Coastguard Worker# So disable this test for this toolchain (we'll find out soon enough 43*1c60b9acSAndroid Build Coastguard Worker# if we actually can't compile anything) 44*1c60b9acSAndroid Build Coastguard Worker 45*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_C_COMPILER_WORKS 1) 46*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_CXX_COMPILER_WORKS 1) 47*1c60b9acSAndroid Build Coastguard Worker 48*1c60b9acSAndroid Build Coastguard Worker# 49*1c60b9acSAndroid Build Coastguard Worker# similarly we're building a .a like this, we can't actually build 50*1c60b9acSAndroid Build Coastguard Worker# complete test programs to probe api availability... so force some 51*1c60b9acSAndroid Build Coastguard Worker# key ones 52*1c60b9acSAndroid Build Coastguard Worker 53*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols 1) 54*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_ssl_conf_alpn_protocols 1) 55*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1) 56*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_ssl_conf_sni 1) 57*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_ssl_set_hs_ca_chain 1) 58*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_ssl_set_hs_own_cert 1) 59*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_ssl_set_hs_authmode 1) 60*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_net_init 1) 61*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_md_setup 1) # not on xenial 2.2 62*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_rsa_complete 1) # not on xenial 2.2 63*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_mbedtls_internal_aes_encrypt 1) 64*1c60b9acSAndroid Build Coastguard Worker# 65*1c60b9acSAndroid Build Coastguard Worker# Different build system distros set release optimization level to different 66*1c60b9acSAndroid Build Coastguard Worker# things according to their local policy, eg, Fedora is -O2 and Ubuntu is -O3 67*1c60b9acSAndroid Build Coastguard Worker# here. Actually the build system's local policy is completely unrelated to 68*1c60b9acSAndroid Build Coastguard Worker# our desire for cross-build release optimization policy for code built to run 69*1c60b9acSAndroid Build Coastguard Worker# on a completely different target than the build system itself. 70*1c60b9acSAndroid Build Coastguard Worker# 71*1c60b9acSAndroid Build Coastguard Worker# Since this goes last on the compiler commandline we have to override it to a 72*1c60b9acSAndroid Build Coastguard Worker# sane value for cross-build here. Notice some gcc versions enable broken 73*1c60b9acSAndroid Build Coastguard Worker# optimizations with -O3. 74*1c60b9acSAndroid Build Coastguard Worker# 75*1c60b9acSAndroid Build Coastguard Workerif (CMAKE_BUILD_TYPE MATCHES RELEASE OR CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES release) 76*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2") 77*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") 78*1c60b9acSAndroid Build Coastguard Workerendif() 79*1c60b9acSAndroid Build Coastguard Worker 80*1c60b9acSAndroid Build Coastguard Workerset(PLAT_ARCH ARM_CM4F) 81*1c60b9acSAndroid Build Coastguard Workerset(PLAT_ARCH_CMSIS sam4e) 82*1c60b9acSAndroid Build Coastguard Workerset(PLAT_SOC __SAM4E16E__) 83*1c60b9acSAndroid Build Coastguard Workerset(PLAT_BOARD SAM4E_XPLAINED_PRO) 84*1c60b9acSAndroid Build Coastguard Worker 85*1c60b9acSAndroid Build Coastguard Workerset(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/include/lwip") 86*1c60b9acSAndroid Build Coastguard Workerset(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/include/posix") 87*1c60b9acSAndroid Build Coastguard Workerset(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/include") 88*1c60b9acSAndroid Build Coastguard Workerset(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/module_config") 89*1c60b9acSAndroid Build Coastguard Workerset(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-port-${LWIP_VER}/sam/include") 90*1c60b9acSAndroid Build Coastguard Workerset(CF_LWIP "${CF_LWIP} -I${SDK_BASE}/thirdparty/lwip/lwip-${LWIP_VER}/src/include/ipv4") 91*1c60b9acSAndroid Build Coastguard Worker 92*1c60b9acSAndroid Build Coastguard Workerset(CF_FREERTOS "${CF_FREERTOS} -I${SDK_BASE}/thirdparty/freertos/freertos-${FREERTOS_VER}/Source/include") 93*1c60b9acSAndroid Build Coastguard Workerset(CF_FREERTOS "${CF_FREERTOS} -I${SDK_BASE}/thirdparty/freertos/freertos-${FREERTOS_VER}/module_config") 94*1c60b9acSAndroid Build Coastguard Workerset(CF_FREERTOS "${CF_FREERTOS} -I${SDK_BASE}/thirdparty/freertos/freertos-${FREERTOS_VER}/Source/portable/GCC/${PLAT_ARCH}") 95*1c60b9acSAndroid Build Coastguard Worker 96*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/common/boards") 97*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/common/utils") 98*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/") 99*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/preprocessor") 100*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/header_files") 101*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/boards") 102*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/cmsis/${PLAT_ARCH_CMSIS}/source/templates") 103*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/sam/utils/cmsis/${PLAT_ARCH_CMSIS}/include") 104*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/thirdparty/CMSIS/Include") 105*1c60b9acSAndroid Build Coastguard Workerset(CF_SDK_GLUE "${CF_SDK_GLUE} -I${SDK_BASE}/common/utils/osprintf") 106*1c60b9acSAndroid Build Coastguard Worker 107*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lnosys -nostartfiles ${CF_LWIP} ${CF_FREERTOS} ${CF_SDK_GLUE} -DBOARD=${PLAT_BOARD} -D${PLAT_SOC} -DLWIP_TIMEVAL_PRIVATE=0 -DLWS_AMAZON_RTOS=1 -DLWIP_SOCKET_OFFSET=0 -DLWIP_COMPAT_SOCKETS -DLWIP_DNS=1 -DLWIP_SOCKETS=1 " CACHE STRING "" FORCE) 108*1c60b9acSAndroid Build Coastguard Worker 109*1c60b9acSAndroid Build Coastguard Worker# Where to look for the target environment. (More paths can be added here) 110*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}") 111*1c60b9acSAndroid Build Coastguard Worker 112*1c60b9acSAndroid Build Coastguard Worker# Adjust the default behavior of the FIND_XXX() commands: 113*1c60b9acSAndroid Build Coastguard Worker# search programs in the host environment only. 114*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 115*1c60b9acSAndroid Build Coastguard Worker 116*1c60b9acSAndroid Build Coastguard Worker# Search headers and libraries in the target environment only. 117*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 118*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 119*1c60b9acSAndroid Build Coastguard Worker 120