File: CMakeLists.txt

package info (click to toggle)
bladerf 0.2024.05-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 245,984 kB
  • sloc: ansic: 361,923; vhdl: 28,167; tcl: 14,424; python: 3,668; sh: 1,811; makefile: 1,255; xml: 1,020; cpp: 473; asm: 158; csh: 18
file content (204 lines) | stat: -rw-r--r-- 6,676 bytes parent folder | download
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")