1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
|
cmake_minimum_required(VERSION 3.5)
project(ad936x C)
message(STATUS "libad936x: Configuring build...")
option(NIOS_HAS_HARDWARE_MULTIPLY_DIVIDE
"Use hardware multiply/divide in Nios II/f"
OFF
)
option(BUILD_AD936X_PRINTF
"Enable console printf output for the AD936x library."
OFF
)
option(BUILD_AD936X_PRINTF_DEBUG
"Enable debugging output for the AD936x library."
OFF
)
################################################################################
# Paths
################################################################################
# Repository root
set(LIBAD936X_BLADERF_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../../../..")
# Source directory for local files (patches, platform_bladerf2, etc)
set(LIBAD936X_LOCAL_DIR "${LIBAD936X_BLADERF_ROOT}/thirdparty/analogdevicesinc/no-OS_local")
# libbladeRF relative path
set(LIBAD936X_LIBBLADERF_DIR "${LIBAD936X_BLADERF_ROOT}/host/libraries/libbladeRF")
# fpga_common relative path
set(LIBAD936X_FPGACOMMON_DIR "${LIBAD936X_BLADERF_ROOT}/fpga_common")
# Patch files live here
set(LIBAD936X_PATCH_DIR "${LIBAD936X_LOCAL_DIR}/patches")
# Platform files
set(LIBAD936X_PLATFORM_DIR "${LIBAD936X_LOCAL_DIR}/platform_bladerf2_headless")
# Upstream source (clean)
set(LIBAD936X_UPSTREAM_DIR "${LIBAD936X_LOCAL_DIR}/../no-OS/ad9361/sw")
# Upstream source (patched)
set(LIBAD936X_UPSTREAM_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}")
# Use CMake modules from the host tree
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LIBAD936X_BLADERF_ROOT}/host/cmake/modules/")
# Ensure the toolchain file got loaded...
if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "nios2")
message(FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR is ${CMAKE_SYSTEM_PROCESSOR}, expected nios2")
endif()
################################################################################
# Configure build
################################################################################
add_library(ad936x STATIC
${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361.c
${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361_api.c
${LIBAD936X_UPSTREAM_BUILD_DIR}/ad9361_conv.c
${LIBAD936X_UPSTREAM_BUILD_DIR}/util.c
${LIBAD936X_PLATFORM_DIR}/platform.c
${LIBAD936X_PLATFORM_DIR}/adc_core.c
${LIBAD936X_PLATFORM_DIR}/dac_core.c
${LIBAD936X_FPGACOMMON_DIR}/src/ad936x_params.c
)
target_compile_options(ad936x PRIVATE
-DBLADERF_NIOS_BUILD -DNUAND_MODIFICATIONS -Wall -Os
)
if(NOT NIOS_HAS_HARDWARE_MULTIPLY_DIVIDE)
message(STATUS "libad936x: building with software mul/mulx/div operations")
target_compile_options(ad936x PRIVATE
-mno-hw-div -mno-hw-mul -mno-hw-mulx
)
endif(NOT NIOS_HAS_HARDWARE_MULTIPLY_DIVIDE)
if(NOT MSVC)
target_compile_options(ad936x PRIVATE
-ffunction-sections -fdata-sections
-Wno-unused-but-set-variable -std=gnu11
)
endif(NOT MSVC)
# Main Nios app build uses -fshort-enums, so we need to use it here too
target_compile_options(ad936x PRIVATE
-fshort-enums
)
if(BUILD_AD936X_PRINTF OR BUILD_AD936X_PRINTF_DEBUG)
message(STATUS "libad936x: Enabling console output")
target_compile_options(ad936x PRIVATE -DHAVE_VERBOSE_MESSAGES)
endif(BUILD_AD936X_PRINTF OR BUILD_AD936X_PRINTF_DEBUG)
if(BUILD_AD936X_PRINTF_DEBUG)
message(STATUS "libad936x: Enabling full debugging output")
target_compile_options(ad936x PRIVATE -DHAVE_DEBUG_MESSAGES)
endif(BUILD_AD936X_PRINTF_DEBUG)
target_include_directories(ad936x PUBLIC
${CMAKE_SOURCE_DIR}/include
${LIBAD936X_PLATFORM_DIR}
${LIBAD936X_UPSTREAM_BUILD_DIR}
${LIBAD936X_LIBBLADERF_DIR}/src
${LIBAD936X_LIBBLADERF_DIR}/include
${LIBAD936X_BLADERF_ROOT}/host/common/include
${LIBAD936X_BLADERF_ROOT}/firmware_common
${LIBAD936X_BLADERF_ROOT}/hdl/fpga/platforms/common/bladerf/software/bladeRF_nios/src
${LIBAD936X_BLADERF_ROOT}/hdl/fpga/platforms/bladerf-micro/software/bladeRF_nios/src
${LIBAD936X_BLADERF_ROOT}/fpga_common/include
${CMAKE_BINARY_DIR}/../bladeRF_nios_bsp
${CMAKE_BINARY_DIR}/../bladeRF_nios_bsp/drivers/inc
${CMAKE_BINARY_DIR}/../bladeRF_nios_bsp/HAL/inc
)
################################################################################
# Dependencies
################################################################################
# If the submodule hasn't been initialized/updated, do so
if(NOT IS_DIRECTORY ${LIBAD936X_UPSTREAM_DIR})
message(STATUS "libad936x: Attempting to initialize missing submodule")
find_package(Git QUIET)
if(Git_FOUND)
execute_process(
COMMAND ${Git_EXECUTABLE} submodule init
WORKING_DIRECTORY ${LIBAD936X_BLADERF_ROOT}
)
execute_process(
COMMAND ${Git_EXECUTABLE} submodule update
WORKING_DIRECTORY ${LIBAD936X_BLADERF_ROOT}
)
endif()
endif()
# Then, re-check for submodule...
if(NOT IS_DIRECTORY ${LIBAD936X_UPSTREAM_DIR})
message(FATAL_ERROR "Directory ${LIBAD936X_UPSTREAM_DIR} was not found. "
"It appears that this submodule has not been properly "
"initialized. Please run 'git submodule init' and "
"'git submodule update', and then re-run cmake.")
endif()
################################################################################
# Copy files and apply patches
################################################################################
# Copy needed files from the upstream repository
set(LIBAD936X_UPSTREAM_FILES
ad9361.c
ad9361.h
ad9361_api.c
ad9361_api.h
ad9361_conv.c
common.h
util.c
util.h
)
foreach(cpfile IN ITEMS ${LIBAD936X_UPSTREAM_FILES})
configure_file(
"${LIBAD936X_UPSTREAM_DIR}/${cpfile}"
"${LIBAD936X_UPSTREAM_BUILD_DIR}/"
COPYONLY
)
endforeach(cpfile)
# Patch the upstream files
set(LIBAD936X_PATCHES
0001-0bba46e-nuand-modifications.patch
0002-0bba46e-pr-561.patch
0003-0bba46e-pr-573.patch
0004-0bba46e-pr-598.patch
0005-0bba46e-rm-ad9361_parse_fir.patch
0006-0bba46e-compilefix.patch
)
find_package(Patcher REQUIRED)
foreach(patchfile IN ITEMS ${LIBAD936X_PATCHES})
message(STATUS "libad936x: Applying patch: ${patchfile}")
execute_process(
COMMAND ${Patcher_EXECUTABLE} -p3
INPUT_FILE ${LIBAD936X_PATCH_DIR}/${patchfile}
WORKING_DIRECTORY "${LIBAD936X_UPSTREAM_BUILD_DIR}"
OUTPUT_QUIET
RESULT_VARIABLE resultcode
ERROR_VARIABLE errvar
)
if(resultcode)
message(FATAL_ERROR "Failed to apply ${patchfile}: ${errvar}")
endif(resultcode)
endforeach(patchfile)
message(STATUS "libad936x: Build configured")
|