[Buildroot] [PATCH v2 1/1] flatcc: new package

Steve deRosier derosier at gmail.com
Sun May 1 23:29:36 UTC 2016


This adds flatcc as a new package, pulling v0.3.3 from github. flatcc has
both a host tool - the compiler, and libraries for the target.

Signed-off-by: Steve deRosier <steve.derosier at lairdtech.com>

---
Changes v1 -> v2
  - Updated to v0.3.3 of flatcc
  - Added hash file
  - Added some build patches to flatcc in order to use v0.3.3
  - Added ability to handle static and shared libs at same time
  - Addressed other reviewer comments

Signed-off-by: Steve deRosier <steve.derosier at lairdtech.com>
---
 package/Config.in                                  |   1 +
 ...d-Specify-C-language-explicitly-for-CMake.patch |  30 ++++
 ...-cmake-to-build-both-static-and-shared-li.patch | 158 +++++++++++++++++++++
 package/flatcc/Config.in                           |   9 ++
 package/flatcc/flatcc.hash                         |   2 +
 package/flatcc/flatcc.mk                           |  63 ++++++++
 6 files changed, 263 insertions(+)
 create mode 100644 package/flatcc/0001-build-Specify-C-language-explicitly-for-CMake.patch
 create mode 100644 package/flatcc/0002-build-allow-cmake-to-build-both-static-and-shared-li.patch
 create mode 100644 package/flatcc/Config.in
 create mode 100644 package/flatcc/flatcc.hash
 create mode 100644 package/flatcc/flatcc.mk

diff --git a/package/Config.in b/package/Config.in
index 9d668bf..4f00446 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1208,6 +1208,7 @@ menu "Other"
 	source "package/ding-libs/Config.in"
 	source "package/eigen/Config.in"
 	source "package/elfutils/Config.in"
+	source "package/flatcc/Config.in"
 	source "package/fftw/Config.in"
 	source "package/flann/Config.in"
 	source "package/gflags/Config.in"
