diff --git a/libs/libplatforminfo/Makefile b/libs/libplatforminfo/Makefile new file mode 100644 index 0000000..3dc93a7 --- /dev/null +++ b/libs/libplatforminfo/Makefile @@ -0,0 +1,39 @@ +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/target.mk + +PKG_NAME:=libplatforminfo +PKG_VERSION:=1 +CMAKE_INSTALL:=1 + +PKG_LICENSE:=BSD-2-Clause + +PKG_BUILD_DIR := $(KERNEL_BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +define Package/libplatforminfo + SECTION:=libs + CATEGORY:=Libraries + TITLE:=Platform information library + DEPENDS:=@(TARGET_ar71xx_generic||TARGET_ar71xx_nand||TARGET_mpc85xx_generic||TARGET_x86_generic||TARGET_x86_kvm_guest||TARGET_x86_64||TARGET_x86_xen_domu||TARGET_ramips_rt305x||TARGET_brcm2708_bcm2708||TARGET_brcm2708_bcm2709||TARGET_sunxi) +endef + +CMAKE_OPTIONS += \ + -DCMAKE_BUILD_TYPE:String="MINSIZEREL" \ + -DTARGET:STRING="$(BOARD)" \ + -DSUBTARGET:STRING="$(SUBTARGET)" + + + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) + $(CP) ./src/* $(PKG_BUILD_DIR)/ +endef + +define Package/libplatforminfo/install + $(INSTALL_DIR) $(1)/usr/lib + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/libplatforminfo.so $(1)/usr/lib/ +endef + +$(eval $(call BuildPackage,libplatforminfo)) diff --git a/libs/libplatforminfo/src/CMakeLists.txt b/libs/libplatforminfo/src/CMakeLists.txt new file mode 100644 index 0000000..54fd7bd --- /dev/null +++ b/libs/libplatforminfo/src/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 2.6) +project(LIBPLATFORMINFO C) + +set(LIBDIR "lib${LIB_SUFFIX}") + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + +set(TARGET "" CACHE STRING "OpenWrt target") +set(SUBTARGET "" CACHE STRING "OpenWrt subtarget") + +add_definitions(-DTARGET=${TARGET}) + +if(SUBTARGET) + set(FULL_TARGET "${TARGET}-${SUBTARGET}") + + add_definitions(-DSUBTARGET=${SUBTARGET} -DTARGET_${TARGET}_${SUBTARGET}) +else(SUBTARGET) + set(FULL_TARGET "${TARGET}") + + add_definitions(-DTARGET_${TARGET}) +endif(SUBTARGET) + +add_library(platforminfo SHARED + common.c + targets/${FULL_TARGET}.c +) +set_target_properties(platforminfo PROPERTIES + COMPILE_FLAGS "-Wall -std=c99 -D_GNU_SOURCE" +) +install(TARGETS platforminfo + ARCHIVE DESTINATION ${LIBDIR} + LIBRARY DESTINATION ${LIBDIR} +) + + +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/libplatforminfo.h DESTINATION include) diff --git a/libs/libplatforminfo/src/common.c b/libs/libplatforminfo/src/common.c new file mode 100644 index 0000000..51755ee --- /dev/null +++ b/libs/libplatforminfo/src/common.c @@ -0,0 +1,46 @@ +/* + Copyright (c) 2015, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include + +#include + + +#define _STRINGIFY(s) #s +#define STRINGIFY(s) _STRINGIFY(s) + + +const char * platforminfo_get_target(void) { + return STRINGIFY(TARGET); +} + +const char * platforminfo_get_subtarget(void) { +#ifdef SUBTARGET + return STRINGIFY(SUBTARGET); +#else + return NULL; +#endif +} diff --git a/libs/libplatforminfo/src/common.h b/libs/libplatforminfo/src/common.h new file mode 100644 index 0000000..11667b1 --- /dev/null +++ b/libs/libplatforminfo/src/common.h @@ -0,0 +1,92 @@ +/* + Copyright (c) 2015, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#pragma once + + +#include +#include +#include +#include +#include + + +__attribute__((unused)) static char * read_line(const char *filename) { + FILE *f = fopen(filename, "r"); + if (!f) + return NULL; + + char *line = NULL; + size_t len = 0; + + ssize_t r = getline(&line, &len, f); + + fclose(f); + + if (r >= 0) { + len = strlen(line); + + if (len && line[len-1] == '\n') + line[len-1] = 0; + } + else { + free(line); + line = NULL; + } + + return line; +} + +__attribute__((unused)) static void sanitize_image_name(char **outp, char *in) { + char *out = malloc(strlen(in) + 1); + *outp = out; + + bool dot = false, dash = false; + + for (; *in; in++) { + if (*in == '.') { + dot = true; + continue; + } + + if (*in != '+' && !isalnum(*in)) { + dash = true; + continue; + } + + if (dash) + *out++ = '-'; + else if (dot) + *out++ = '.'; + + dash = false; + dot = false; + + *out++ = tolower(*in); + } + + *out = 0; +} diff --git a/libs/libplatforminfo/src/include/libplatforminfo.h b/libs/libplatforminfo/src/include/libplatforminfo.h new file mode 100644 index 0000000..b08830d --- /dev/null +++ b/libs/libplatforminfo/src/include/libplatforminfo.h @@ -0,0 +1,36 @@ +/* + Copyright (c) 2015, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef _LIBPLATFORMINFO_H_ +#define _LIBPLATFORMINFO_H_ + +const char * platforminfo_get_target(void); +const char * platforminfo_get_subtarget(void); +const char * platforminfo_get_board_name(void); +const char * platforminfo_get_model(void); +const char * platforminfo_get_image_name(void); + +#endif /* _LIBPLATFORMINFO_H_ */ diff --git a/libs/libplatforminfo/src/targets/ar71xx-generic.c b/libs/libplatforminfo/src/targets/ar71xx-generic.c new file mode 120000 index 0000000..fb7d9ea --- /dev/null +++ b/libs/libplatforminfo/src/targets/ar71xx-generic.c @@ -0,0 +1 @@ +template/default.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/ar71xx-nand.c b/libs/libplatforminfo/src/targets/ar71xx-nand.c new file mode 120000 index 0000000..fb7d9ea --- /dev/null +++ b/libs/libplatforminfo/src/targets/ar71xx-nand.c @@ -0,0 +1 @@ +template/default.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/brcm2708-bcm2708.c b/libs/libplatforminfo/src/targets/brcm2708-bcm2708.c new file mode 120000 index 0000000..fb7d9ea --- /dev/null +++ b/libs/libplatforminfo/src/targets/brcm2708-bcm2708.c @@ -0,0 +1 @@ +template/default.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/brcm2708-bcm2709.c b/libs/libplatforminfo/src/targets/brcm2708-bcm2709.c new file mode 120000 index 0000000..fb7d9ea --- /dev/null +++ b/libs/libplatforminfo/src/targets/brcm2708-bcm2709.c @@ -0,0 +1 @@ +template/default.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/mpc85xx-generic.c b/libs/libplatforminfo/src/targets/mpc85xx-generic.c new file mode 120000 index 0000000..fb7d9ea --- /dev/null +++ b/libs/libplatforminfo/src/targets/mpc85xx-generic.c @@ -0,0 +1 @@ +template/default.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/ramips-rt305x.c b/libs/libplatforminfo/src/targets/ramips-rt305x.c new file mode 120000 index 0000000..fb7d9ea --- /dev/null +++ b/libs/libplatforminfo/src/targets/ramips-rt305x.c @@ -0,0 +1 @@ +template/default.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/sunxi.c b/libs/libplatforminfo/src/targets/sunxi.c new file mode 120000 index 0000000..fb7d9ea --- /dev/null +++ b/libs/libplatforminfo/src/targets/sunxi.c @@ -0,0 +1 @@ +template/default.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/template/default.c b/libs/libplatforminfo/src/targets/template/default.c new file mode 100644 index 0000000..232495a --- /dev/null +++ b/libs/libplatforminfo/src/targets/template/default.c @@ -0,0 +1,64 @@ +/* + Copyright (c) 2015, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include +#include "../common.h" + + +static char * board_name = NULL; +static char * model = NULL; +static char * image_name = NULL; + + +__attribute__((constructor)) static void init(void) { + board_name = read_line("/tmp/sysinfo/board_name"); + model = read_line("/tmp/sysinfo/model"); + + sanitize_image_name(&image_name, model); +} + +__attribute__((destructor)) static void deinit(void) { + free(board_name); + free(model); + free(image_name); + + board_name = NULL; + model = NULL; + image_name = NULL; +} + + +const char * platforminfo_get_board_name(void) { + return board_name; +} + +const char * platforminfo_get_model(void) { + return model; +} + +const char * platforminfo_get_image_name(void) { + return image_name; +} diff --git a/libs/libplatforminfo/src/targets/template/x86.c b/libs/libplatforminfo/src/targets/template/x86.c new file mode 100644 index 0000000..0ddafeb --- /dev/null +++ b/libs/libplatforminfo/src/targets/template/x86.c @@ -0,0 +1,107 @@ +/* + Copyright (c) 2015, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include +#include "../common.h" + + +#define _STRINGIFY(s) #s +#define STRINGIFY(s) _STRINGIFY(s) + + +static char * model = NULL; + + +__attribute__((constructor)) static void init(void) { + FILE *f = fopen("/proc/cpuinfo", "r"); + if (!f) + return; + + char *line = NULL; + size_t len = 0; + + while (getline(&line, &len, f) >= 0 && !model) { + if (strncmp(line, "model name", 10)) + continue; + + bool colon = false; + + char *p; + for (p = line + 10; *p; p++) { + if (isblank(*p)) + continue; + + if (!colon) { + if (*p == ':') { + colon = true; + continue; + } + else { + break; + } + } + + size_t len = strlen(p); + if (len && p[len-1] == '\n') + p[len-1] = 0; + + model = strdup(p); + break; + } + } + + free(line); + fclose(f); +} + +__attribute__((destructor)) static void deinit(void) { + free(model); + + model = NULL; +} + + +const char * platforminfo_get_board_name(void) { + return NULL; +} + +const char * platforminfo_get_model(void) { + return model; +} + +const char * platforminfo_get_image_name(void) { +#if defined(TARGET_x86_generic) + return "x86-generic"; +#elif defined(TARGET_x86_kvm_guest) + return "x86-kvm"; +#elif defined(TARGET_x86_xen_domu) + return "x86-xen"; +#elif defined(TARGET_x86_64) + return "x86-64"; +#else +#error Unknown x86 subtarget +#endif +} diff --git a/libs/libplatforminfo/src/targets/x86-64.c b/libs/libplatforminfo/src/targets/x86-64.c new file mode 120000 index 0000000..c6233a6 --- /dev/null +++ b/libs/libplatforminfo/src/targets/x86-64.c @@ -0,0 +1 @@ +template/x86.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/x86-generic.c b/libs/libplatforminfo/src/targets/x86-generic.c new file mode 120000 index 0000000..c6233a6 --- /dev/null +++ b/libs/libplatforminfo/src/targets/x86-generic.c @@ -0,0 +1 @@ +template/x86.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/x86-kvm_guest.c b/libs/libplatforminfo/src/targets/x86-kvm_guest.c new file mode 120000 index 0000000..c6233a6 --- /dev/null +++ b/libs/libplatforminfo/src/targets/x86-kvm_guest.c @@ -0,0 +1 @@ +template/x86.c \ No newline at end of file diff --git a/libs/libplatforminfo/src/targets/x86-xen_domu.c b/libs/libplatforminfo/src/targets/x86-xen_domu.c new file mode 120000 index 0000000..c6233a6 --- /dev/null +++ b/libs/libplatforminfo/src/targets/x86-xen_domu.c @@ -0,0 +1 @@ +template/x86.c \ No newline at end of file diff --git a/libs/lua-platform-info/Makefile b/libs/lua-platform-info/Makefile index f0dd94c..42e6675 100644 --- a/libs/lua-platform-info/Makefile +++ b/libs/lua-platform-info/Makefile @@ -1,5 +1,4 @@ include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/target.mk PKG_NAME:=lua-platform-info PKG_VERSION:=1 @@ -12,26 +11,26 @@ define Package/lua-platform-info SECTION:=libs CATEGORY:=Libraries TITLE:=Lua hardware platform information library - DEPENDS:=+lua @(TARGET_ar71xx_generic||TARGET_ar71xx_nand||TARGET_mpc85xx_generic||TARGET_x86_generic||TARGET_x86_kvm_guest||TARGET_x86_64||TARGET_x86_xen_domu||TARGET_ramips_rt305x||TARGET_brcm2708_bcm2708||TARGET_brcm2708_bcm2709||TARGET_sunxi) -endef - -define Package/lua-platform-info/description - Lua library to obtain some generic information about the runtime platform + DEPENDS:=+lua +libplatforminfo endef define Build/Prepare mkdir -p $(PKG_BUILD_DIR) + $(CP) ./src/* $(PKG_BUILD_DIR)/ endef define Build/Configure endef define Build/Compile + CFLAGS="$(TARGET_CFLAGS)" \ + CPPFLAGS="$(TARGET_CPPFLAGS)" \ + $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS) endef define Package/lua-platform-info/install $(INSTALL_DIR) $(1)/usr/lib/lua - $(INSTALL_DATA) ./files/$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET))/platform_info.lua $(1)/usr/lib/lua/ + $(CP) $(PKG_BUILD_DIR)/platform_info.so $(1)/usr/lib/lua/ endef $(eval $(call BuildPackage,lua-platform-info)) diff --git a/libs/lua-platform-info/files/ar71xx/generic/platform_info.lua b/libs/lua-platform-info/files/ar71xx/generic/platform_info.lua deleted file mode 100644 index 750d563..0000000 --- a/libs/lua-platform-info/files/ar71xx/generic/platform_info.lua +++ /dev/null @@ -1,37 +0,0 @@ -local function read_line(file) - local f = io.open(file) - local ret = f:read('*line') - f:close() - return ret -end - -local board_name = read_line('/tmp/sysinfo/board_name') -local model = read_line('/tmp/sysinfo/model') - -module 'platform_info' - - --- The OpenWrt target -function get_target() - return 'ar71xx' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'generic' -end - --- The board name -function get_board_name() - return board_name -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return (model:lower():gsub('[^%w%.%+]+', '-'):gsub('%.+', '.'):gsub('[%-%.]*%-[%-%.]*', '-'):gsub('%-+$', '')) -end diff --git a/libs/lua-platform-info/files/ar71xx/nand/platform_info.lua b/libs/lua-platform-info/files/ar71xx/nand/platform_info.lua deleted file mode 100644 index 5a6b23e..0000000 --- a/libs/lua-platform-info/files/ar71xx/nand/platform_info.lua +++ /dev/null @@ -1,37 +0,0 @@ -local function read_line(file) - local f = io.open(file) - local ret = f:read('*line') - f:close() - return ret -end - -local board_name = read_line('/tmp/sysinfo/board_name') -local model = read_line('/tmp/sysinfo/model') - -module 'platform_info' - - --- The OpenWrt target -function get_target() - return 'ar71xx' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'nand' -end - --- The board name -function get_board_name() - return board_name -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return (model:lower():gsub('[^%w%.%+]+', '-'):gsub('%.+', '.'):gsub('[%-%.]*%-[%-%.]*', '-'):gsub('%-+$', '')) -end diff --git a/libs/lua-platform-info/files/brcm2708/bcm2708/platform_info.lua b/libs/lua-platform-info/files/brcm2708/bcm2708/platform_info.lua deleted file mode 100644 index 7e6f3f8..0000000 --- a/libs/lua-platform-info/files/brcm2708/bcm2708/platform_info.lua +++ /dev/null @@ -1,37 +0,0 @@ -local function read_line(file) - local f = io.open(file) - local ret = f:read('*line') - f:close() - return ret -end - -local board_name = read_line('/tmp/sysinfo/board_name') -local model = read_line('/tmp/sysinfo/model') - -module 'platform_info' - - --- The OpenWrt target -function get_target() - return 'brcm2708' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'bcm2708' -end - --- The board name -function get_board_name() - return board_name -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return (model:lower():gsub('[^%w%.%+]+', '-'):gsub('%.+', '.'):gsub('[%-%.]*%-[%-%.]*', '-'):gsub('%-+$', '')) -end diff --git a/libs/lua-platform-info/files/brcm2708/bcm2709/platform_info.lua b/libs/lua-platform-info/files/brcm2708/bcm2709/platform_info.lua deleted file mode 100644 index 09e0212..0000000 --- a/libs/lua-platform-info/files/brcm2708/bcm2709/platform_info.lua +++ /dev/null @@ -1,37 +0,0 @@ -local function read_line(file) - local f = io.open(file) - local ret = f:read('*line') - f:close() - return ret -end - -local board_name = read_line('/tmp/sysinfo/board_name') -local model = read_line('/tmp/sysinfo/model') - -module 'platform_info' - - --- The OpenWrt target -function get_target() - return 'brcm2708' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'bcm2709' -end - --- The board name -function get_board_name() - return board_name -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return (model:lower():gsub('[^%w%.%+]+', '-'):gsub('%.+', '.'):gsub('[%-%.]*%-[%-%.]*', '-'):gsub('%-+$', '')) -end diff --git a/libs/lua-platform-info/files/mpc85xx/generic/platform_info.lua b/libs/lua-platform-info/files/mpc85xx/generic/platform_info.lua deleted file mode 100644 index 3e63c80..0000000 --- a/libs/lua-platform-info/files/mpc85xx/generic/platform_info.lua +++ /dev/null @@ -1,37 +0,0 @@ -local function read_line(file) - local f = io.open(file) - local ret = f:read('*line') - f:close() - return ret -end - -local board_name = read_line('/tmp/sysinfo/board_name') -local model = read_line('/tmp/sysinfo/model') - -module 'platform_info' - - --- The OpenWrt target -function get_target() - return 'mpc85xx' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'generic' -end - --- The board name -function get_board_name() - return board_name -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return (model:lower():gsub('[^%w%.%+]+', '-'):gsub('%.+', '.'):gsub('[%-%.]*%-[%-%.]*', '-'):gsub('%-+$', '')) -end diff --git a/libs/lua-platform-info/files/ramips/rt305x/platform_info.lua b/libs/lua-platform-info/files/ramips/rt305x/platform_info.lua deleted file mode 100644 index b23385d..0000000 --- a/libs/lua-platform-info/files/ramips/rt305x/platform_info.lua +++ /dev/null @@ -1,32 +0,0 @@ -local f = io.popen('. /lib/functions.sh; . /lib/ramips.sh; ramips_board_detect; echo "$RAMIPS_BOARD_NAME"; echo "$RAMIPS_MODEL"') -local board_name, model = f:read("*a"):match('([^\n]+)\n([^\n]+)') -f:close() - - -module 'platform_info' - - --- The OpenWrt target -function get_target() - return 'ramips' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'rt305x' -end - --- The board name -function get_board_name() - return board_name -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return (model:lower():gsub('[^%w]+', '-'):gsub('%-+$', '')) -end diff --git a/libs/lua-platform-info/files/sunxi/platform_info.lua b/libs/lua-platform-info/files/sunxi/platform_info.lua deleted file mode 100644 index 30314b0..0000000 --- a/libs/lua-platform-info/files/sunxi/platform_info.lua +++ /dev/null @@ -1,37 +0,0 @@ -local function read_line(file) - local f = io.open(file) - local ret = f:read('*line') - f:close() - return ret -end - -local board_name = read_line('/tmp/sysinfo/board_name') -local model = read_line('/tmp/sysinfo/model') - -module 'platform_info' - - --- The OpenWrt target -function get_target() - return 'sunxi' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return nil -end - --- The board name -function get_board_name() - return board_name -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return (model:lower():gsub('[^%w%.%+]+', '-'):gsub('%.+', '.'):gsub('[%-%.]*%-[%-%.]*', '-'):gsub('%-+$', '')) -end diff --git a/libs/lua-platform-info/files/x86/64/platform_info.lua b/libs/lua-platform-info/files/x86/64/platform_info.lua deleted file mode 100644 index 68e645e..0000000 --- a/libs/lua-platform-info/files/x86/64/platform_info.lua +++ /dev/null @@ -1,36 +0,0 @@ -local model - -for line in io.lines('/proc/cpuinfo') do - model = line:match('^model name%s*:%s*(.+)$') - if model then - break - end -end - - -module 'platform_info' - --- The OpenWrt target -function get_target() - return 'x86' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return '64' -end - --- The board name -function get_board_name() - return nil -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return 'x86-64' -end diff --git a/libs/lua-platform-info/files/x86/generic/platform_info.lua b/libs/lua-platform-info/files/x86/generic/platform_info.lua deleted file mode 100644 index 34e3fde..0000000 --- a/libs/lua-platform-info/files/x86/generic/platform_info.lua +++ /dev/null @@ -1,36 +0,0 @@ -local model - -for line in io.lines('/proc/cpuinfo') do - model = line:match('^model name%s*:%s*(.+)$') - if model then - break - end -end - - -module 'platform_info' - --- The OpenWrt target -function get_target() - return 'x86' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'generic' -end - --- The board name -function get_board_name() - return nil -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return 'x86-generic' -end diff --git a/libs/lua-platform-info/files/x86/kvm_guest/platform_info.lua b/libs/lua-platform-info/files/x86/kvm_guest/platform_info.lua deleted file mode 100644 index 594a783..0000000 --- a/libs/lua-platform-info/files/x86/kvm_guest/platform_info.lua +++ /dev/null @@ -1,37 +0,0 @@ -local model - -for line in io.lines('/proc/cpuinfo') do - model = line:match('^model name%s*:%s*(.+)$') - if model then - break - end -end - - -module 'platform_info' - - --- The OpenWrt target -function get_target() - return 'x86' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'kvm_guest' -end - --- The board name -function get_board_name() - return nil -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return 'x86-kvm' -end diff --git a/libs/lua-platform-info/files/x86/xen_domu/platform_info.lua b/libs/lua-platform-info/files/x86/xen_domu/platform_info.lua deleted file mode 100644 index b47bafd..0000000 --- a/libs/lua-platform-info/files/x86/xen_domu/platform_info.lua +++ /dev/null @@ -1,36 +0,0 @@ -local model - -for line in io.lines('/proc/cpuinfo') do - model = line:match('^model name%s*:%s*(.+)$') - if model then - break - end -end - - -module 'platform_info' - --- The OpenWrt target -function get_target() - return 'x86' -end - --- The OpenWrt subtarget or nil -function get_subtarget() - return 'xen_domu' -end - --- The board name -function get_board_name() - return nil -end - --- The model name -function get_model() - return model -end - --- The image name for sysupgrades -function get_image_name() - return 'x86-xen' -end diff --git a/libs/lua-platform-info/src/Makefile b/libs/lua-platform-info/src/Makefile new file mode 100644 index 0000000..d8b68a6 --- /dev/null +++ b/libs/lua-platform-info/src/Makefile @@ -0,0 +1,6 @@ +all: platform_info.so + +CFLAGS += -Wall + +platform_info.so: platform_info.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $^ $(LDLIBS) -lplatforminfo diff --git a/libs/lua-platform-info/src/platform_info.c b/libs/lua-platform-info/src/platform_info.c new file mode 100644 index 0000000..e2937ec --- /dev/null +++ b/libs/lua-platform-info/src/platform_info.c @@ -0,0 +1,77 @@ +/* + Copyright (c) 2015, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include + +#include +#include +#include + + +static int push_string(lua_State *L, const char *value) { + if (value) + lua_pushstring(L, value); + else + lua_pushnil(L); + + return 1; +} + + +static int get_target(lua_State *L) { + return push_string(L, platforminfo_get_target()); +} + +static int get_subtarget(lua_State *L) { + return push_string(L, platforminfo_get_subtarget()); +} + +static int get_board_name(lua_State *L) { + return push_string(L, platforminfo_get_board_name()); +} + +static int get_model(lua_State *L) { + return push_string(L, platforminfo_get_model()); +} + +static int get_image_name(lua_State *L) { + return push_string(L, platforminfo_get_image_name()); +} + + +static const luaL_reg R[] = { + {"get_target", get_target}, + {"get_subtarget", get_subtarget}, + {"get_board_name", get_board_name}, + {"get_model", get_model}, + {"get_image_name", get_image_name}, + {NULL, NULL }, +}; + +LUALIB_API int luaopen_platform_info(lua_State *L) { + luaL_register(L, "platform_info", R); + return 1; +}