Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a CMake building system Skeleton #1094

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,8 @@ obj
/src/programs.inc
.images
/lib/luajit/usr

# common cmake building path
/build
/release
/debug
44 changes: 44 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
cmake_minimum_required (VERSION 2.8.11)
project (snabb)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

set(MAKE make)
set(LUAJIT_CFLAGS ${CMAKE_SOURCE_DIR}/gcc-preinclude.h)

add_custom_target(
luajit
COMMAND $(MAKE) PREFIX=`pwd`/usr/local CFLAGS="$(LUAJIT_CFLAGS)" && $(MAKE) DESTDIR=`pwd` install
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/lib/luajit
)

ADD_CUSTOM_TARGET(
make_ln_luajit
echo "make a ln -s to luajit"
COMMAND ln -fs luajit-2.1.0-beta1 luajit
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/lib/luajit/usr/local/bin
DEPENDS luajit)

# copy file
file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/src/syscall/linux)

add_custom_target(copy_ljsyscall)

add_custom_command(TARGET copy_ljsyscall PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_SOURCE_DIR}/lib/ljsyscall/syscall.lua ${CMAKE_SOURCE_DIR}/src/ )
add_custom_command(TARGET copy_ljsyscall PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_SOURCE_DIR}/lib/ljsyscall/syscall/*.lua ${CMAKE_SOURCE_DIR}/src/syscall/ )
add_custom_command(TARGET copy_ljsyscall PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_SOURCE_DIR}/lib/ljsyscall/syscall/linux/*.lua ${CMAKE_SOURCE_DIR}/src/syscall/linux/ )
add_custom_command(TARGET copy_ljsyscall PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_SOURCE_DIR}/lib/ljsyscall/syscall/linux/x64/*.lua ${CMAKE_SOURCE_DIR}/src/syscall/linux/ )
add_custom_command(TARGET copy_ljsyscall PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_SOURCE_DIR}/lib/ljsyscall/syscall/shared/*.lua ${CMAKE_SOURCE_DIR}/src/syscall/ )

# do copy file task here
add_subdirectory (src)
11 changes: 11 additions & 0 deletions cmake/CMakeDetermineLUACompiler.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)


set(CMAKE_LUA_COMPILER ${CMAKE_SOURCE_DIR}/lib/luajit/usr/local/bin/luajit CACHE FILEPATH "The LuaJIT compiler")
set(CMAKE_LUA_COMPILER_ENV_VAR "")

mark_as_advanced(CMAKE_LUA_COMPILER)

# configure variables set in this file for fast reload later on
configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeLUACompiler.cmake.in
${CMAKE_PLATFORM_INFO_DIR}/CMakeLUACompiler.cmake @ONLY)
Empty file added cmake/CMakeLUACompiler.cmake.in
Empty file.
Empty file added cmake/CMakeLUAInformation.cmake
Empty file.
1 change: 1 addition & 0 deletions cmake/CMakeTestLUACompiler.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SET(CMAKE_LUA_COMPILER_WORKS 1 CACHE INTERNAL "")
103 changes: 103 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
set(CMAKE_LUA_OUTPUT_EXTENSION ".o")
set(CMAKE_LUA_OUTPUT_EXTENSION_REPLACE 1)

set(CMAKE_LUA_FLAGS " -bg")
set(CMAKE_LUA_COMPILER ${CMAKE_SOURCE_DIR}/lib/luajit/usr/local/bin/luajit CACHE FILEPATH "The LuaJIT compiler")

set(CMAKE_LUA_COMPILE_OBJECT "<CMAKE_LUA_COMPILER> <FLAGS> <SOURCE> <OBJECT>")
set(CMAKE_LUA_SOURCE_FILE_EXTENSIONS lua;luah)

# message("CMAKE_LUA_COMPILE_OBJECT is ${CMAKE_LUA_COMPILE_OBJECT}")


enable_language(LUA OPTIONAL)

include_directories(
${CMAKE_SOURCE_DIR}/lib/luajit/src/
${CMAKE_SOURCE_DIR}/src/
)

# $(Q) $(CC) $(DEBUG) -Wl,--no-as-needed -Wl,-E -Werror -Wall -o $@ $^ \
# ../lib/luajit/src/libluajit.a \
#
set(CMAKE_C_FLAGS "-Wl,--no-as-needed -Wl,-E -Werror -Wall ${CMAKE_C_FLAGS}")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lrt -lc -ldl -lm -lpthread ")

# Lua C FFI Header

set(LUA_HEADERS
core/lib.h
core/link.h
core/clib.h
lib/ipc/shmem/shmem.h
)

set(LUA_LUA_HEADERS_SRCS )

file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/core)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/lib/io)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/lib/ipc)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/lib/ipc/shmem)

foreach(lua_head ${LUA_HEADERS})
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_BINARY_DIR}/src/${lua_head}.luah
COMMAND echo 'module\(...,package.seeall\); require\(\"ffi\"\).cdef[=============[' > '${CMAKE_BINARY_DIR}/src/${lua_head}.luah'
COMMAND cat ${CMAKE_SOURCE_DIR}/src/${lua_head} >> ${CMAKE_BINARY_DIR}/src/${lua_head}.luah
COMMAND echo ']=============]'>>${CMAKE_BINARY_DIR}/src/${lua_head}.luah
DEPENDS ${CMAKE_SOURCE_DIR}/src/${lua_head}
)
list(APPEND LUA_LUA_HEADERS_SRCS ${CMAKE_BINARY_DIR}/src/${lua_head}.luah)

# update
STRING(REPLACE "." "_" lua_source_module_name ${lua_head})
STRING(REPLACE "/" "." lua_source_module_name ${lua_source_module_name})
STRING(REGEX REPLACE "\\.luah$" "" lua_source_module_name ${lua_source_module_name})
set_source_files_properties(${CMAKE_BINARY_DIR}/src/${lua_head}.luah
PROPERTIES COMPILE_FLAGS "-n ${lua_source_module_name}")
endforeach()

message(${LUA_LUA_HEADERS_SRCS})

# Lua Module
set(LUA_SRCS
core/startup.lua
core/main.lua
core/shm.lua
lib/ipc/shmem/shmem.lua
)

foreach(lua_source ${LUA_SRCS})
STRING(REPLACE "/" "." lua_source_module_name ${lua_source})
STRING(REGEX REPLACE "\\.lua$" "" lua_source_module_name ${lua_source_module_name})
# MESSAGE( STATUS "Including dir " ${lua_source} ${lua_source_module_name} )
set_source_files_properties(${lua_source}
PROPERTIES COMPILE_FLAGS "-n ${lua_source_module_name}")
endforeach()

# C code
set(C_SRCS
arch/avx2.c
arch/sse2.c
core/lib.c
core/memory.c
lib/checksum.c
lib/ipc/shmem/shmem.c
)

set_source_files_properties(arch/avx2.c
PROPERTIES COMPILE_FLAGS " -O2 -mavx2 ")
set_source_files_properties(arch/sse2.c
PROPERTIES COMPILE_FLAGS " -O2 -msse2 ")

add_executable (snabb core/snabbswitch.c ${C_SRCS} ${LUA_LUA_HEADERS_SRCS} ${LUA_SRCS})

# Link the executable to the Hello library. Since the Hello library has
# public include directories we will use those link directories when building
# helloDemo

add_dependencies(snabb luajit copy_ljsyscall)
target_link_libraries(snabb ${CMAKE_SOURCE_DIR}/lib/luajit/src/libluajit.a)

# target_link_libraries (snabb LINK_PUBLIC luajit)
3 changes: 3 additions & 0 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ $(OBJDIR) bin testlog $(OBJDIR/doc):

$(LUAOBJ): obj/%_lua.o: %.lua Makefile | $(OBJDIR)
$(E) "LUA $@"
$(E) "luajit -bg -n $(subst /,.,$*) $< $@"
$(Q) luajit -bg -n $(subst /,.,$*) $< $@

$(PFLUAOBJ): obj/%_lua.o: ../lib/pflua/src/%.lua Makefile
Expand Down Expand Up @@ -144,6 +145,8 @@ $(HOBJ): obj/%_h.o: %.h Makefile | $(OBJDIR)

$(ASMOBJ): obj/%_dasl.o: %.dasl $(CHDR) Makefile | $(OBJDIR)
$(E) "ASM $@"
# $(E) "luajit dynasm.lua -o [email protected] $<"
# $(E) "luajit -bg -n $(subst /,.,$*) [email protected] $@"
$(Q) luajit dynasm.lua -o [email protected] $<
$(Q) luajit -bg -n $(subst /,.,$*) [email protected] $@

Expand Down
7 changes: 6 additions & 1 deletion src/core/snabbswitch.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,16 @@ char** argv;

int main(int snabb_argc, char **snabb_argv)
{
int n = 0;
/* Store for use by LuaJIT code via FFI. */
argc = snabb_argc;
argv = snabb_argv;
lua_State* L = luaL_newstate();
luaL_openlibs(L);
return luaL_dostring(L, "require \"core.startup\"");
n = luaL_dostring(L, "require \"core.startup\"");
if(n) {
printf("%s\n", lua_tostring(L, -1));
}
return n;
}

