Fixes for macOS build. Also run tests in CMake test.
diff --git a/BUILD b/BUILD index 97380a4..a0eadb3 100644 --- a/BUILD +++ b/BUILD
@@ -407,7 +407,7 @@ make_shell_script( name = "gen_run_cmake_build", out = "run_cmake_build.sh", - contents = "mkdir build && cd build && cmake .. && make -j8" + contents = "mkdir build && cd build && cmake .. && make -j8 && make test" ) sh_test(
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c6d5fa..412cdcd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -117,11 +117,9 @@ upb/json/printer.h) target_link_libraries(upb_json upb) -add_library(upb_cc_bindings - upb/bindings/stdc++/string.h) -target_link_libraries(upb_cc_bindings +add_library(upb_cc_bindings INTERFACE) +target_link_libraries(upb_cc_bindings INTERFACE upb) -set_target_properties(upb_cc_bindings PROPERTIES LINKER_LANGUAGE CXX) add_library(upb_test tests/testmain.cc tests/test_util.h
diff --git a/build_defs.bzl b/build_defs.bzl index 5bbbc4f..362691a 100644 --- a/build_defs.bzl +++ b/build_defs.bzl
@@ -147,7 +147,7 @@ srcs = [script_src], testonly = 1, cmd = "cat $(location " + script_src + ") > $@; " + - "sed -i 's|INSERT_FILE_LIST_HERE|" + "\\n ".join(file_list) + "|' $@", + "sed -i '' -e 's|INSERT_FILE_LIST_HERE|" + "\\\n ".join(file_list) + "|' $@", ) native.py_test(
diff --git a/tools/make_cmakelists.py b/tools/make_cmakelists.py index d7996d8..b8f46b9 100755 --- a/tools/make_cmakelists.py +++ b/tools/make_cmakelists.py
@@ -22,11 +22,12 @@ def __init__(self, converter): self.converter = converter - def _add_deps(self, kwargs): + def _add_deps(self, kwargs, keyword=""): if "deps" not in kwargs: return - self.converter.toplevel += "target_link_libraries(%s\n %s)\n" % ( + self.converter.toplevel += "target_link_libraries(%s%s\n %s)\n" % ( kwargs["name"], + keyword, "\n ".join(StripColons(kwargs["deps"])) ) @@ -37,17 +38,22 @@ if kwargs["name"] == "amalgamation" or kwargs["name"] == "upbc_generator": return files = kwargs.get("srcs", []) + kwargs.get("hdrs", []) - self.converter.toplevel += "add_library(%s\n %s)\n" % ( - kwargs["name"], - "\n ".join(files) - ) - self._add_deps(kwargs) - # CMake wants to know if each library is C or C++. - # If there are only .h files, it can't infer. Assume C++. - if not filter(IsSourceFile, files): - line = "set_target_properties(%s PROPERTIES LINKER_LANGUAGE CXX)\n" - self.converter.toplevel += line % (kwargs["name"]) + if filter(IsSourceFile, files): + # Has sources, make this a normal library. + self.converter.toplevel += "add_library(%s\n %s)\n" % ( + kwargs["name"], + "\n ".join(files) + ) + self._add_deps(kwargs) + else: + # Header-only library, have to do a couple things differently. + # For some info, see: + # http://mariobadr.com/creating-a-header-only-library-with-cmake.html + self.converter.toplevel += "add_library(%s INTERFACE)\n" % ( + kwargs["name"] + ) + self._add_deps(kwargs, " INTERFACE") def cc_binary(self, **kwargs): pass