################################################################################ # OpenAirInterface # Copyright(c) 1999 - 2014 Eurecom # # OpenAirInterface is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # OpenAirInterface is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with OpenAirInterface.The full GNU General Public License is # included in this distribution in the file called "COPYING". If not, # see . # # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr # OpenAirInterface Tech : openair_tech@eurecom.fr # OpenAirInterface Dev : openair4g-devel@eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # Author: laurent THOMAS ############################################################################### cmake_minimum_required (VERSION 2.8) ############################################# # Base directories, compatible with legacy OAI building ################################################ set (OPENAIR_DIR $ENV{OPENAIR_DIR}) set (OPENAIR1_DIR ${OPENAIR_DIR}/openair1) set (OPENAIR2_DIR ${OPENAIR_DIR}/openair2) set (OPENAIR3_DIR ${OPENAIR_DIR}/openair3) set (OPENAIR_TARGETS ${OPENAIR_DIR}/targets) set (OPENAIRCN_DIR ${OPENAIR_DIR}/openair-cn) set (OPENAIR_CMAKE ${OPENAIR_DIR}/cmake_targets) set (OPENAIR_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) project (OpenAirInterface) ########################################### # macros to define options as there is numerous options in oai ################################################ macro(add_boolean_option name val helpstr) if(DEFINED ${name}) set(value ${${name}}) else(DEFINED ${name}) set(value ${val}) endif() set(${name} ${value} CACHE STRING "${helpstr}") set_property(CACHE ${name} PROPERTY TYPE BOOL) if (${value}) add_definitions("-D${name}") endif (${value}) endmacro(add_boolean_option) macro(add_integer_option name val helpstr) if(DEFINED ${name}) set(value ${${name}}) else(DEFINED ${name}) set(value ${val}) endif() set(${name} ${value} CACHE STRING "${helpstr}") add_definitions("-D${name}=${value}") endmacro(add_integer_option) macro(add_list1_option name val helpstr) if(DEFINED ${name}) set(value ${${name}}) else(DEFINED ${name}) set(value ${val}) endif() set(${name} ${value} CACHE STRING "${helpstr}") set_property(CACHE ${name} PROPERTY STRINGS ${ARGN}) if(NOT "${value}" STREQUAL "False") add_definitions("-D${name}=${value}") endif() endmacro(add_list1_option) macro(add_list2_option name val helpstr) if(DEFINED ${name}) set(value ${${name}}) else(DEFINED ${name}) set(value ${val}) endif() set(${name} ${value} CACHE STRING "${helpstr}") set_property(CACHE ${name} PROPERTY STRINGS ${ARGN}) if(NOT "${value}" STREQUAL "False") add_definitions("-D${value}=1") endif() endmacro(add_list2_option) #################################################### # compilation flags ############################################# add_list1_option(CMAKE_BUILD_TYPE "RelWithDebInfo" "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." Debug Release RelWithDebInfo MinSizeRel) set(CMAKE_BUILD_TYPE "RelWithDebInfo") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2 -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing -rdynamic -funroll-loops -Wno-packed-bitfield-compat") # set a flag for changes in the source code # these changes are related to hardcoded path to include .h files add_definitions("-DCMAKER") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb -DMALLOC_CHECK_=3") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ggdb -DMALLOC_CHECK_=3 -O3") # Below has been put in comment because does not work with # SVN authentication. # #find_package(Subversion) #if(SUBVERSION_FOUND) # Subversion_WC_INFO(${OPENAIR_DIR} openair) # set (FIRMWARE_VERSION "${openair_WC_REVISION} - ${openair_WC_LAST_CHANGED_DATE}") # Subversion_WC_LOG(${OPENAIR_DIR} Project) #else() # set (FIRMWARE_VERSION "No svn information") #endif() #add_definitions("-DFIRMWARE_VERSION=\"${FIRMWARE_VERSION}\"") # Below is a hard-coded info set (FIRMWARE_VERSION "No svn information") add_definitions("-DFIRMWARE_VERSION=\"${FIRMWARE_VERSION}\"") # Debug related options ######################################### add_boolean_option(MSG_PRINT False "print debug messages") add_boolean_option(DISABLE_XER_PRINT False "print XER Format") add_boolean_option(XER_PRINT False "print XER Format") add_boolean_option(RRC_MSG_PRINT False "print RRC messages") add_boolean_option(PDCP_MSG_PRINT False "print PDCP messages") add_boolean_option(TEST_OMG False "???") add_boolean_option(DEBUG_OMG False "???") add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope") add_boolean_option(ENABLE_ITTI True "ITTI is internal messaging, should remain enabled for most targets") set (ITTI_DIR ${OPENAIR_DIR}/common/utils/itti) if (${ENABLE_ITTI}) add_library(ITTI # add .h files if depend on (this one is generated) ${ITTI_DIR}/intertask_interface.h ${ITTI_DIR}/intertask_interface.c ${ITTI_DIR}/intertask_interface_dump.c ${ITTI_DIR}/backtrace.c ${ITTI_DIR}/memory_pools.c ${ITTI_DIR}/signals.c ${ITTI_DIR}/timer.c ) set(ITTI_LIB ITTI) set(EXMIMO_IOT) endif (${ENABLE_ITTI}) add_boolean_option(RTAI False "Use RTAI") if (${RTAI}) set(LOWLATENCY False) add_definitions("-DENABLE_RTAI_CLOCK") add_definitions("-DCONFIG_RTAI_LXRT_INLINE") include_directories ("/usr/realtime/include") include_directories ("/usr/realtime/include/asm") set(RTAI_SOURCE sched_dlsch.c sched_rx_pdsch.c rt_wrapper.c vcd_signal_dumper.c log.c) endif (${RTAI}) ############################# # ASN.1 grammar C code generation & dependancies ################################ # A difficulty: asn1c generates C code of a un-predictable list of files # so, generate the c from asn1c once at cmake run time # So, if someone modify the asn.1 source file in such as way that it will create # (so creating new asn.1 objects instead of modifying the object attributes) # New C code source file, cmake must be re-run (instead of re-running make only) ############# set(asn1c_call "${OPENAIR_CMAKE}/tools/generate_asn1.bash") set(asn1_generated_dir ${OPENAIR_BIN_DIR}) # RRC ###### add_list2_option(RRC_ASN1_VERSION "Rel10" "ASN.1 version of RRC interface" "Rel8" "Rel10" "CBA") if (${RRC_ASN1_VERSION} STREQUAL "Rel8") set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-86.asn) elseif (${RRC_ASN1_VERSION} STREQUAL "Rel10") set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-a20.asn) endif (${RRC_ASN1_VERSION} STREQUAL "Rel8") set (RRC_FULL_DIR ${asn1_generated_dir}/${RRC_ASN1_VERSION}) if(NOT EXISTS ${asn1c_call}) message( FATAL_ERROR "The script ${asn1c_call} must be present" ) endif(NOT EXISTS ${asn1c_call}) execute_process(COMMAND ${asn1c_call} ${RRC_FULL_DIR} ${RRC_GRAMMAR}) file(GLOB rrc_source ${RRC_FULL_DIR}/*.c) set(rrc_source ${rrc_source} ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1_msg.c) file(GLOB rrc_h ${RRC_FULL_DIR}/*.h) set(rrc_h ${rrc_h} ${RRC_FULL_DIR}/asn1_constants.h) add_library(RRC_LIB ${rrc_h} ${rrc_source}) include_directories ("${RRC_FULL_DIR}") # add the command to generate the source code # Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make add_custom_command ( OUTPUT ${RRC_FULL_DIR}/asn1_constants.h COMMAND ${asn1c_call} ${RRC_FULL_DIR} ${RRC_GRAMMAR} DEPENDS ${RRC_GRAMMAR} ) # S1AP # Same limitation as described in RRC: unknown generated file list # so we generate it at cmake time ############## add_list1_option(S1AP_VERSION R10 "S1AP Asn.1 grammar version" R8 R9 R10) set(S1AP_DIR ${OPENAIRCN_DIR}/S1AP) if (${S1AP_VERSION} STREQUAL "R10") set (ASN1RELDIR R10.5) add_definitions("-DUPDATE_RELEASE_9 -DUPDATE_RELEASE_10") elseif (${S1AP_VERSION} STREQUAL "R9") set (ASN1RELDIR R9.8) add_definitions("-DUPDATE_RELEASE_9") else(${S1AP_VERSION} STREQUAL "R8") set (ASN1RELDIR R8.10) endif(${S1AP_VERSION} STREQUAL "R10") set(S1AP_ASN_DIR ${S1AP_DIR}/MESSAGES/ASN1/${ASN1RELDIR}) set(S1AP_ASN_FILES ${S1AP_ASN_DIR}/S1AP-CommonDataTypes.asn ${S1AP_ASN_DIR}/S1AP-Constants.asn ${S1AP_ASN_DIR}/S1AP-IEs.asn ${S1AP_ASN_DIR}/S1AP-PDU.asn ) set(S1AP_C_DIR ${asn1_generated_dir}/${ASN1RELDIR}) execute_process(COMMAND ${asn1c_call} ${S1AP_C_DIR} ${S1AP_ASN_FILES}) file(GLOB S1AP_source ${S1AP_C_DIR}/*.c) set(S1AP_OAI_SRC ${S1AP_DIR}/s1ap_common.c ${S1AP_DIR}/s1ap_eNB.c ${S1AP_DIR}/s1ap_eNB_context_management_procedures.c ${S1AP_DIR}/s1ap_eNB_decoder.c ${S1AP_DIR}/s1ap_eNB_encoder.c ${S1AP_DIR}/s1ap_eNB_handlers.c ${S1AP_DIR}/s1ap_eNB_itti_messaging.c ${S1AP_DIR}/s1ap_eNB_management_procedures.c ${S1AP_DIR}/s1ap_eNB_nas_procedures.c ${S1AP_DIR}/s1ap_eNB_nnsf.c ${S1AP_DIR}/s1ap_eNB_overload.c ${S1AP_DIR}/s1ap_eNB_trace.c ${S1AP_DIR}/s1ap_eNB_ue_context.c ) set(S1AP_OAI_generated ${S1AP_C_DIR}/s1ap_decoder.c ${S1AP_C_DIR}/s1ap_encoder.c ${S1AP_C_DIR}/s1ap_xer_print.c ${S1AP_C_DIR}/s1ap_ies_defs.h ) file(GLOB s1ap_h ${S1AP_C_DIR}/*.h) set(s1ap_h ${s1ap_h} ${S1AP_C_DIR}/s1ap_ies_defs.h) add_custom_command ( OUTPUT ${S1AP_OAI_generated} COMMAND ${asn1c_call} ${S1AP_C_DIR} ${S1AP_ASN_FILES} COMMAND python ${S1AP_DIR}/MESSAGES/ASN1/asn1tostruct.py -f${S1AP_ASN_DIR}/S1AP-PDU-Contents.asn -o${S1AP_C_DIR} DEPENDS ${S1AP_ASN_FILES} ) add_library(s1ap_asn1 ${S1AP_OAI_SRC} ${S1AP_OAI_generated} ${S1AP_source}) set(S1AP_LIB s1ap_asn1) include_directories ("${S1AP_C_DIR}") include_directories ("${S1AP_DIR}") # Hardware dependant options ################################### add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4") add_list1_option(NB_ANTENNAS_TX "2" "Number of antennas in transmission" "1" "2" "4") add_list1_option(NB_ANTENNAS_TXRX "2" "Number of antennas in ????" "1" "2" "4") add_list2_option(RF_BOARD "EXMIMO" "RF head type" "False" "EXMIMO" "USRP" "ETHERNET") if (${RF_BOARD} STREQUAL "EXMIMO") set(DRIVER2013) include_directories ("${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/") include_directories ("${OPENAIR_TARGETS}/ARCH/EXMIMO/DEFS/") set(HW_SOURCE ${HW_SOURCE} ${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c ${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c) elseif (${RF_BOARD} STREQUAL "USRP") include_directories("/opt/include/uhd") LINK_DIRECTORIES("/opt/lib") set(option_USRP "uhd") elseif (${RF_BOARD} STREQUAL "ETHERNET") include_directories ("${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB") endif (${RF_BOARD} STREQUAL "EXMIMO") include_directories ("${OPENAIR_TARGETS}/ARCH/COMMON") #################### # to be documented options ################### add_boolean_option(ADDR_CONF False "specific to oaisim") add_boolean_option(ASSERT True "???") add_boolean_option(DRIVER2013 True "????") add_boolean_option(ENABLE_FXP True "????") add_boolean_option(ENABLE_NAS_UE_LOGGING True "????") add_boolean_option(ENABLE_NEW_MULTICAST False "specific to oaisim") add_boolean_option(ENABLE_PDCP_NETLINK_FIFO False "????") add_boolean_option(ENABLE_PGM_TRANSPORT False "specific to oaisim") add_boolean_option(ENABLE_RAL False "????") add_boolean_option(ENABLE_SECURITY True "???") add_boolean_option(ENABLE_USE_CPU_EXECUTION_TIME True "Add data in vcd traces: disable it if perf issues") add_boolean_option(ENABLE_USE_MME True "???") add_boolean_option(ENABLE_VCD_FIFO True "Seems legacy: always true now") add_boolean_option(ENB_MODE True "???") add_boolean_option(HARD_RT False "???") add_boolean_option(JUMBO_FRAME True "???") add_boolean_option(LARGE_SCALE False "specific to oaisim: defines max eNB=2 and max UE=120") add_boolean_option(LINK_PDCP_TO_GTPV1U True "????") add_boolean_option(LINUX_LIST False "???") add_boolean_option(LINUX True "???") add_boolean_option(LOCALIZATION False "???") add_boolean_option(LOG_NO_THREAD True "Disable thread for log, seems always set to true") add_boolean_option(LOWLATENCY True "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14") add_boolean_option(MAC_CONTEXT True "specific to oaisim") add_integer_option(MAX_NUM_CCs 1 "????") add_boolean_option(MIH_C_MEDIEVAL_EXTENSIONS True "????") add_boolean_option(MU_RECEIVER False "????") add_boolean_option(NAS_ADDRESS_FIX False "specific to oaisim: for nasmesh driver") add_boolean_option(NAS_MME False "NAS_UE and NAS_MME are incompatible options") add_boolean_option(NAS_NETLINK False "???? Must be True to compile nasmesh driver without rtai") add_boolean_option(NAS_UE True "NAS_UE and NAS_MME are incompatible options") add_boolean_option(NEW_FFT True "????") add_boolean_option(NO_RRM True "????") add_boolean_option(OAI_EMU False "specific to oaisim") add_boolean_option(OAISIM False "specific to oaisim") add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????") add_boolean_option(OAI_NW_DRIVER_USE_NETLINK True "????") add_boolean_option(OPENAIR1 True "????") add_boolean_option(OPENAIR2 True "????") add_boolean_option(OPENAIR_EMU False "specific to oaisim") add_boolean_option(OPENAIR_LTE True "Seems legacy: keep it to true") add_boolean_option(PBS_SIM False "????") add_boolean_option(PC_DSP True "????") add_boolean_option(PC_TARGET True "????") add_boolean_option(PERFECT_CE False "????") add_boolean_option(PHY_ABSTRACTION False "specific to oaisim") add_boolean_option(PHY_CONTEXT True "not clear: must remain False for dlsim") add_boolean_option(PHY_EMUL False "not clear: must remain False for dlsim") add_boolean_option(PHYSIM True "??? set in lte-softmodem, for L1 simulators dlsim, ulsim, ...?") add_boolean_option(PUCCH True "????") add_boolean_option(RANDOM_BF False "????") add_boolean_option(RLC_STOP_ON_LOST_PDU False "Fatal assert in this case") add_boolean_option(SECU False "???") add_boolean_option(SMBV False "Rohde&Schwarz SMBV100A vector signal generator") add_boolean_option(SPECTRA False "???") add_boolean_option(UE_BUILD True "????") add_boolean_option(USE_3GPP_ADDR_AS_LINK_ADDR False "As per attribute name") add_boolean_option(USE_MME False "this flag is used only one time in lte-softmodem.c") add_boolean_option(USER_MODE True "????") add_integer_option(PACKAGE_NAME "NotDefined" "As per attribute name") add_boolean_option(EMOS False "????") if(${EMOS}) add_definitions("-D_FILE_OFFSET_BITS=64") set(EMOS_LIB gps) endif(${EMOS}) # add the binary tree to the search path for include files ####################################################### # We will find ConfigOAI.h after generation in target directory include_directories("${OPENAIR_BIN_DIR}") # add directories to find all include files # the internal rule is to use generic names such as defs.h # but to make it uniq name as adding the relative path in the include directtive # example: #include "RRC/LITE/defs.h" #find_path (include_dirs_all *.h ${OPENAIR_DIR}) #find_path (include_dirs_all *.h PATHS /usr/include NO_CMAKE_PATH) #include_directories("${include_dirs_all}") # Legacy exact order include_directories("${OPENAIR1_DIR}") include_directories("${OPENAIR2_DIR}/NAS") include_directories("${OPENAIR2_DIR}") include_directories("${OPENAIR2_DIR}/COMMON") include_directories("${OPENAIR2_DIR}/LAYER2/RLC") include_directories("${OPENAIR2_DIR}/LAYER2/RLC/AM_v9.3.0") include_directories("${OPENAIR2_DIR}/LAYER2/RLC/UM_v9.3.0") include_directories("${OPENAIR2_DIR}/LAYER2/RLC/TM_v9.3.0") include_directories("${OPENAIR2_DIR}/LAYER2/PDCP_v10.1.0") include_directories("${OPENAIR2_DIR}/RRC/LITE/MESSAGES") include_directories("${OPENAIR2_DIR}/RRC/LITE") include_directories("${OPENAIR3_DIR}/RAL-LTE/INTERFACE-802.21/INCLUDE") include_directories("${OPENAIR3_DIR}/RAL-LTE/LTE_RAL_ENB/INCLUDE") include_directories("${OPENAIR3_DIR}/RAL-LTE/LTE_RAL_UE/INCLUDE") include_directories("${OPENAIR_DIR}/common/utils") include_directories("${OPENAIR_DIR}/common/utils/collection/hashtable") include_directories("${OPENAIR_DIR}/common/utils/itti") include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/api/network") include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/include") include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/ies") include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/emm/msg") include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/esm/msg") include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/util") include_directories("${OPENAIRCN_DIR}/SECU") include_directories("${OPENAIRCN_DIR}/SCTP") include_directories("${OPENAIR2_DIR}/X2AP") include_directories("${OPENAIRCN_DIR}/S1AP") include_directories("${OPENAIRCN_DIR}/UDP") include_directories("${OPENAIRCN_DIR}/GTPV1-U") include_directories("${OPENAIR_DIR}/targets/COMMON") include_directories("${OPENAIR_DIR}/targets/ARCH/COMMON") include_directories("${OPENAIR_DIR}/targets/ARCH/EXMIMO/USERSPACE/LIB/") include_directories("${OPENAIR_DIR}/targets/ARCH/EXMIMO/DEFS") include_directories("${OPENAIR2_DIR}/ENB_APP") include_directories("${OPENAIR2_DIR}/UTIL") include_directories("${OPENAIR2_DIR}/UTIL/OSA") include_directories("${OPENAIR2_DIR}/UTIL/LFDS/liblfds6.1.1/liblfds611/inc") include_directories("${OPENAIR2_DIR}/UTIL/MEM") include_directories("${OPENAIR2_DIR}/UTIL/LISTS") include_directories("${OPENAIR2_DIR}/UTIL/FIFO") include_directories("${OPENAIR2_DIR}/UTIL/OCG") include_directories("${OPENAIR2_DIR}/UTIL/LOG") include_directories("${OPENAIR2_DIR}/UTIL/MATH") include_directories("${OPENAIR2_DIR}/UTIL/TIMER") include_directories("${OPENAIR2_DIR}/UTIL/OMG") include_directories("${OPENAIR2_DIR}/UTIL/OTG") include_directories("${OPENAIR2_DIR}/UTIL/CLI") include_directories("${OPENAIR2_DIR}/UTIL/OPT") include_directories("${OPENAIR2_DIR}/UTIL/OMV") include_directories("${OPENAIR2_DIR}/RRC/LITE/MESSAGES") include_directories("${OPENAIRCN_DIR}/COMMON") include_directories("${OPENAIRCN_DIR}/UTILS") include_directories("${OPENAIRCN_DIR}/NAS") include_directories("${OPENAIRCN_DIR}/GTPV1-U/nw-gtpv1u/shared") include_directories("${OPENAIRCN_DIR}/GTPV1-U/nw-gtpv1u/include") # define where are the source files ################################## #add_subdirectory (${OPENAIR_DIR} .) # define libraries #add_library(MathFunctions mysqrt.cxx) function(add_whole_dir dir lib_name) file(GLOB mylist ${dir}) add_library(${lib_name} ${mylist}) endfunction(add_whole_dir) function(add_whole_tree dir lib_name) file(GLOB_RECURSE mylist "${dir}/*.c") add_library(${lib_name} ${mylist}) endfunction(add_whole_tree) # Utilities Library ################ set(UTIL_SRC ${OPENAIR_DIR}/common/utils/collection/hashtable/hashtable.c ${OPENAIR_DIR}/common/utils/collection/hashtable/obj_hashtable.c ${OPENAIR2_DIR}/UTIL/CLI/cli.c ${OPENAIR2_DIR}/UTIL/CLI/cli_cmd.c ${OPENAIR2_DIR}/UTIL/CLI/cli_server.c ${OPENAIR2_DIR}/UTIL/FIFO/pad_list.c ${OPENAIR2_DIR}/UTIL/LISTS/list.c ${OPENAIR2_DIR}/UTIL/LISTS/list2.c ${OPENAIR2_DIR}/UTIL/LOG/log.c ${OPENAIR2_DIR}/UTIL/LOG/vcd_signal_dumper.c ${OPENAIR2_DIR}/UTIL/MATH/oml.c ${OPENAIR2_DIR}/UTIL/MEM/mem_block.c ${OPENAIR2_DIR}/UTIL/OCG/OCG.c ${OPENAIR2_DIR}/UTIL/OCG/OCG_create_dir.c ${OPENAIR2_DIR}/UTIL/OCG/OCG_detect_file.c ${OPENAIR2_DIR}/UTIL/OCG/OCG_generate_report.c ${OPENAIR2_DIR}/UTIL/OCG/OCG_parse_filename.c ${OPENAIR2_DIR}/UTIL/OCG/OCG_parse_XML.c ${OPENAIR2_DIR}/UTIL/OCG/OCG_save_XML.c ${OPENAIR2_DIR}/UTIL/OMG/client_traci_OMG.c ${OPENAIR2_DIR}/UTIL/OMG/common.c ${OPENAIR2_DIR}/UTIL/OMG/grid.c ${OPENAIR2_DIR}/UTIL/OMG/id_manager.c ${OPENAIR2_DIR}/UTIL/OMG/job.c ${OPENAIR2_DIR}/UTIL/OMG/mobility_parser.c ${OPENAIR2_DIR}/UTIL/OMG/omg.c ${OPENAIR2_DIR}/UTIL/OMG/omg_hashtable.c ${OPENAIR2_DIR}/UTIL/OMG/rwalk.c ${OPENAIR2_DIR}/UTIL/OMG/rwp.c ${OPENAIR2_DIR}/UTIL/OMG/socket_traci_OMG.c ${OPENAIR2_DIR}/UTIL/OMG/static.c ${OPENAIR2_DIR}/UTIL/OMG/steadystaterwp.c ${OPENAIR2_DIR}/UTIL/OMG/storage_traci_OMG.c ${OPENAIR2_DIR}/UTIL/OMG/trace.c ${OPENAIR2_DIR}/UTIL/OMG/trace_hashtable.c ${OPENAIR2_DIR}/UTIL/OPT/probe.c ${OPENAIR2_DIR}/UTIL/OTG/otg_tx.c ${OPENAIR2_DIR}/UTIL/OTG/otg.c ${OPENAIR2_DIR}/UTIL/OTG/otg_kpi.c ${OPENAIR2_DIR}/UTIL/OTG/otg_models.c ${OPENAIR2_DIR}/UTIL/OTG/otg_form.c ${OPENAIR2_DIR}/UTIL/OTG/otg_rx.c ) add_library(UTIL ${UTIL_SRC}) set(SECU_OSA_SRC ${OPENAIR2_DIR}/UTIL/OSA/osa_key_deriver.c ${OPENAIR2_DIR}/UTIL/OSA/osa_rijndael.c ${OPENAIR2_DIR}/UTIL/OSA/osa_snow3g.c ${OPENAIR2_DIR}/UTIL/OSA/osa_stream_eea.c ${OPENAIR2_DIR}/UTIL/OSA/osa_stream_eia.c ) add_library(SECU_OSA ${SECU_OSA_SRC}) set(SECU_CN_SRC ${OPENAIRCN_DIR}/SECU/kdf.c ${OPENAIRCN_DIR}/SECU/rijndael.c ${OPENAIRCN_DIR}/SECU/snow3g.c ${OPENAIRCN_DIR}/SECU/key_nas_deriver.c ${OPENAIRCN_DIR}/SECU/nas_stream_eea1.c ${OPENAIRCN_DIR}/SECU/nas_stream_eia1.c ${OPENAIRCN_DIR}/SECU/nas_stream_eea2.c ${OPENAIRCN_DIR}/SECU/nas_stream_eia2.c ) add_library(SECU_CN ${SECU_CN_SRC}) # Scheduler ################################" add_whole_dir(${OPENAIR1_DIR}/SCHED/*.c SCHED_LIB) # Layer 1 ############################# set(PHY_SRC # depend on code generation from asn1c ${RRC_FULL_DIR}/asn1_constants.h # actual source ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pss.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/sss.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pilots.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pilots_mbsfn.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dlsch_coding.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dlsch_modulation.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dlsch_demodulation.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dlsch_llr_computation.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/power_control.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dlsch_decoding.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dlsch_scrambling.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dci_tools.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/uci_tools.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/lte_mcs.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pbch.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dci.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/phich.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pcfich.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pucch.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/prach.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pmch.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/group_hopping.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/srs_modulation.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/drs_modulation.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/ulsch_modulation.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/ulsch_demodulation.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/ulsch_coding.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/ulsch_decoding.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/rar_tools.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/print_stats.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/initial_sync.c ${OPENAIR1_DIR}/PHY/MODULATION/ofdm_mod.c ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep.c ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_mbsfn.c ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_ul.c ${OPENAIR1_DIR}/PHY/MODULATION/ul_7_5_kHz.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/freq_equalization.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_sync_time.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_sync_timefreq.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_adjust_sync.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_est_freq_offset.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_eNB_measurements.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/adjust_gain.c ${OPENAIR1_DIR}/PHY/LTE_REFSIG/lte_dl_cell_spec.c ${OPENAIR1_DIR}/PHY/LTE_REFSIG/lte_dl_uespec.c ${OPENAIR1_DIR}/PHY/LTE_REFSIG/lte_gold.c ${OPENAIR1_DIR}/PHY/LTE_REFSIG/lte_gold_mbsfn.c ${OPENAIR1_DIR}/PHY/LTE_REFSIG/lte_dl_mbsfn.c ${OPENAIR1_DIR}/PHY/LTE_REFSIG/lte_ul_ref.c ${OPENAIR1_DIR}/PHY/CODING/lte_segmentation.c ${OPENAIR1_DIR}/PHY/CODING/ccoding_byte.c ${OPENAIR1_DIR}/PHY/CODING/ccoding_byte_lte.c ${OPENAIR1_DIR}/PHY/CODING/3gpplte_sse.c ${OPENAIR1_DIR}/PHY/CODING/crc_byte.c ${OPENAIR1_DIR}/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c ${OPENAIR1_DIR}/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c ${OPENAIR1_DIR}/PHY/CODING/lte_rate_matching.c ${OPENAIR1_DIR}/PHY/CODING/rate_matching.c ${OPENAIR1_DIR}/PHY/CODING/viterbi.c ${OPENAIR1_DIR}/PHY/CODING/viterbi_lte.c ${OPENAIR1_DIR}/PHY/INIT/lte_init.c ${OPENAIR1_DIR}/PHY/INIT/lte_parms.c ${OPENAIR1_DIR}/PHY/INIT/init_top.c ${OPENAIR1_DIR}/PHY/TOOLS/file_output.c ${OPENAIR1_DIR}/PHY/TOOLS/fft.c ${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c ${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c ${OPENAIR1_DIR}/PHY/TOOLS/cmult_sv.c ${OPENAIR1_DIR}/PHY/TOOLS/cmult_vv.c ${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c ${OPENAIR1_DIR}/PHY/TOOLS/cdot_prod.c ${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c ${OPENAIR1_DIR}/PHY/TOOLS/dB_routines.c ${OPENAIR1_DIR}/PHY/TOOLS/sqrt.c ${OPENAIR1_DIR}/PHY/TOOLS/time_meas.c ${OPENAIR1_DIR}/PHY/TOOLS/lut.c ) if (${SMBV}) set(PHY_SRC "${PHY_SRC} ${OPENAIR1_DIR}/PHY/TOOLS/smbv.c") endif (${SMBV}) add_library(PHY ${PHY_SRC}) #Layer 2 library ##################### set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC) set(RLC_DIR ${OPENAIR2_DIR}/LAYER2/RLC) set(RLC_UM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/UM_v9.3.0) set(RLC_AM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/AM_v9.3.0) set(RLC_TM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/TM_v9.3.0) set(RRC_DIR ${OPENAIR2_DIR}/RRC/LITE) set(PDCP_DIR ${OPENAIR2_DIR}/LAYER2/PDCP_v10.1.0) set(L2_SRC ${OPENAIR2_DIR}/LAYER2/openair2_proc.c ${PDCP_DIR}/pdcp.c ${PDCP_DIR}/pdcp_fifo.c ${PDCP_DIR}/pdcp_sequence_manager.c ${PDCP_DIR}/pdcp_primitives.c ${PDCP_DIR}/pdcp_util.c ${PDCP_DIR}/pdcp_security.c ${PDCP_DIR}/pdcp_netlink.c ${RLC_AM_DIR}/rlc_am.c ${RLC_AM_DIR}/rlc_am_init.c ${RLC_AM_DIR}/rlc_am_timer_poll_retransmit.c ${RLC_AM_DIR}/rlc_am_timer_reordering.c ${RLC_AM_DIR}/rlc_am_timer_status_prohibit.c ${RLC_AM_DIR}/rlc_am_segment.c ${RLC_AM_DIR}/rlc_am_segments_holes.c ${RLC_AM_DIR}/rlc_am_in_sdu.c ${RLC_AM_DIR}/rlc_am_receiver.c ${RLC_AM_DIR}/rlc_am_retransmit.c ${RLC_AM_DIR}/rlc_am_windows.c ${RLC_AM_DIR}/rlc_am_rx_list.c ${RLC_AM_DIR}/rlc_am_reassembly.c ${RLC_AM_DIR}/rlc_am_status_report.c ${RLC_TM_DIR}/rlc_tm.c ${RLC_TM_DIR}/rlc_tm_init.c ${RLC_UM_DIR}/rlc_um.c ${RLC_UM_DIR}/rlc_um_fsm.c ${RLC_UM_DIR}/rlc_um_control_primitives.c ${RLC_UM_DIR}/rlc_um_segment.c ${RLC_UM_DIR}/rlc_um_reassembly.c ${RLC_UM_DIR}/rlc_um_receiver.c ${RLC_UM_DIR}/rlc_um_dar.c ${RLC_DIR}/rlc_mac.c ${RLC_DIR}/rlc.c ${RLC_DIR}/rlc_rrc.c ${RLC_DIR}/rlc_mpls.c ${RRC_DIR}/rrc_UE.c ${RRC_DIR}/rrc_eNB.c ${RRC_DIR}/rrc_eNB_S1AP.c ${RRC_DIR}/rrc_common.c ${RRC_DIR}/L2_interface.c ) set (MAC_SRC ${MAC_DIR}/lte_transport_init.c ${MAC_DIR}/main.c ${MAC_DIR}/ue_procedures.c ${MAC_DIR}/ra_procedures.c ${MAC_DIR}/l1_helpers.c ${MAC_DIR}/rar_tools.c ${MAC_DIR}/eNB_scheduler.c ${MAC_DIR}/eNB_scheduler_dlsch.c ${MAC_DIR}/eNB_scheduler_ulsch.c ${MAC_DIR}/eNB_scheduler_mch.c ${MAC_DIR}/eNB_scheduler_bch.c ${MAC_DIR}/eNB_scheduler_primitives.c ${MAC_DIR}/eNB_scheduler_RA.c ${MAC_DIR}/pre_processor.c ${MAC_DIR}/config.c ) set (ENB_APP_SRC ${OPENAIR2_DIR}/ENB_APP/enb_app.c ${OPENAIR2_DIR}/ENB_APP/enb_config.c ) add_library(L2 ${L2_SRC} ${MAC_SRC} ${ENB_APP_SRC} ${OPENAIR2_DIR}/RRC/L2_INTERFACE/openair_rrc_L2_interface.c) # L3 Libs ########################## set(RAL_LTE_DIR ${OPENAIR3_DIR}/RAL-LTE/) if (${ENABLE_RAL}) set(RAL_LTE_SRC ${RRC_DIR}/rrc_UE_ral.c ${RRC_DIR}/rrc_eNB_ral.c ${RAL_LTE_DIR}LTE_RAL_ENB/SRC/lteRALenb_action.c ${RAL_LTE_DIR}LTE_RAL_ENB/SRC/lteRALenb_main.c ${RAL_LTE_DIR}LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c ${RAL_LTE_DIR}LTE_RAL_ENB/SRC/lteRALenb_parameters.c ${RAL_LTE_DIR}LTE_RAL_ENB/SRC/lteRALenb_process.c ${RAL_LTE_DIR}LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c ${RAL_LTE_DIR}LTE_RAL_ENB/SRC/lteRALenb_subscribe.c ${RAL_LTE_DIR}LTE_RAL_ENB/SRC/lteRALenb_thresholds.c ${RAL_LTE_DIR}LTE_RAL_UE/SRC/lteRALue_action.c ${RAL_LTE_DIR}LTE_RAL_UE/SRC/lteRALue_main.c ${RAL_LTE_DIR}LTE_RAL_UE/SRC/lteRALue_mih_msg.c ${RAL_LTE_DIR}LTE_RAL_UE/SRC/lteRALue_parameters.c ${RAL_LTE_DIR}LTE_RAL_UE/SRC/lteRALue_process.c ${RAL_LTE_DIR}LTE_RAL_UE/SRC/lteRALue_rrc_msg.c ${RAL_LTE_DIR}LTE_RAL_UE/SRC/lteRALue_subscribe.c ${RAL_LTE_DIR}LTE_RAL_UE/SRC/lteRALue_thresholds.c ) add_library(RAL ${RAL_LTE_SRC}) set(RAL_LIB RAL) endif() if(MIH_C_MEDIEVAL_EXTENSIONS) set(MIH_SRC ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_header_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_msg_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_primitive_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_F2_general_data_types_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_F13_data_types_for_information_elements_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_L2_type_values_for_tlv_encoding.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_Medieval_extensions.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_bit_buffer.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C.c ) add_library(MIH ${MIH_SRC}) set(MIH_LIB MIH) endif() # CN libs ########################## set(GTPV1U_SRC ${OPENAIRCN_DIR}/GTPV1-U) set (libgtpv1u_SRC ${RRC_DIR}/rrc_eNB_GTPV1U.c ${GTPV1U_SRC}/nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c ${GTPV1U_SRC}/nw-gtpv1u/src/NwGtpv1uTrxn.c ${GTPV1U_SRC}/nw-gtpv1u/src/NwGtpv1uMsg.c ${GTPV1U_SRC}/nw-gtpv1u/src/NwGtpv1u.c ${GTPV1U_SRC}/gtpv1u_eNB.c ${GTPV1U_SRC}/gtpv1u_teid_pool.c ) add_library(GTPV1U ${libgtpv1u_SRC}) set(SCTP_SRC ${OPENAIRCN_DIR}/SCTP/sctp_common.c ${OPENAIRCN_DIR}/SCTP/sctp_eNB_task.c ${OPENAIRCN_DIR}/SCTP/sctp_eNB_itti_messaging.c ) add_library(SCTP ${SCTP_SRC}) add_library(UDP ${OPENAIRCN_DIR}/UDP/udp_eNB_task.c) set(NAS_SRC ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/) set(libnas_api_OBJS ${NAS_SRC}api/mme/mme_api.c ${NAS_SRC}api/network/nas_message.c ${NAS_SRC}api/network/as_message.c ${NAS_SRC}api/network/network_api.c ) set(libnas_emm_OBJS ${NAS_SRC}emm/Attach.c ${NAS_SRC}emm/Authentication.c ${NAS_SRC}emm/Detach.c ${NAS_SRC}emm/EmmCommon.c ${NAS_SRC}emm/emm_data_ctx.c ${NAS_SRC}emm/emm_main.c ${NAS_SRC}emm/EmmStatusHdl.c ${NAS_SRC}emm/Identification.c ${NAS_SRC}emm/IdleMode.c ${NAS_SRC}emm/LowerLayer.c ${NAS_SRC}emm/SecurityModeControl.c ${NAS_SRC}emm/ServiceRequestHdl.c ${NAS_SRC}emm/TrackingAreaUpdate.c ) set(libnas_emm_msg_OBJS ${NAS_SRC}emm/msg/AttachAccept.c ${NAS_SRC}emm/msg/AuthenticationFailure.c ${NAS_SRC}emm/msg/CsServiceNotification.c ${NAS_SRC}emm/msg/ExtendedServiceRequest.c ${NAS_SRC}emm/msg/IdentityResponse.c ${NAS_SRC}emm/msg/EmmInformation.c ${NAS_SRC}emm/msg/ServiceReject.c ${NAS_SRC}emm/msg/TrackingAreaUpdateReject.c ${NAS_SRC}emm/msg/AttachComplete.c ${NAS_SRC}emm/msg/AuthenticationReject.c ${NAS_SRC}emm/msg/DetachAccept.c ${NAS_SRC}emm/msg/GutiReallocationCommand.c ${NAS_SRC}emm/msg/emm_msg.c ${NAS_SRC}emm/msg/SecurityModeCommand.c ${NAS_SRC}emm/msg/ServiceRequest.c ${NAS_SRC}emm/msg/TrackingAreaUpdateRequest.c ${NAS_SRC}emm/msg/AttachReject.c ${NAS_SRC}emm/msg/AuthenticationRequest.c ${NAS_SRC}emm/msg/DetachRequest.c ${NAS_SRC}emm/msg/GutiReallocationComplete.c ${NAS_SRC}emm/msg/SecurityModeComplete.c ${NAS_SRC}emm/msg/TrackingAreaUpdateAccept.c ${NAS_SRC}emm/msg/UplinkNasTransport.c ${NAS_SRC}emm/msg/AttachRequest.c ${NAS_SRC}emm/msg/AuthenticationResponse.c ${NAS_SRC}emm/msg/DownlinkNasTransport.c ${NAS_SRC}emm/msg/EmmStatus.c ${NAS_SRC}emm/msg/IdentityRequest.c ${NAS_SRC}emm/msg/SecurityModeReject.c ${NAS_SRC}emm/msg/TrackingAreaUpdateComplete.c ) set(libnas_emm_sap_OBJS ${NAS_SRC}emm/sap/emm_as.c ${NAS_SRC}emm/sap/emm_cn.c ${NAS_SRC}emm/sap/EmmDeregisteredNoImsi.c ${NAS_SRC}emm/sap/emm_reg.c ${NAS_SRC}emm/sap/EmmRegisteredUpdateNeeded.c ${NAS_SRC}emm/sap/EmmDeregisteredNormalService.c ${NAS_SRC}emm/sap/emm_sap.c ${NAS_SRC}emm/sap/EmmDeregisteredPlmnSearch.c ${NAS_SRC}emm/sap/emm_esm.c ${NAS_SRC}emm/sap/EmmRegisteredAttemptingToUpdate.c ${NAS_SRC}emm/sap/emm_send.c ${NAS_SRC}emm/sap/EmmCommonProcedureInitiated.c ${NAS_SRC}emm/sap/EmmRegistered.c ${NAS_SRC}emm/sap/EmmDeregisteredAttachNeeded.c ${NAS_SRC}emm/sap/EmmRegisteredImsiDetachInitiated.c ${NAS_SRC}emm/sap/EmmServiceRequestInitiated.c ${NAS_SRC}emm/sap/EmmDeregisteredAttemptingToAttach.c ${NAS_SRC}emm/sap/emm_fsm.c ${NAS_SRC}emm/sap/EmmRegisteredInitiated.c ${NAS_SRC}emm/sap/EmmTrackingAreaUpdatingInitiated.c ${NAS_SRC}emm/sap/EmmDeregistered.c ${NAS_SRC}emm/sap/EmmRegisteredLimitedService.c ${NAS_SRC}emm/sap/EmmDeregisteredInitiated.c ${NAS_SRC}emm/sap/EmmNull.c ${NAS_SRC}emm/sap/EmmRegisteredNoCellAvailable.c ${NAS_SRC}emm/sap/EmmDeregisteredLimitedService.c ${NAS_SRC}emm/sap/emm_recv.c ${NAS_SRC}emm/sap/EmmRegisteredNormalService.c ${NAS_SRC}emm/sap/EmmDeregisteredNoCellAvailable.c ${NAS_SRC}emm/sap/EmmRegisteredPlmnSearch.c ) set (libnas_esm_OBJS ${NAS_SRC}esm/esm_ebr_context.c ${NAS_SRC}esm/PdnConnectivity.c ${NAS_SRC}esm/esm_ebr.c ${NAS_SRC}esm/EpsBearerContextDeactivation.c ${NAS_SRC}esm/DefaultEpsBearerContextActivation.c ${NAS_SRC}esm/DedicatedEpsBearerContextActivation.c ${NAS_SRC}esm/PdnDisconnect.c ${NAS_SRC}esm/EsmStatusHdl.c ${NAS_SRC}esm/esm_main.c ${NAS_SRC}esm/esm_pt.c ${NAS_SRC}esm/esm_ip.c ) set(libnas_esm_msg_OBJS ${NAS_SRC}esm/msg/ModifyEpsBearerContextRequest.c ${NAS_SRC}esm/msg/DeactivateEpsBearerContextRequest.c ${NAS_SRC}esm/msg/BearerResourceAllocationReject.c ${NAS_SRC}esm/msg/BearerResourceModificationRequest.c ${NAS_SRC}esm/msg/ActivateDedicatedEpsBearerContextRequest.c ${NAS_SRC}esm/msg/EsmInformationResponse.c ${NAS_SRC}esm/msg/PdnDisconnectReject.c ${NAS_SRC}esm/msg/ActivateDedicatedEpsBearerContextAccept.c ${NAS_SRC}esm/msg/PdnDisconnectRequest.c ${NAS_SRC}esm/msg/BearerResourceModificationReject.c ${NAS_SRC}esm/msg/ActivateDefaultEpsBearerContextAccept.c ${NAS_SRC}esm/msg/ActivateDedicatedEpsBearerContextReject.c ${NAS_SRC}esm/msg/ModifyEpsBearerContextAccept.c ${NAS_SRC}esm/msg/DeactivateEpsBearerContextAccept.c ${NAS_SRC}esm/msg/esm_msg.c ${NAS_SRC}esm/msg/EsmInformationRequest.c ${NAS_SRC}esm/msg/ActivateDefaultEpsBearerContextRequest.c ${NAS_SRC}esm/msg/ModifyEpsBearerContextReject.c ${NAS_SRC}esm/msg/EsmStatus.c ${NAS_SRC}esm/msg/PdnConnectivityReject.c ${NAS_SRC}esm/msg/ActivateDefaultEpsBearerContextReject.c ${NAS_SRC}esm/msg/PdnConnectivityRequest.c ${NAS_SRC}esm/msg/BearerResourceAllocationRequest.c ) set(libnas_esm_sap_OBJS ${NAS_SRC}esm/sap/esm_recv.c ${NAS_SRC}esm/sap/esm_send.c ${NAS_SRC}esm/sap/esm_sap.c ) set(libnas_ies_OBJS ${NAS_SRC}ies/UeSecurityCapability.c ${NAS_SRC}ies/SecurityHeaderType.c ${NAS_SRC}ies/RadioPriority.c ${NAS_SRC}ies/EpsAttachResult.c ${NAS_SRC}ies/ImeisvRequest.c ${NAS_SRC}ies/EmergencyNumberList.c ${NAS_SRC}ies/SupportedCodecList.c ${NAS_SRC}ies/EsmCause.c ${NAS_SRC}ies/NetworkName.c ${NAS_SRC}ies/AuthenticationResponseParameter.c ${NAS_SRC}ies/Cli.c ${NAS_SRC}ies/AccessPointName.c ${NAS_SRC}ies/DaylightSavingTime.c ${NAS_SRC}ies/LcsIndicator.c ${NAS_SRC}ies/PagingIdentity.c ${NAS_SRC}ies/EpsMobileIdentity.c ${NAS_SRC}ies/GutiType.c ${NAS_SRC}ies/NasKeySetIdentifier.c ${NAS_SRC}ies/CsfbResponse.c ${NAS_SRC}ies/PacketFlowIdentifier.c ${NAS_SRC}ies/ApnAggregateMaximumBitRate.c ${NAS_SRC}ies/EpsBearerContextStatus.c ${NAS_SRC}ies/MobileIdentity.c ${NAS_SRC}ies/AuthenticationFailureParameter.c ${NAS_SRC}ies/EpsUpdateResult.c ${NAS_SRC}ies/TimeZone.c ${NAS_SRC}ies/MessageType.c ${NAS_SRC}ies/EmmCause.c ${NAS_SRC}ies/MobileStationClassmark2.c ${NAS_SRC}ies/AuthenticationParameterRand.c ${NAS_SRC}ies/PdnAddress.c ${NAS_SRC}ies/MobileStationClassmark3.c ${NAS_SRC}ies/ServiceType.c ${NAS_SRC}ies/NasRequestType.c ${NAS_SRC}ies/PlmnList.c ${NAS_SRC}ies/EpsQualityOfService.c ${NAS_SRC}ies/NasMessageContainer.c ${NAS_SRC}ies/EsmInformationTransferFlag.c ${NAS_SRC}ies/TrafficFlowTemplate.c ${NAS_SRC}ies/LinkedEpsBearerIdentity.c ${NAS_SRC}ies/NasSecurityAlgorithms.c ${NAS_SRC}ies/LlcServiceAccessPointIdentifier.c ${NAS_SRC}ies/ShortMac.c ${NAS_SRC}ies/TrafficFlowAggregateDescription.c ${NAS_SRC}ies/PTmsiSignature.c ${NAS_SRC}ies/ProtocolDiscriminator.c ${NAS_SRC}ies/EpsBearerIdentity.c ${NAS_SRC}ies/TimeZoneAndTime.c ${NAS_SRC}ies/TrackingAreaIdentityList.c ${NAS_SRC}ies/QualityOfService.c ${NAS_SRC}ies/EpsUpdateType.c ${NAS_SRC}ies/PdnType.c ${NAS_SRC}ies/UeRadioCapabilityInformationUpdateNeeded.c ${NAS_SRC}ies/AuthenticationParameterAutn.c ${NAS_SRC}ies/EpsAttachType.c ${NAS_SRC}ies/IdentityType2.c ${NAS_SRC}ies/LcsClientIdentity.c ${NAS_SRC}ies/DetachType.c ${NAS_SRC}ies/LocationAreaIdentification.c ${NAS_SRC}ies/TrackingAreaIdentity.c ${NAS_SRC}ies/CipheringKeySequenceNumber.c ${NAS_SRC}ies/MsNetworkCapability.c ${NAS_SRC}ies/UeNetworkCapability.c ${NAS_SRC}ies/ProtocolConfigurationOptions.c ${NAS_SRC}ies/AdditionalUpdateType.c ${NAS_SRC}ies/TmsiStatus.c ${NAS_SRC}ies/EsmMessageContainer.c ${NAS_SRC}ies/Nonce.c ${NAS_SRC}ies/ProcedureTransactionIdentity.c ${NAS_SRC}ies/TransactionIdentifier.c ${NAS_SRC}ies/AdditionalUpdateResult.c ${NAS_SRC}ies/GprsTimer.c ${NAS_SRC}ies/EpsNetworkFeatureSupport.c ${NAS_SRC}ies/SsCode.c ${NAS_SRC}ies/DrxParameter.c ${NAS_SRC}ies/KsiAndSequenceNumber.c ${NAS_SRC}ies/VoiceDomainPreferenceAndUeUsageSetting.c ) set (libnas_utils_OBJS ${NAS_SRC}util/device.c ${NAS_SRC}util/memory.c ${NAS_SRC}util/nas_log.c ${NAS_SRC}util/nas_timer.c ${NAS_SRC}util/socket.c ${NAS_SRC}util/stty.c ${NAS_SRC}util/TLVEncoder.c ${NAS_SRC}util/TLVDecoder.c ${NAS_SRC}util/OctetString.c ) set (libnas_user_OBJS ${NAS_SRC}api/user/user_api.c ${NAS_SRC}api/user/user_indication.c ${NAS_SRC}api/user/at_command.c ${NAS_SRC}api/user/at_error.c ${NAS_SRC}api/user/at_response.c ) set(libnas_usim_OBJS ${NAS_SRC}api/usim/aka_functions.c ${NAS_SRC}api/usim/usim_api.c ) set(libnas_OBJS ${OPENAIRCN_DIR}/NAS/nas_ue_task.c ${OPENAIRCN_DIR}/NAS/nas_itti_messaging.c ${NAS_SRC}nas_parser.c ${NAS_SRC}nas_proc.c ${NAS_SRC}nas_user.c ${libnas_utils_OBJS} ${libnas_user_OBJS} ${libnas_usim_OBJS} ${libnas_emm_OBJS} ${libnas_emm_msg_OBJS} ${libnas_emm_sap_OBJS} ${libnas_esm_OBJS} ${libnas_esm_msg_OBJS} ${libnas_esm_sap_OBJS} ${libnas_ies_OBJS} ${libnas_api_OBJS} ) add_library(NAS ${libnas_OBJS}) if(NAS_UE) set(NAS_LIB NAS) endif() include_directories(${NAS_SRC}) include_directories(${NAS_SRC}/api/user) include_directories(${NAS_SRC}/esm) include_directories(${NAS_SRC}/esm/sap) include_directories(${NAS_SRC}/emm) include_directories(${NAS_SRC}/emm/sap) include_directories(${NAS_SRC}/api/usim) include_directories(${NAS_SRC}/api/mme) # Make lfds as a own source code (even if it is a outside library) # For better intergration with compilation flags & structure of cmake ################################################################### set(lfds ${OPENAIR2_DIR}/UTIL/LFDS/liblfds6.1.1/liblfds611/src/) file(GLOB lfds_queue ${lfds}/lfds611_queue/*.c) file(GLOB lfds_ring ${lfds}/lfds611_ringbuffer/*.c) file(GLOB lfds_slist ${lfds}/lfds611_slist/*.c) file(GLOB lfds_stack ${lfds}/lfds611_stack/*.c/) file(GLOB lfds_freelist ${lfds}/lfds611_freelist/*.c) include_directories(${lfds}) add_library(LFDS ${lfds_queue} ${lfds_ring} ${lfds_slist} ${lfds_stack} ${lfds_freelist} ${lfds}/lfds611_liblfds/lfds611_liblfds_abstraction_test_helpers.c ${lfds}/lfds611_liblfds/lfds611_liblfds_aligned_free.c ${lfds}/lfds611_liblfds/lfds611_liblfds_aligned_malloc.c ${lfds}/lfds611_abstraction/lfds611_abstraction_free.c ${lfds}/lfds611_abstraction/lfds611_abstraction_malloc.c ) # Simulation library ########################## add_library(SIMU ${OPENAIR1_DIR}/SIMULATION/TOOLS/random_channel.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/rangen_double.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_channel.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/abstraction.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_tv_channel.c ${OPENAIR1_DIR}/SIMULATION/RF/rf.c ${OPENAIR1_DIR}/SIMULATION/RF/dac.c ${OPENAIR1_DIR}/SIMULATION/RF/adc.c ${OPENAIR1_DIR}/USERSPACE_TOOLS/SCOPE/lte_scope.c ) add_library(SIMU_ETH ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/socket.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/emu_transport.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/pgm_link.c ) # System packages that are required # We use either the cmake buildin, in ubuntu are in: /usr/share/cmake*/Modules/ # or cmake provide a generic interface to pkg-config that widely used ################################### include(FindPkgConfig) pkg_search_module(LIBXML2 libxml-2.0 REQUIRED) include_directories(${LIBXML2_INCLUDE_DIRS}) pkg_search_module(OPENSSL openssl REQUIRED) include_directories(${OPENSSL_INCLUDE_DIRS}) pkg_search_module(CONFIG libconfig REQUIRED) include_directories(${CONFIG_INCLUDE_DIRS}) pkg_search_module(CRYPTO libcrypto REQUIRED) include_directories(${CRYPTO_INCLUDE_DIRS}) #use native cmake method as this package is not in pkg-config if (${RF_BOARD} STREQUAL "USRP") find_package(Boost REQUIRED) include_directories(${LIBBOOST_INCLUDE_DIR}) target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES}) endif (${RF_BOARD} STREQUAL "USRP") pkg_search_module(OPENPGM openpgm-5.1) if(NOT ${OPENPGM_FOUND}) message("PACKAGE openpgm-5.1 is required by binaries such as oaisim: will fail later if this target is built") else() include_directories(${OPENPGM_INCLUDE_DIRS}) endif() pkg_search_module(NETTLE nettle) if(NOT ${NETTLE_FOUND}) message("PACKAGE nettle not found: some targets will fail") else() include_directories(${NETTLE_INCLUDE_DIRS}) endif() pkg_search_module(XPM xpm) if(NOT ${XPM_FOUND}) message("PACKAGE xpm not found: some targets will fail") else() include_directories(${XPM_INCLUDE_DIRS}) endif() # Atlas is required by some packages, but not found in pkg-config if(EXISTS "/usr/include/atlas/cblas.h") include_directories("/usr/include/atlas") list(APPEND ATLAS_LIBRARIES lapack cblas atlas) else() message("No Blas/Atlas libs found, some targets will fail") endif() if (${XFORMS}) include_directories ("/usr/include/X11") set(XFORMS_SOURCE ${OPENAIR1_DIR}/PHY/TOOLS/lte_phy_scope.c ) set(XFORMS_SOURCE_SOFTMODEM ${OPENAIR_TARGETS}/RT/USER/stats.c ) set(XFORMS_LIBRARIES "forms") endif (${XFORMS}) # add executables add_executable(lte-softmodem ${rrc_h} ${s1ap_h} ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/RT/USER/sched_dlsch.c ${OPENAIR_TARGETS}/RT/USER/sched_rx_pdsch.c ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c ${OPENAIR_TARGETS}/RT/USER/lte-ue.c ${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c ${OPENAIR_TARGETS}/SIMU/USER/init_lte.c ${OPENAIR_TARGETS}/COMMON/create_tasks.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c ${HW_SOURCE} ${RTAI_SOURCE} ${XFORMS_SOURCE} ${XFORMS_SOURCE_SOFTMODEM} ) target_link_libraries (lte-softmodem -Wl,--start-group RRC_LIB ${S1AP_LIB} GTPV1U SECU_CN SECU_OSA UTIL SCTP UDP SCHED_LIB PHY LFDS L2 ${RAL_LIB} ${NAS_LIB} ${ITTI_LIB} ${MIH_LIB} -Wl,--end-group ) target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES}) target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_USRP} ${XFORMS_LIBRARIES} ) add_executable(oaisim ${rrc_h} ${s1ap_h} ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c ${OPENAIR_TARGETS}/SIMU/USER/init_lte.c ${OPENAIR_TARGETS}/SIMU/USER/oaisim_config.c ${OPENAIR_TARGETS}/SIMU/USER/sinr_sim.c ${OPENAIR_TARGETS}/SIMU/USER/cor_SF_sim.c ${OPENAIR_TARGETS}/SIMU/USER/oaisim_functions.c ${OPENAIR_TARGETS}/SIMU/USER/event_handler.c ${OPENAIR_TARGETS}/SIMU/USER/oaisim.c ${OPENAIR2_DIR}/RRC/NAS/nas_config.c ${OPENAIR2_DIR}/RRC/NAS/rb_config.c ${OPENAIR2_DIR}/UTIL/OMG/sumo.c ${OPENAIR_TARGETS}/COMMON/create_tasks.c ${HW_SOURCE} ${XFORMS_SOURCE} ) target_include_directories(oaisim PUBLIC ${OPENAIR_TARGETS}/SIMU/USER) target_link_libraries (oaisim -Wl,--start-group RRC_LIB ${S1AP_LIB} GTPV1U SECU_CN UTIL SCTP UDP SCHED_LIB PHY LFDS L2 ${RAL_LIB} ${NAS_LIB} SIMU SIMU_ETH SECU_OSA ${ITTI_LIB} ${MIH_LIB} -Wl,--end-group ) target_link_libraries (oaisim ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES}) target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_USRP} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES}) #Force link with forms, regardless XFORMS option target_link_libraries (oaisim forms) foreach(myExe dlsim ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim) add_executable(${myExe} ${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c ${XFORMS_SOURCE} ) target_link_libraries (${myExe} -Wl,--start-group SIMU UTIL SCHED_LIB PHY LFDS ${ITTI_LIB} -Wl,--end-group pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ) endforeach(myExe) ################################################## # Generated specific cases is not regular code ############################################### ##################"" # itti symbolic debug print require to generate a specific include file ######################################## # retrieve the compiler options to send it to gccxml get_directory_property( DirDefs COMPILE_DEFINITIONS ) foreach( d ${DirDefs} ) list(APPEND itti_compiler_options "-D${d}") endforeach() get_directory_property( DirDefs INCLUDE_DIRECTORIES ) foreach( d ${DirDefs} ) list(APPEND itti_compiler_options "-I${d}") endforeach() set (ITTI_H ${ITTI_DIR}/intertask_interface_types.h) add_custom_command ( OUTPUT ${OPENAIR_BIN_DIR}/messages.xml COMMAND gccxml ${itti_compiler_options} -fxml=${OPENAIR_BIN_DIR}/messages.xml ${ITTI_H} DEPENDS ${S1AP_OAI_generated} ${RRC_FULL_DIR}/asn1_constants.h ) add_custom_command ( OUTPUT ${OPENAIR_BIN_DIR}/messages_xml.h COMMAND sed -e 's/ *//' -e 's/\"/\\\\\"/g' -e 's/^/\"/' -e 's/$$/\\\\n\"/' ${OPENAIR_BIN_DIR}/messages.xml > ${OPENAIR_BIN_DIR}/messages_xml.h DEPENDS ${OPENAIR_BIN_DIR}/messages.xml ${RRC_FULL_DIR}/asn1_constants.h ) ################ # Kernel modules ############### # Set compiler options for kernel modules # we need to get out cmake to use the regular Linux Kernel process # this is documented as https://www.kernel.org/doc/Documentation/kbuild/modules.txt ###################################### # retrieve the compiler options to send it to gccxml get_directory_property(DirDefs COMPILE_DEFINITIONS ) foreach( d ${DirDefs} ) set(module_cc_opt_tmp "${module_cc_opt_tmp} -D${d}") endforeach() string(REPLACE "-DUSER_MODE" "" module_cc_opt ${module_cc_opt_tmp}) get_directory_property( DirDefs INCLUDE_DIRECTORIES ) foreach( d ${DirDefs} ) set(module_cc_opt "${module_cc_opt} -I${d}") endforeach() EXECUTE_PROCESS(COMMAND uname -r OUTPUT_VARIABLE os_release OUTPUT_STRIP_TRAILING_WHITESPACE) SET(module_build_path /lib/modules/${os_release}/build) message("Kernel build path = ${module_build_path}") function(make_driver name dir) file(MAKE_DIRECTORY ${OPENAIR_BIN_DIR}/${name}) foreach(f IN ITEMS ${ARGN}) list(APPEND src_path_list ${dir}/${f}) string(REGEX REPLACE "c *$" "o" obj ${f}) set(objs "${objs} ${obj}") endforeach() CONFIGURE_FILE(${OPENAIR_CMAKE}/tools/Kbuild.cmake ${OPENAIR_BIN_DIR}/${name}/Kbuild) add_custom_command(OUTPUT ${name}.ko COMMAND make -C ${module_build_path} M=${OPENAIR_BIN_DIR}/${name} WORKING_DIRECTORY ${OPENAIR_BIN_DIR}/${name} COMMENT "building ${module}.ko" VERBATIM SOURCES ${src_path_list} ) add_custom_target(${name} DEPENDS ${name}.ko) endfunction(make_driver name dir src) # nashmesh module ################ list(APPEND nasmesh_src device.c common.c ioctl.c classifier.c tool.c mesh.c) # Actually nasty stuff to be FIXED: the hereafter flag is for RTAI compilation in the driver, # but has different meaning in the other parts of the code # We should change the constant name to xxx_RTAI or likely if(NOT ${module_cc_opt} MATCHES "DRTAI") set(module_cc_opt "${module_cc_opt} -DNAS_NETLINK") else() string(REPLACE "-DNAS_NETLINK" "" tmp "${module_cc_opt}") set(module_cc_opt ${tmp}) endif() # legacy Makefile was using NAS_NETLINK flag, but other drivers the hereafter flag # so, this cmake use OAI_NW_DRIVER_USE_NETLINK everywhere if (OAI_NW_DRIVER_USE_NETLINK) list(APPEND nasmesh_src netlink.c) endif() make_driver(nasmesh ${OPENAIR2_DIR}/NAS/DRIVER/MESH ${nasmesh_src}) # ??? #################### list(APPEND oai_nw_drv_src device.c common.c ioctl.c classifier.c tool.c) if(OAI_NW_DRIVER_USE_NETLINK) list(APPEND oai_nw_drv_src netlink.c) endif() make_driver(oai_nw_drv ${OPENAIR2_DIR}/NAS/DRIVER/LITE ${oai_nw_drv_src}) # Exmimo board drivers ######################### list(APPEND openair_rf_src module_main.c irq.c fileops.c exmimo_fw.c) make_driver(openair_rf ${OPENAIR_TARGETS}/ARCH/EXMIMO/DRIVER/eurecom ${openair_rf_src}) add_executable(updatefw ${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c ) # ue_ip: purpose ??? ############### list(APPEND ue_ip_src device.c common.c) if(OAI_NW_DRIVER_USE_NETLINK) list(APPEND ue_ip_src netlink.c) endif() make_driver(ue_ip ${OPENAIR2_DIR}/NETWORK_DRIVER/UE_IP ${ue_ip_src}) # add the install targets #install (TARGETS Tutorial DESTINATION bin) #install (FILES "${PROJECT_BIN_DIR}/TutorialConfig.h" DESTINATION include)