diff options
author | Joshua Haberman <jhaberman@gmail.com> | 2018-12-08 13:39:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-08 13:39:48 +0100 |
commit | 73ccf4a7c7d8a1a26d1258f44a37c1fc02f4b14b (patch) | |
tree | 7223dda1c0e4f72b79cb102cc329981fd4c17001 /tools/make_cmakelists.py | |
parent | 13c59cb051c4deee5367f9c5fc7b5d07363496a0 (diff) | |
parent | 66f90464a8cd00e2380fb5567309f1bbda11bb8f (diff) |
Merge pull request #140 from haberman/cmake-mac-fixes
Bazel and CMake fixes for macOS
Diffstat (limited to 'tools/make_cmakelists.py')
-rwxr-xr-x | tools/make_cmakelists.py | 30 |
1 files changed, 18 insertions, 12 deletions
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 @@ class BuildFileFunctions(object): 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 @@ class BuildFileFunctions(object): 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 |