parent
4a69d38e35
commit
c6983ac6c5
@ -1,122 +1,9 @@
|
||||
# Sanity Check Return
|
||||
function(sanity_check_return ret)
|
||||
if(NOT ret EQUAL "0")
|
||||
message(FATAL_ERROR "Process Failed")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Get Host Architecture
|
||||
find_program(UNAME uname /bin /usr/bin /usr/local/bin REQUIRED)
|
||||
execute_process(
|
||||
COMMAND "${UNAME}" "-m"
|
||||
OUTPUT_VARIABLE HOST_ARCHITECTURE
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE ret
|
||||
)
|
||||
sanity_check_return("${ret}")
|
||||
|
||||
# Get Include Directories
|
||||
function(get_include_dirs target compiler result)
|
||||
# Get Tool Name
|
||||
set(tool "cc1")
|
||||
if(compiler MATCHES "^.*g\\+\\+$")
|
||||
set(tool "cc1plus")
|
||||
endif()
|
||||
|
||||
# Get Tool Path
|
||||
execute_process(
|
||||
COMMAND "${compiler}" "-print-prog-name=${tool}"
|
||||
ERROR_QUIET
|
||||
OUTPUT_VARIABLE tool
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE ret
|
||||
)
|
||||
sanity_check_return("${ret}")
|
||||
|
||||
# Run Tool To Get Include Path
|
||||
set(tool_output "")
|
||||
execute_process(
|
||||
COMMAND "${tool}" "-quiet" "-v" "-imultiarch" "${target}"
|
||||
OUTPUT_QUIET
|
||||
ERROR_VARIABLE tool_output
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
INPUT_FILE "/dev/null"
|
||||
RESULT_VARIABLE ret
|
||||
)
|
||||
sanity_check_return("${ret}")
|
||||
string(REPLACE "\n" ";" tool_output "${tool_output}")
|
||||
|
||||
# Loop
|
||||
set(parsing_include_section FALSE)
|
||||
foreach(line IN LISTS tool_output)
|
||||
# Check Include Section Status
|
||||
if(parsing_include_section)
|
||||
# Check If Include Section Is Over
|
||||
if(line MATCHES "^End of search list.$")
|
||||
# Starting Include Section
|
||||
set(parsing_include_section FALSE)
|
||||
break()
|
||||
else()
|
||||
# Parsing Include Section
|
||||
if(line MATCHES "^ .*$")
|
||||
# Strip Line
|
||||
string(STRIP "${line}" line)
|
||||
# Add To List
|
||||
list(APPEND "${result}" "${line}")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
# Check If Include Section Is Starting
|
||||
if(line MATCHES "^#include <\\.\\.\\.> search starts here:$")
|
||||
# Starting Include Section
|
||||
set(parsing_include_section TRUE)
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Return
|
||||
set("${result}" "${${result}}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Setup Include Directories
|
||||
function(setup_include_dirs compiler target result)
|
||||
# Get Full Compiler
|
||||
set(full_compiler "${target}-${compiler}")
|
||||
|
||||
# Get Include Directories
|
||||
set(include_dirs "")
|
||||
get_include_dirs("${target}" "${full_compiler}" include_dirs)
|
||||
|
||||
# Loop
|
||||
set(flags "")
|
||||
foreach(include_dir IN LISTS include_dirs)
|
||||
set(flags "${flags} -isystem ${include_dir}")
|
||||
endforeach()
|
||||
|
||||
# Return
|
||||
set("${result}" "${${result}} ${flags}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Setup Toolchain
|
||||
macro(setup_toolchain target)
|
||||
# Use ARM Cross-Compiler
|
||||
set(CMAKE_C_COMPILER "clang")
|
||||
set(CMAKE_C_COMPILER_TARGET "${target}")
|
||||
set(CMAKE_CXX_COMPILER "clang++")
|
||||
set(CMAKE_CXX_COMPILER_TARGET "${target}")
|
||||
set(CMAKE_C_COMPILER "${target}-gcc")
|
||||
set(CMAKE_CXX_COMPILER "${target}-g++")
|
||||
set(CMAKE_FIND_ROOT_PATH "/usr/${target}" "/usr/lib/${target}")
|
||||
# Flags
|
||||
string(CONCAT NEW_FLAGS
|
||||
"-nostdinc "
|
||||
"-nostdinc++ "
|
||||
"-Wno-unused-command-line-argument"
|
||||
)
|
||||
set(CMAKE_C_FLAGS_INIT "${CMAKE_C_FLAGS_INIT} ${NEW_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} ${NEW_FLAGS}")
|
||||
# Include Directories
|
||||
setup_include_dirs("gcc" "${target}" CMAKE_C_FLAGS_INIT)
|
||||
setup_include_dirs("g++" "${target}" CMAKE_CXX_FLAGS_INIT)
|
||||
# Extra
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
endmacro()
|
||||
|
@ -0,0 +1,80 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
# ARM Toolchain File
|
||||
ARM_TOOLCHAIN_FILE="$(pwd)/cmake/armhf-toolchain.cmake"
|
||||
|
||||
# Setup
|
||||
setup() {
|
||||
# Find Toolchain
|
||||
local toolchain_file="$(pwd)/cmake/${ARCH}-toolchain.cmake"
|
||||
if [ ! -f "${toolchain_file}" ]; then
|
||||
echo "Invalid Architecture: ${ARCH}" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create Build Dir
|
||||
rm -rf "build/${MODE}-${ARCH}"
|
||||
mkdir -p "build/${MODE}-${ARCH}"
|
||||
cd "build/${MODE}-${ARCH}"
|
||||
|
||||
# Prepare
|
||||
local extra_arg='-DMCPI_USE_MEDIA_LAYER_PROXY=ON'
|
||||
if [ "${MODE}" = "server" ]; then
|
||||
extra_arg='-DMCPI_SERVER_MODE=ON'
|
||||
fi
|
||||
|
||||
# Build ARM Components
|
||||
mkdir arm
|
||||
cd arm
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ARM_TOOLCHAIN_FILE}" -DMCPI_BUILD_MODE=arm "${extra_arg}" "$@" ../../..
|
||||
cd ../
|
||||
|
||||
# Build Native Components
|
||||
mkdir native
|
||||
cd native
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}" -DMCPI_BUILD_MODE=native "${extra_arg}" "$@" ../../..
|
||||
cd ../
|
||||
|
||||
# Exit
|
||||
cd ../../
|
||||
}
|
||||
|
||||
# Setup For ARM
|
||||
armhf_setup() {
|
||||
# Create Build Dir
|
||||
rm -rf "build/${MODE}-armhf"
|
||||
mkdir -p "build/${MODE}-armhf"
|
||||
cd "build/${MODE}-armhf"
|
||||
|
||||
# Prepare
|
||||
local server_mode='OFF'
|
||||
if [ "${MODE}" = "server" ]; then
|
||||
server_mode='ON'
|
||||
fi
|
||||
|
||||
# Build All Components
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ARM_TOOLCHAIN_FILE}" -DMCPI_BUILD_MODE=both -DMCPI_SERVER_MODE="${server_mode}" "$@" ../..
|
||||
|
||||
# Exit
|
||||
cd ../../
|
||||
}
|
||||
|
||||
# Variables
|
||||
MODE="$1"
|
||||
ARCH="$2"
|
||||
shift 2
|
||||
|
||||
# Verify Mode
|
||||
if [ "${MODE}" != "client" ] && [ "${MODE}" != "server" ]; then
|
||||
echo "Invalid Mode: ${MODE}" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setup
|
||||
if [ "${ARCH}" = "armhf" ]; then
|
||||
armhf_setup "$@"
|
||||
else
|
||||
setup "$@"
|
||||
fi
|
Loading…
Reference in new issue