diff --git a/package/flatcc/0001-build-Specify-C-language-explicitly-for-CMake.patch b/package/flatcc/0001-build-Specify-C-language-explicitly-for-CMake.patch
new file mode 100644
index 0000000..bccc0f7
--- /dev/null
+++ b/package/flatcc/0001-build-Specify-C-language-explicitly-for-CMake.patch
@@ -0,0 +1,30 @@
+From 82b75921413502374ad23d7a9d93b9e9021c0742 Mon Sep 17 00:00:00 2001
+From: Steve deRosier <steve.derosier at lairdtech.com>
+Date: Thu, 28 Apr 2016 15:58:52 -0700
+Subject: [PATCH 1/2] build: Specify C language explicitly for CMake
+
+If the build system doesn't have a C++ compiler installed, CMake will fail
+with a line like:
+Check for working CXX compiler: CMAKE_CXX_COMPILER_FULLPATH-NOTFOUND
+
+As flatcc is explicitly C-only, let's be sure we can use it without a C++
+compiler installed.
+
+Signed-off-by: Steve deRosier <steve.derosier at lairdtech.com>
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6157f96..b9f5bc3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -4,7 +4,7 @@
+ #cmake_minimum_required (VERSION 2.8.11)
+ cmake_minimum_required (VERSION 2.8)
+ 
+-project (FlatCC)
++project (FlatCC C)
+ 
+ #
+ # NOTE: when changing build options, clean the build using:
+-- 
+1.9.1
+
diff --git a/package/flatcc/0002-build-allow-cmake-to-build-both-static-and-shared-li.patch b/package/flatcc/0002-build-allow-cmake-to-build-both-static-and-shared-li.patch
new file mode 100644
index 0000000..091631e
--- /dev/null
+++ b/package/flatcc/0002-build-allow-cmake-to-build-both-static-and-shared-li.patch
@@ -0,0 +1,158 @@
+From bad274137c7cd8bd356b65ae4e3fcbd60b072b5d Mon Sep 17 00:00:00 2001
+From: Steve deRosier <steve.derosier at lairdtech.com>
+Date: Fri, 29 Apr 2016 16:25:29 -0700
+Subject: [PATCH 2/2] build: allow cmake to build both static and shared
+ libraries
+
+By default, cmake can only build one of static or shared libraries, not
+both. Systems like Buildroot have the ability to configure the build to
+build both static and shared libraries, and the current behavior gets in
+the way of that. This patch makes it possible to do both on the same build.
+
+Signed-off-by: Steve deRosier <steve.derosier at lairdtech.com>
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index b9f5bc3..da30854 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -12,6 +12,11 @@ project (FlatCC C)
+ #   scripts/cleanall.sh
+ #
+ 
++# Options to control if we build static or shared libraries. Needed because
++# cmake has us explicitly do both versions if we want both versions.
++option(FLATCC_WITH_STATIC "Build the static version of the library" ON)
++option(FLATCC_WITH_SHARED "Build the shared version of the library" ON)
++
+ # Disable if cross compiling or if experiencing build issues with certain
+ # custom CMake configurations - suspect dependency issue on flatcc tool
+ # in custom build steps used by tests and samples.
+@@ -66,6 +71,10 @@ option (FLATCC_ALLOW_WERROR "allow -Werror to be configured" ON)
+ # try using this option.
+ option (FLATCC_IGNORE_CONST_COND "silence const condition warnings" OFF)
+ 
++if (NOT (FLATCC_WITH_STATIC OR FLATCC_WITH_SHARED))
++	message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.")
++endif()
++
+ if (FLATCC_TEST)
+     enable_testing()
+ endif()
+@@ -99,9 +108,17 @@ set (dist_dir "${PROJECT_SOURCE_DIR}")
+ # set (dist_dir "${CMAKE_BINARY_DIR}")
+ 
+ # The targets we copy to bin and lib directories, i.e. not tests.
++if (FLATCC_WITH_STATIC)
++    set(static_libs flatcc flatccrt)
++endif()
++
++if (FLATCC_WITH_SHARED)
++    set(static_libs flatcc_shared flatccrt_shared)
++endif()
++
+ set(dist_targets
+-    flatcc
+-    flatccrt
++    ${static_libs}
++    ${shared_libs}
+     flatcc_cli
+ )
+ 
+diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt
+index e4baf28..58df256 100644
+--- a/src/cli/CMakeLists.txt
++++ b/src/cli/CMakeLists.txt
+@@ -7,9 +7,15 @@ add_executable(flatcc_cli
+     flatcc_cli.c
+ )
+ 
+-target_link_libraries(flatcc_cli
+-    flatcc
+-)
++if (FLATCC_WITH_SHARED)
++    target_link_libraries(flatcc_cli
++        flatcc_shared
++    )
++elseif (FLATCC_WITH_STATIC)
++    target_link_libraries(flatcc_cli
++        flatcc
++    )
++endif()
+ 
+ # Rename because the libflatcc library and the flatcc executable would
+ # conflict if they had the same target name `flatcc`.
+diff --git a/src/compiler/CMakeLists.txt b/src/compiler/CMakeLists.txt
+index 9bf6b13..6b41289 100644
+--- a/src/compiler/CMakeLists.txt
++++ b/src/compiler/CMakeLists.txt
+@@ -34,5 +34,26 @@ if (FLATCC_REFLECTION)
+     set (SOURCES ${SOURCES} codegen_schema.c)
+ endif(FLATCC_REFLECTION)
+ 
+-add_library(flatcc ${SOURCES})
++if (FLATCC_WITH_STATIC)
++    add_library(flatcc STATIC ${SOURCES})
++    list(APPEND FLATCC_LIBRARIES flatcc)
+ 
++    if (WIN32)
++        # Windows uses the same .lib ending for static libraries and shared
++        # library linker files, so rename the static library.
++        set_target_properties(flatcc
++            PROPERTIES
++            OUTPUT_NAME flatcc_static)
++    endif()
++endif()
++
++if (FLATCC_WITH_SHARED)
++     add_library(flatcc_shared SHARED ${SOURCES})
++     list(APPEND FLATCC_LIBRARIES flatcc_shared)
++
++     # We want the shared lib to be named "libflatcc"
++     # not "libflatcc_shared".
++     set_target_properties(flatcc_shared
++         PROPERTIES
++         OUTPUT_NAME flatcc)
++endif()
+diff --git a/src/runtime/CMakeLists.txt b/src/runtime/CMakeLists.txt
+index 8fe6fef..652dd14 100644
+--- a/src/runtime/CMakeLists.txt
++++ b/src/runtime/CMakeLists.txt
+@@ -2,10 +2,34 @@ include_directories (
+     "${PROJECT_SOURCE_DIR}/include"
+ )
+ 
+-add_library(flatccrt
++set (FLATCCRT_SOURCES
+     builder.c
+     emitter.c
+     verifier.c
+     json_parser.c
+     json_printer.c
+ )
++
++if (FLATCC_WITH_STATIC)
++    add_library(flatccrt STATIC ${FLATCCRT_SOURCES})
++    list(APPEND FLATCC_LIBRARIES flatccrt)
++
++    if (WIN32)
++        # Windows uses the same .lib ending for static libraries and shared
++        # library linker files, so rename the static library.
++        set_target_properties(flatccrt
++            PROPERTIES
++            OUTPUT_NAME flatccrt_static)
++    endif()
++endif()
++
++if (FLATCC_WITH_SHARED)
++    add_library(flatccrt_shared SHARED ${FLATCCRT_SOURCES})
++    list(APPEND FLATCC_LIBRARIES flatccrt_shared)
++
++    # We want the shared lib to be named "libflatccrt"
++    # not "libflatccrt_shared".
++    set_target_properties(flatccrt_shared
++        PROPERTIES
++        OUTPUT_NAME flatccrt)
++endif()
+-- 
+1.9.1
+
diff --git a/package/flatcc/Config.in b/package/flatcc/Config.in
new file mode 100644
index 0000000..a3b9b01
--- /dev/null
+++ b/package/flatcc/Config.in
@@ -0,0 +1,9 @@
+config BR2_PACKAGE_FLATCC
+	bool "flatcc"
+	depends on BR2_ENDIAN = "LITTLE"
+	help
+	  flatcc is C language implementation of Google Flatbuffers. It
+	  consists of both a library for the target as well as a
+	  flatbuffer compiler tool for the host.
+
+	  https://github.com/dvidelabs/flatcc
diff --git a/package/flatcc/flatcc.hash b/package/flatcc/flatcc.hash
new file mode 100644
index 0000000..881e0ca
--- /dev/null
+++ b/package/flatcc/flatcc.hash
@@ -0,0 +1,2 @@
+# Locally calculated
+sha256	14903f53536947295214f7c1537b6ff933565453a440e610f0b85c3fb3fe6642  flatcc-v0.3.3.tar.gz
diff --git a/package/flatcc/flatcc.mk b/package/flatcc/flatcc.mk
new file mode 100644
index 0000000..a7e9b7a
--- /dev/null
+++ b/package/flatcc/flatcc.mk
@@ -0,0 +1,63 @@
+################################################################################
+#
+# FLATCC
+#
+################################################################################
+FLATCC_VERSION = v0.3.3
+FLATCC_SITE =$(call github,dvidelabs,flatcc,$(FLATCC_VERSION))
+FLATCC_LICENSE = Apache-2.0
+FLATCC_LICENSE_FILES = LICENSE
+FLATCC_INSTALL_STAGING = YES
+FLATCC_DEPENDENCIES = host-flatcc
+
+FLATCC_CONF_OPTS += -DFLATCC_TEST=OFF
+HOST_FLATCC_CONF_OPTS += -DFLATCC_TEST=OFF
+
+define HOST_FLATCC_INSTALL_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/bin/flatcc $(HOST_DIR)/usr/bin/flatcc
+endef
+
+# Need to force flatcc to do static or shared or both libraries
+ifeq ($(BR2_STATIC_LIBS),y)
+FLATCC_CONF_OPTS += -DFLATCC_WITH_SHARED=OFF -DFLATCC_WITH_STATIC=ON
+else ifeq ($(BR2_SHARED_STATIC_LIBS),y)
+FLATCC_CONF_OPTS += -DFLATCC_WITH_SHARED=ON -DFLATCC_WITH_STATIC=ON
+else ifeq ($(BR2_SHARED_LIBS),y)
+FLATCC_CONF_OPTS += -DFLATCC_WITH_SHARED=ON -DFLATCC_WITH_STATIC=OFF
+endif
+
+# flatcc's cmake build doesn't include install targets, so we need to manually
+# install the various components to their respective destinations. There's
+# several cases that need to be taken care of, so we do a little dance to do so.
+ifeq ($(BR2_SHARED_LIBS),)
+define FLATCC_INSTALL_STAGING_STATIC
+	$(INSTALL) -D -m 0755 $(@D)/lib/libflatcc.a $(STAGING_DIR)/usr/lib/libflatcc.a
+	$(INSTALL) -D -m 0755 $(@D)/lib/libflatccrt.a $(STAGING_DIR)/usr/lib/libflatccrt.a
+endef
+endif
+
+ifeq ($(BR2_STATIC_LIBS),)
+define FLATCC_INSTALL_STAGING_SHARED
+	$(INSTALL) -D -m 0755 $(@D)/lib/libflatcc.so $(STAGING_DIR)/usr/lib/libflatcc.so
+	$(INSTALL) -D -m 0755 $(@D)/lib/libflatccrt.so $(STAGING_DIR)/usr/lib/libflatccrt.so
+endef
+endif
+
+define FLATCC_INSTALL_STAGING_CMDS
+	cp -r $(@D)/include/flatcc $(STAGING_DIR)/usr/include/.
+	$(FLATCC_INSTALL_STAGING_STATIC)
+	$(FLATCC_INSTALL_STAGING_SHARED)
+endef
+
+# If we don't have the shared libs to install, don't run target install
+ifeq ($(FLATCC_INSTALL_STAGING_SHARED),)
+FLATCC_INSTALL_TARGET = NO
+endif
+
+define FLATCC_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/lib/libflatcc.so $(TARGET_DIR)/usr/lib/libflatcc.so
+	$(INSTALL) -D -m 0755 $(@D)/lib/libflatccrt.so $(TARGET_DIR)/usr/lib/libflatccrt.so
+endef
+
+$(eval $(cmake-package))
+$(eval $(host-cmake-package))
-- 
1.9.1



More information about the buildroot mailing list