11 changes: 11 additions & 0 deletions src/program/zweig/README.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Usage:
snabb wall <subcommand> <arguments...>
snabb wall --help

Available subcommands:

spy Analyze traffic and report statistics

Use --help for per-command usage. Example:

snabb wall spy --help
39 changes: 39 additions & 0 deletions src/program/zweig/zweig.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
-- Use of this source code is governed by the Apache 2.0 license; see COPYING.

module(..., package.seeall)

local pcap = require("apps.pcap.pcap")
local raw = require("apps.socket.raw")
local pcap_filter = require("apps.packet_filter.pcap_filter")



function run (parameters)
if not (#parameters == 1) then
-- dump
print("Usage: zweig <interface>")
main.exit(1)
end
-- local pcap_file = parameters[1]
local interface = parameters[1]
local c = config.new()

config.app(c, "capture", raw.RawSocket, interface)
local v4_rules =
[[
(udp and (dst port 5005))
]]
config.app(c,"pcap_filter", pcap_filter.PcapFilter,
{filter=v4_rules})

config.app(c, "dump", pcap.StdOutput, {})
-- config.app(c, "dump", pcap.PcapWriter, {'1.pcap'})

config.link(c, "capture.tx -> pcap_filter.input")
config.link(c, "pcap_filter.output -> dump.input")
-- config.link(c, "capture.tx -> dump.input")

engine.configure(c)
engine.main({report = {showlinks=true}})

end