238 lines
6.2 KiB
CMake
238 lines
6.2 KiB
CMake
|
include_directories(
|
||
|
${PROJECT_SOURCE_DIR}/include
|
||
|
${PROJECT_SOURCE_DIR}/include/satnogs/libfec
|
||
|
)
|
||
|
|
||
|
########################################################################
|
||
|
# Compiler specific setup
|
||
|
########################################################################
|
||
|
if(BUILD_32BIT_ON_64BIT)
|
||
|
set(CMAKE_SYSTEM_PROCESSOR "i386")
|
||
|
set(CMAKE_SIZEOF_VOID_P 4)
|
||
|
set(CMAKE_C_FLAGS -m32)
|
||
|
set(CMAKE_CXX_FLAGS -m32)
|
||
|
add_definitions(-m32)
|
||
|
endif()
|
||
|
|
||
|
if((CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86|AMD64") AND (CMAKE_SIZEOF_VOID_P EQUAL 4))
|
||
|
set(TARGET_ARCH "x86")
|
||
|
elseif((CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") AND (CMAKE_SIZEOF_VOID_P EQUAL 8))
|
||
|
set(TARGET_ARCH "x64")
|
||
|
elseif((CMAKE_SYSTEM_PROCESSOR MATCHES "i386") AND (CMAKE_SIZEOF_VOID_P EQUAL 8) AND (APPLE))
|
||
|
# Mac is weird like that.
|
||
|
set(TARGET_ARCH "x64")
|
||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm*")
|
||
|
set(TARGET_ARCH "ARM")
|
||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le")
|
||
|
set(TARGET_ARCH "ppc64" "ppc64le")
|
||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
|
||
|
set(TARGET_ARCH "ppc64" "ppc")
|
||
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
|
||
|
set(TARGET_ARCH "ppc")
|
||
|
endif()
|
||
|
|
||
|
|
||
|
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANGCC)
|
||
|
add_definitions(-Wall)
|
||
|
add_definitions(-Wno-unused)
|
||
|
|
||
|
if(TARGET_ARCH MATCHES "x64")
|
||
|
add_definitions(-fPIC)
|
||
|
add_definitions(-msse2)
|
||
|
elseif(TARGET_ARCH MATCHES "x86")
|
||
|
add_definitions(-mmmx)
|
||
|
add_definitions(-msse)
|
||
|
add_definitions(-msse2)
|
||
|
elseif(TARGET_ARCH MATCHES "ppc|ppc64")
|
||
|
add_definitions(-fno-common)
|
||
|
add_definitions(-faltivec)
|
||
|
endif()
|
||
|
|
||
|
endif()
|
||
|
|
||
|
########################################################################
|
||
|
# Find build dependencies
|
||
|
########################################################################
|
||
|
|
||
|
# libm
|
||
|
find_library(M_LIB m REQUIRED)
|
||
|
|
||
|
|
||
|
########################################################################
|
||
|
# config.h
|
||
|
########################################################################
|
||
|
|
||
|
#add_definitions(-DHAVE_CONFIG_H)
|
||
|
|
||
|
# Checks for includes
|
||
|
include(CheckIncludeFile)
|
||
|
check_include_file("getopt.h" HAVE_GETOPT_H)
|
||
|
check_include_file("stdio.h" HAVE_STDIO_H)
|
||
|
check_include_file("stdlib.h" HAVE_STDLIB_H)
|
||
|
check_include_file("memory.h" HAVE_MEMORY_H)
|
||
|
check_include_file("string.h" HAVE_STRING_H)
|
||
|
|
||
|
# Checks for functions
|
||
|
include(CheckFunctionExists)
|
||
|
check_function_exists("getopt_long" HAVE_GETOPT_LONG)
|
||
|
check_function_exists("memset" HAVE_MEMSET)
|
||
|
check_function_exists("memmove" HAVE_MEMMOVE)
|
||
|
|
||
|
|
||
|
########################################################################
|
||
|
# Setup apps
|
||
|
########################################################################
|
||
|
|
||
|
if(TARGET_ARCH MATCHES "x64")
|
||
|
list(APPEND libfec_sources
|
||
|
dotprod_port.c
|
||
|
peakval_port.c
|
||
|
sumsq.c
|
||
|
sumsq_port.c
|
||
|
cpu_mode_x86_64.c
|
||
|
##asm
|
||
|
#sse2bfly27-64.s
|
||
|
#sse2bfly29-64.s
|
||
|
)
|
||
|
|
||
|
elseif(TARGET_ARCH MATCHES "x86")
|
||
|
list(APPEND libfec_sources
|
||
|
viterbi27_mmx.c
|
||
|
viterbi27_sse.c
|
||
|
viterbi27_sse2.c
|
||
|
viterbi29_mmx.c
|
||
|
viterbi29_sse.c
|
||
|
viterbi29_sse2.c
|
||
|
viterbi39_sse2.c
|
||
|
viterbi39_sse.c
|
||
|
viterbi39_mmx.c
|
||
|
viterbi615_mmx.c
|
||
|
viterbi615_sse.c
|
||
|
viterbi615_sse2.c
|
||
|
dotprod_mmx.c
|
||
|
dotprod_sse2.c
|
||
|
#peakval_mmx.c
|
||
|
#peakval_sse.c
|
||
|
#peakval_sse2.c
|
||
|
sumsq.c
|
||
|
sumsq_port.c
|
||
|
sumsq_sse2.c
|
||
|
sumsq_mmx.c
|
||
|
cpu_mode_x86.c
|
||
|
#asm
|
||
|
cpu_features.s
|
||
|
dotprod_mmx_assist.s
|
||
|
dotprod_sse2_assist.s
|
||
|
mmxbfly27.s
|
||
|
mmxbfly29.s
|
||
|
peak_mmx_assist.s
|
||
|
peak_sse2_assist.s
|
||
|
peak_sse_assist.s
|
||
|
peakval_mmx_assist.s
|
||
|
peakval_sse2_assist.s
|
||
|
peakval_sse_assist.s
|
||
|
sse2bfly27.s
|
||
|
sse2bfly29.s
|
||
|
ssebfly27.s
|
||
|
ssebfly29.s
|
||
|
sumsq_mmx_assist.s
|
||
|
sumsq_sse2_assist.s
|
||
|
)
|
||
|
|
||
|
elseif(TARGET_ARCH MATCHES "ppc|ppc64")
|
||
|
list(APPEND libfec_sources
|
||
|
viterbi27_av.c
|
||
|
viterbi29_av.c
|
||
|
viterbi39_av.c
|
||
|
viterbi615_av.c
|
||
|
encode_rs_av.c
|
||
|
dotprod_av.c
|
||
|
sumsq_av.c
|
||
|
peakval_av.c
|
||
|
cpu_mode_ppc.c
|
||
|
)
|
||
|
else()
|
||
|
list(APPEND libfec_sources
|
||
|
cpu_mode_generic.c
|
||
|
)
|
||
|
|
||
|
endif()
|
||
|
|
||
|
|
||
|
list(APPEND libfec_sources
|
||
|
fec.c
|
||
|
sim.c
|
||
|
viterbi27.c
|
||
|
viterbi27_port.c
|
||
|
viterbi29.c
|
||
|
viterbi29_port.c
|
||
|
viterbi39.c
|
||
|
viterbi39_port.c
|
||
|
viterbi615.c
|
||
|
viterbi615_port.c
|
||
|
encode_rs_char.c
|
||
|
encode_rs_int.c
|
||
|
encode_rs_8.c
|
||
|
decode_rs_char.c
|
||
|
decode_rs_int.c
|
||
|
decode_rs_8.c
|
||
|
init_rs_char.c
|
||
|
init_rs_int.c
|
||
|
encode_rs_ccsds.c
|
||
|
decode_rs_ccsds.c
|
||
|
dotprod.c
|
||
|
dotprod_port.c
|
||
|
peakval.c
|
||
|
peakval_port.c
|
||
|
sumsq.c
|
||
|
sumsq_port.c
|
||
|
ccsds_tab.c
|
||
|
ccsds_tal.c
|
||
|
)
|
||
|
|
||
|
########################################################################
|
||
|
# Setup libraries
|
||
|
########################################################################
|
||
|
|
||
|
# generate ccsds_tab.c
|
||
|
add_executable(gen_ccsds gen_ccsds.c init_rs_char.c)
|
||
|
add_custom_command(
|
||
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ccsds_tab.c
|
||
|
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gen_ccsds > ccsds_tab.c
|
||
|
DEPENDS gen_ccsds
|
||
|
)
|
||
|
|
||
|
# generate ccsds_tal.c
|
||
|
add_executable(gen_ccsds_tal gen_ccsds_tal.c)
|
||
|
add_custom_command(
|
||
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ccsds_tal.c
|
||
|
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gen_ccsds_tal > ccsds_tal.c
|
||
|
DEPENDS gen_ccsds_tal
|
||
|
)
|
||
|
|
||
|
# libfec
|
||
|
add_library(gnuradio-satnogs-fec SHARED ${libfec_sources})
|
||
|
|
||
|
target_link_libraries(gnuradio-satnogs-fec ${M_LIB})
|
||
|
|
||
|
target_include_directories(gnuradio-satnogs-fec
|
||
|
PUBLIC
|
||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/satnogs/libfec>
|
||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../include/satnogs/libfec>
|
||
|
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/
|
||
|
)
|
||
|
|
||
|
if(APPLE)
|
||
|
set_target_properties(gnuradio-satnogs-fec PROPERTIES
|
||
|
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
|
||
|
)
|
||
|
endif(APPLE)
|
||
|
|
||
|
########################################################################
|
||
|
# Install built library files
|
||
|
########################################################################
|
||
|
include(GrMiscUtils)
|
||
|
GR_LIBRARY_FOO(gnuradio-satnogs-fec)
|
||
|
|
||
|
|