From 2926166ce6391a536751940f0ca7c598554b0900 Mon Sep 17 00:00:00 2001 From: Godzil Date: Thu, 27 Feb 2020 17:24:40 +0000 Subject: [PATCH] Add Lua dependencies. Lua is going to be used for both scene description (it will also provide a YAML importer) and some future expansion in the code. Expect some fun surprises! (just playing with lua on the main app for now) --- CMakeLists.txt | 15 +++++++++++++-- source/CMakeLists.txt | 6 +++--- source/main.cpp | 36 +++++++++++++++++++++++++++++++++++- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 65fbd30..bdc3275 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,13 +40,24 @@ if (ENABLE_COVERAGE) endif() - - # LodePNG don't make a .a or .so, so let's build a library here add_library(LodePNG STATIC) set(LODEPNG_INCLUDE_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/external/lodepng) target_sources(LodePNG PRIVATE external/lodepng/lodepng.cpp external/lodepng/lodepng.h) +ExternalProject_Add(LuaCore + URL "https://www.lua.org/ftp/lua-5.3.5.tar.gz" + URL_HASH SHA1=112eb10ff04d1b4c9898e121d6bdf54a81482447 + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/lua + CONFIGURE_COMMAND "" + BUILD_IN_SOURCE True + BUILD_COMMAND make generic + INSTALL_COMMAND "" +) + +set(LUA_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/lua/src") +set(LUA_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/external/lua/src/liblua.a") + # Main app add_subdirectory(source) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index e25cfbb..6010f1f 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -20,10 +20,10 @@ target_link_libraries(rayonnement LodePNG) if (USE_OPENMP) target_link_libraries(rayonnement OpenMP::OpenMP_CXX) endif() -# Second we build the main executable + add_executable(dorayme main.cpp) -target_include_directories(rayonnement PUBLIC include ${LODEPNG_INCLUDE_FOLDER}) -target_link_libraries(dorayme rayonnement) +target_include_directories(rayonnement PUBLIC include ${LODEPNG_INCLUDE_FOLDER} ${LUA_INCLUDE_DIR}) +target_link_libraries(dorayme rayonnement ${LUA_LIBRARIES}) if (COVERALLS) set(COVERAGE_SRCS ${RAY_HEADERS} ${RAY_SOURCES} ${COVERAGE_SRCS} PARENT_SCOPE) diff --git a/source/main.cpp b/source/main.cpp index a950fad..7f941fc 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -8,10 +8,44 @@ * */ #include +#include +#include +extern "C" { +#include +#include +#include +} + +static int l_sin (lua_State *L) { + double d = luaL_checknumber(L, 1); /* get argument */ + lua_pushnumber(L, sin(d)); /* push result */ + return 1; /* number of results */ +} int main(int argc, char *argv[]) { - printf("Hello !\n"); + char buff[256]; + int error; + lua_State *L = luaL_newstate(); /* opens Lua */ + luaL_openlibs(L); /* opens the basic library */ + + lua_pushcfunction(L, l_sin); + lua_setglobal(L, "mysin"); + printf("[0]>"); + + while (fgets(buff, sizeof(buff), stdin) != NULL) + { + error = luaL_loadstring(L, buff) || lua_pcall(L, 0, LUA_MULTRET, 0); + + if (error) + { + fprintf(stderr, "%s\n", lua_tostring(L, -1)); + lua_pop(L, 1); /* pop error message from the stack */ + } + printf("[%d]>", lua_gettop(L)); + } + + lua_close(L); return 0; } \ No newline at end of file