Showing with 19,795 additions and 113 deletions.
  1. +190 −0 .github/workflows/levitation-ci-lint.yml
  2. +187 −0 .github/workflows/levitation-on-push.yml
  3. +15 −0 .gitignore
  4. +23 −0 .gitlab-ci.yml
  5. +218 −0 LICENSE
  6. +323 −75 README.md
  7. +11 −0 clang/CMakeLists.txt
  8. +8 −0 clang/include/clang/Basic/DiagnosticCommonKinds.td
  9. +4 −0 clang/include/clang/Basic/DiagnosticDriverKinds.td
  10. +34 −0 clang/include/clang/Basic/DiagnosticFrontendKinds.td
  11. +38 −0 clang/include/clang/Basic/DiagnosticGroups.td
  12. +19 −0 clang/include/clang/Basic/DiagnosticLexKinds.td
  13. +7 −0 clang/include/clang/Basic/DiagnosticSerializationKinds.td
  14. +3 −0 clang/include/clang/Basic/LangOptions.def
  15. +20 −0 clang/include/clang/Basic/LangOptions.h
  16. +5 −0 clang/include/clang/Basic/TokenKinds.def
  17. +7 −0 clang/include/clang/Config/config.h.cmake
  18. +60 −0 clang/include/clang/Driver/CC1Options.td
  19. +32 −0 clang/include/clang/Driver/Options.td
  20. +9 −0 clang/include/clang/Frontend/CompilerInstance.h
  21. +1 −0 clang/include/clang/Frontend/FrontendAction.h
  22. +2 −0 clang/include/clang/Frontend/FrontendActions.h
  23. +34 −0 clang/include/clang/Frontend/FrontendOptions.h
  24. +54 −0 clang/include/clang/Frontend/LevitationASTConsumers.h
  25. +107 −0 clang/include/clang/Frontend/LevitationFrontendActions.h
  26. +79 −0 clang/include/clang/Levitation/CommandLineTool/AlignedPrinter.h
  27. +233 −0 clang/include/clang/Levitation/CommandLineTool/ArgsParser.h
  28. +322 −0 clang/include/clang/Levitation/CommandLineTool/CommandLineTool.h
  29. +41 −0 clang/include/clang/Levitation/CommandLineTool/Parameter.h
  30. +103 −0 clang/include/clang/Levitation/CommandLineTool/ParameterBuilder.h
  31. +72 −0 clang/include/clang/Levitation/CommandLineTool/ParameterValueHandling.h
  32. +80 −0 clang/include/clang/Levitation/Common/CreatableSingleton.h
  33. +71 −0 clang/include/clang/Levitation/Common/Failable.h
  34. +159 −0 clang/include/clang/Levitation/Common/File.h
  35. +135 −0 clang/include/clang/Levitation/Common/FileSystem.h
  36. +131 −0 clang/include/clang/Levitation/Common/IndexedSet.h
  37. +200 −0 clang/include/clang/Levitation/Common/Path.h
  38. +188 −0 clang/include/clang/Levitation/Common/SimpleLogger.h
  39. +88 −0 clang/include/clang/Levitation/Common/StringBuilder.h
  40. +73 −0 clang/include/clang/Levitation/Common/StringOrRef.h
  41. +30 −0 clang/include/clang/Levitation/Common/StringsPool.h
  42. +28 −0 clang/include/clang/Levitation/Common/Thread.h
  43. +64 −0 clang/include/clang/Levitation/Common/Utility.h
  44. +64 −0 clang/include/clang/Levitation/Common/WithOperator.h
  45. +98 −0 clang/include/clang/Levitation/DeclASTMeta/DeclASTMeta.h
  46. +71 −0 clang/include/clang/Levitation/DeclASTMeta/DeclASTMetaLoader.h
  47. +90 −0 clang/include/clang/Levitation/Dependencies.h
  48. +863 −0 clang/include/clang/Levitation/DependenciesSolver/DependenciesGraph.h
  49. +70 −0 clang/include/clang/Levitation/DependenciesSolver/DependenciesSolver.h
  50. +86 −0 clang/include/clang/Levitation/DependenciesSolver/ParsedDependencies.h
  51. +360 −0 clang/include/clang/Levitation/DependenciesSolver/SolvedDependenciesInfo.h
  52. +129 −0 clang/include/clang/Levitation/DeserializationListeners.h
  53. +226 −0 clang/include/clang/Levitation/Driver/Driver.h
  54. +37 −0 clang/include/clang/Levitation/Driver/DriverDefaults.h
  55. +172 −0 clang/include/clang/Levitation/Driver/Dump.h
  56. +402 −0 clang/include/clang/Levitation/Driver/HeaderGenerator.h
  57. +95 −0 clang/include/clang/Levitation/Driver/PackageFiles.h
  58. +39 −0 clang/include/clang/Levitation/FileExtensions.h
  59. +190 −0 clang/include/clang/Levitation/Serialization.h
  60. +457 −0 clang/include/clang/Levitation/TasksManager/TasksManager.h
  61. +71 −0 clang/include/clang/Levitation/UnitID.h
  62. +51 −0 clang/include/clang/Lex/Preprocessor.h
  63. +6 −0 clang/include/clang/Lex/PreprocessorOptions.h
  64. +32 −0 clang/include/clang/Parse/LevitationParser.h
  65. +47 −0 clang/include/clang/Parse/Parser.h
  66. +118 −0 clang/include/clang/Sema/Sema.h
  67. +13 −0 clang/include/clang/Serialization/ASTBitCodes.h
  68. +62 −1 clang/include/clang/Serialization/ASTReader.h
  69. +24 −2 clang/include/clang/Serialization/ModuleFile.h
  70. +27 −1 clang/include/clang/Serialization/ModuleManager.h
  71. +9 −2 clang/lib/AST/DeclBase.cpp
  72. +26 −2 clang/lib/AST/DeclPrinter.cpp
  73. +7 −1 clang/lib/Basic/IdentifierTable.cpp
  74. +1 −0 clang/lib/CMakeLists.txt
  75. +15 −0 clang/lib/Driver/Driver.cpp
  76. +123 −0 clang/lib/Driver/ToolChains/Clang.cpp
  77. +8 −0 clang/lib/Driver/ToolChains/PS4CPU.cpp
  78. +18 −1 clang/lib/Driver/Types.cpp
  79. +4 −0 clang/lib/Frontend/ASTUnit.cpp
  80. +2 −0 clang/lib/Frontend/CMakeLists.txt
  81. +14 −0 clang/lib/Frontend/CompilerInstance.cpp
  82. +197 −0 clang/lib/Frontend/CompilerInvocation.cpp
  83. +8 −0 clang/lib/Frontend/FrontendOptions.cpp
  84. +190 −0 clang/lib/Frontend/LevitationASTConsumers.cpp
  85. +591 −0 clang/lib/Frontend/LevitationFrontendActions.cpp
  86. +14 −1 clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
  87. +286 −0 clang/lib/Levitation/BugTracking.txt
  88. +19 −0 clang/lib/Levitation/CMakeLists.txt
  89. +16 −0 clang/lib/Levitation/DependenciesSolver/CMakeLists.txt
  90. +597 −0 clang/lib/Levitation/DependenciesSolver/DependenciesSolver.cpp
  91. +18 −0 clang/lib/Levitation/Driver/CMakeLists.txt
  92. +1,994 −0 clang/lib/Levitation/Driver/Driver.cpp
  93. +29 −0 clang/lib/Levitation/Driver/DriverDefaults.cpp
  94. +31 −0 clang/lib/Levitation/FileExtensions.cpp
  95. +1,307 −0 clang/lib/Levitation/Serialization.cpp
  96. +392 −0 clang/lib/Lex/PPDirectives.cpp
  97. +18 −0 clang/lib/Lex/PPMacroExpansion.cpp
  98. +2 −0 clang/lib/Parse/CMakeLists.txt
  99. +42 −0 clang/lib/Parse/LevitationParser.cpp
  100. +16 −0 clang/lib/Parse/ParseAST.cpp
  101. +60 −0 clang/lib/Parse/ParseCXXInlineMethods.cpp
  102. +144 −0 clang/lib/Parse/ParseDecl.cpp
  103. +276 −0 clang/lib/Parse/ParseLevitation.cpp
  104. +66 −0 clang/lib/Parse/Parser.cpp
  105. +2 −0 clang/lib/Sema/CMakeLists.txt
  106. +40 −1 clang/lib/Sema/SemaDecl.cpp
  107. +463 −0 clang/lib/Sema/SemaLevitation.cpp
  108. +323 −17 clang/lib/Serialization/ASTReader.cpp
  109. +83 −2 clang/lib/Serialization/ASTReaderDecl.cpp
  110. +100 −2 clang/lib/Serialization/ASTWriter.cpp
  111. +21 −1 clang/lib/Serialization/ModuleManager.cpp
  112. +1 −1 clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp
  113. +18 −0 clang/test/AST/ast-print-record-decl.c
  114. +2 −0 clang/test/Driver/hexagon-toolchain-elf.c
  115. +2 −0 clang/test/Driver/mips-cs.cpp
  116. +1 −0 clang/test/Driver/mips-fsf.cpp
  117. +1 −0 clang/test/Driver/mips-img-v2.cpp
  118. +1 −0 clang/test/Driver/mips-img.cpp
  119. +1 −0 clang/test/Driver/ps4-header-search.c
  120. +1 −0 clang/test/Driver/riscv32-toolchain-extra.c
  121. +1 −0 clang/test/Driver/riscv64-toolchain-extra.c
  122. +1 −0 clang/test/Driver/sysroot.c
  123. +1 −0 clang/test/Frontend/warning-poison-system-directories.c
  124. +3 −0 clang/test/Levitation/Driver/Inputs/libs/test-lib-a/test_lib/A.cppl
  125. +3 −0 clang/test/Levitation/Driver/Inputs/libs/test-lib-b/test_lib/B.cppl
  126. 0 clang/test/Levitation/Driver/body-only-neg/Inputs/A.cppl
  127. +25 −0 clang/test/Levitation/Driver/body-only-neg/main.cppl
  128. 0 clang/test/Levitation/Driver/body-only/Inputs/A.cppl
  129. 0 clang/test/Levitation/Driver/body-only/Inputs/B.cppl
  130. +7 −0 clang/test/Levitation/Driver/body-only/Inputs/C.cppl
  131. +29 −0 clang/test/Levitation/Driver/body-only/main.cppl
  132. +10 −0 clang/test/Levitation/Driver/bug-GITHUB1-top-decl-group/main.cppl
  133. +5 −0 clang/test/Levitation/Driver/extra-flags/Inputs/A.cppl
  134. +55 −0 clang/test/Levitation/Driver/extra-flags/main.cppl
  135. +302 −0 clang/test/Levitation/Driver/extra-flags/preamble.hpp
  136. +8 −0 clang/test/Levitation/Driver/ignore-build-dir/A.cppl
  137. 0 clang/test/Levitation/Driver/ignore-build-dir/Inputs/B.cppl
  138. +5 −0 clang/test/Levitation/Driver/includes-merge-stl-vector-bug/Inputs/A.cppl
  139. +5 −0 clang/test/Levitation/Driver/includes-merge-stl-vector-bug/Inputs/B.cppl
  140. +30 −0 clang/test/Levitation/Driver/includes-merge-stl-vector-bug/Inputs/vector-reduced
  141. +12 −0 clang/test/Levitation/Driver/includes-merge-stl-vector-bug/main.cppl
  142. +1 −0 clang/test/Levitation/Driver/includes/Inputs/A.cppl
  143. +1 −0 clang/test/Levitation/Driver/includes/Inputs/B.cppl
  144. +10 −0 clang/test/Levitation/Driver/includes/header.h
  145. +11 −0 clang/test/Levitation/Driver/includes/main.cppl
  146. +10 −0 clang/test/Levitation/Driver/incremental-build/Inputs/A.cppl
  147. +9 −0 clang/test/Levitation/Driver/incremental-build/Inputs/A.cppl.first
  148. +10 −0 clang/test/Levitation/Driver/incremental-build/Inputs/A.cppl.new-body
  149. +10 −0 clang/test/Levitation/Driver/incremental-build/Inputs/A.cppl.new-decl
  150. +4 −0 clang/test/Levitation/Driver/incremental-build/Inputs/B.cppl
  151. +3 −0 clang/test/Levitation/Driver/incremental-build/Inputs/B.cppl.first
  152. +4 −0 clang/test/Levitation/Driver/incremental-build/Inputs/B.cppl.new-decl
  153. +208 −0 clang/test/Levitation/Driver/incremental-build/main.cppl
  154. +1 −0 clang/test/Levitation/Driver/incremental-build/preamble.hpp
  155. +1 −0 clang/test/Levitation/Driver/incremental-build/preamble.hpp.first
  156. +1 −0 clang/test/Levitation/Driver/incremental-build/preamble.hpp.second
  157. +53 −0 clang/test/Levitation/Driver/lib-create/A.cppl
  158. +28 −0 clang/test/Levitation/Driver/lib-create/Inputs/B.cppl
  159. +14 −0 clang/test/Levitation/Driver/lib-create/Inputs/C.cppl
  160. +6 −0 clang/test/Levitation/Driver/lib-create/Inputs/preamble.hpp
  161. +10 −0 clang/test/Levitation/Driver/llibs-support/main.cppl
  162. +7 −0 clang/test/Levitation/Driver/merge-implicit-instantiations/Inputs/A.cppl
  163. +8 −0 clang/test/Levitation/Driver/merge-implicit-instantiations/Inputs/B.cppl
  164. +7 −0 clang/test/Levitation/Driver/merge-implicit-instantiations/Inputs/template
  165. +12 −0 clang/test/Levitation/Driver/merge-implicit-instantiations/main.cppl
  166. +9 −0 clang/test/Levitation/Driver/topology/Inputs/BodyDep.cppl
  167. +15 −0 clang/test/Levitation/Driver/topology/Inputs/My.cppl
  168. +6 −0 clang/test/Levitation/Driver/topology/Inputs/Root.cppl
  169. +302 −0 clang/test/Levitation/Driver/topology/preamble.hpp
  170. +55 −0 clang/test/Levitation/Driver/topology/test.cppl
  171. +9 −0 clang/test/Levitation/Driver/unit-warnings/Inputs/A.cppl
  172. +30 −0 clang/test/Levitation/Driver/unit-warnings/main_unit.cppl
  173. +22 −0 clang/test/Levitation/IntegrationTests/body-directive/A.cppl
  174. +10 −0 clang/test/Levitation/IntegrationTests/body-directive/Preamble.cppl
  175. +867 −0 clang/test/Levitation/IntegrationTests/common.sh
  176. +92 −0 clang/test/Levitation/IntegrationTests/header-gen/A.cppl
  177. +1 −0 clang/test/Levitation/IntegrationTests/header-gen/Inputs/Dep.cppl
  178. +3 −0 clang/test/Levitation/IntegrationTests/header-gen/Inputs/IncludedPart.h
  179. +2 −0 clang/test/Levitation/IntegrationTests/header-gen/Inputs/IncludedPart2.h
  180. +4 −0 clang/test/Levitation/IntegrationTests/header-gen/Inputs/IncludedPart3.h
  181. +4 −0 clang/test/Levitation/IntegrationTests/header-gen/Inputs/IncludedPart4.h
  182. +3 −0 clang/test/Levitation/IntegrationTests/include-support/Inputs/A.cppl
  183. +10 −0 clang/test/Levitation/IntegrationTests/include-support/Inputs/Header.h
  184. +14 −0 clang/test/Levitation/IntegrationTests/include-support/build.sh
  185. +26 −0 clang/test/Levitation/IntegrationTests/include-support/main.cppl
  186. +11 −0 clang/test/Levitation/IntegrationTests/include-support/main.cppl.in
  187. +3 −0 clang/test/Levitation/IntegrationTests/includes-merge/Inputs/A.cppl
  188. +3 −0 clang/test/Levitation/IntegrationTests/includes-merge/Inputs/B.cppl
  189. +16 −0 clang/test/Levitation/IntegrationTests/includes-merge/Inputs/Header.h
  190. +16 −0 clang/test/Levitation/IntegrationTests/includes-merge/build.sh
  191. +36 −0 clang/test/Levitation/IntegrationTests/includes-merge/main.cppl
  192. +18 −0 clang/test/Levitation/IntegrationTests/includes-merge/main.cppl.in
  193. +75 −0 clang/test/Levitation/IntegrationTests/inline-defs/Inputs/A.cppl
  194. +1 −0 clang/test/Levitation/IntegrationTests/inline-defs/Inputs/IncludedPart.h
  195. +47 −0 clang/test/Levitation/IntegrationTests/inline-defs/Inputs/Preamble.h
  196. +31 −0 clang/test/Levitation/IntegrationTests/inline-defs/main.cppl
  197. +20 −0 clang/test/Levitation/IntegrationTests/merge-deps/Inputs/A.cppl
  198. +7 −0 clang/test/Levitation/IntegrationTests/merge-deps/Inputs/B.cppl
  199. +15 −0 clang/test/Levitation/IntegrationTests/merge-deps/Inputs/C.cppl
  200. +17 −0 clang/test/Levitation/IntegrationTests/merge-deps/build.sh
  201. +49 −0 clang/test/Levitation/IntegrationTests/merge-deps/main.cppl
  202. +20 −0 clang/test/Levitation/IntegrationTests/merge-deps/main.cppl.in
  203. +4 −0 clang/test/Levitation/IntegrationTests/multi-deps/Inputs/A.cppl
  204. +4 −0 clang/test/Levitation/IntegrationTests/multi-deps/Inputs/B.cppl
  205. +15 −0 clang/test/Levitation/IntegrationTests/multi-deps/build.sh
  206. +40 −0 clang/test/Levitation/IntegrationTests/multi-deps/main.cppl
  207. +18 −0 clang/test/Levitation/IntegrationTests/multi-deps/main.cppl.in
  208. +302 −0 clang/test/Levitation/IntegrationTests/preamble.hpp
  209. +14 −0 clang/test/Levitation/IntegrationTests/regression/skip-inline-body.cppl
  210. +4 −0 clang/test/Levitation/IntegrationTests/single-dep/Inputs/A.cppl
  211. +14 −0 clang/test/Levitation/IntegrationTests/single-dep/build.sh
  212. +32 −0 clang/test/Levitation/IntegrationTests/single-dep/main.cppl
  213. +16 −0 clang/test/Levitation/IntegrationTests/single-dep/main.cppl.in
  214. +101 −0 clang/test/Levitation/IntegrationTests/test-all.sh
  215. +4 −1 clang/test/lit.cfg.py
  216. +1 −0 clang/test/lit.site.cfg.py.in
  217. +3 −0 clang/tools/CMakeLists.txt
  218. +18 −0 clang/tools/levitation-cppl/CMakeLists.txt
  219. +242 −0 clang/tools/levitation-cppl/levitation-cppl.cpp
  220. +1 −0 clang/unittests/CMakeLists.txt
  221. +13 −0 clang/unittests/Levitation/CMakeLists.txt
  222. +168 −0 clang/unittests/Levitation/LevitationUnitTests.cpp
  223. +13 −0 levitation/CODE_OWNERS.txt
  224. +40 −0 levitation/cmake-driver-sample/CMakeLists-sample.txt
  225. +107 −0 levitation/cmake-driver-sample/file.cmake
  226. +40 −0 levitation/cmake-driver-sample/log.cmake
  227. +7 −0 levitation/cmake-sample-manual-mode/CMakeLists-sample.txt
  228. +52 −0 levitation/cmake-sample-manual-mode/build-cmake.sh
  229. +23 −0 levitation/cmake-sample-manual-mode/cppl-variables.cmake
  230. +107 −0 levitation/cmake-sample-manual-mode/file.cmake
  231. +40 −0 levitation/cmake-sample-manual-mode/log.cmake
  232. +411 −0 levitation/cmake-sample-manual-mode/main.cmake
  233. +32 −0 levitation/cmake-sample-manual-mode/toolchains/default/toolchain-common.cmake
  234. +58 −0 levitation/cmake-sample-manual-mode/toolchains/default/toolchain.cmake
  235. +32 −0 levitation/cmake-sample-manual-mode/toolchains/toolchain-common.cmake
  236. +9 −2 llvm/lib/Bitcode/Reader/BitcodeAnalyzer.cpp
  237. +2 −0 llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn
190 changes: 190 additions & 0 deletions .github/workflows/levitation-ci-lint.yml
@@ -0,0 +1,190 @@
name: C/C++ CI LINT

on:
push:
branches: [ levitation-ci-lint ]

jobs:
build:

runs-on: ${{ matrix.config.os }}
strategy:
matrix:
config:
# - { name: "Windows MSVC", os: windows-latest, cc: "cl", cxx: "cl" }
- { name: "Ubuntu gcc", os: ubuntu-18.04, cc: "gcc", cxx: "g++", release_name: "cppl-linux-x86_64-ci-lint" }
- { name: "MacOS", os: macos-10.15, bootstrap: false, release_name: "cppl-darwin-x86_64-ci-lint" }

steps:

# Install Ninja
- name: macos.install-ninja
if: matrix.config.os == 'macos-10.15'
run: |
brew install ninja
- name: linux.install-ninja
if: matrix.config.os == 'ubuntu-18.04'
run: sudo apt-get install -y ninja-build

- name: posix.check-ninja
if: matrix.config.os != 'windows-latest'
shell: bash
run: |
if [[ "$(which ninja)" == "" ]]; then
echo "Ninja not found"
exit 1
else
echo "Ninja: $(which ninja)"
fi
# Environment
- name: Print environment
if: matrix.config.os != 'windows-latest'
run: |
echo "Building with following environment:"
env
# Download toolchain (macos only)
- name: macos.download-clang
if: matrix.config.os == 'macos-10.15' && !matrix.config.bootstrap
run: |
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-9.0.1/clang+llvm-9.0.1-x86_64-apple-darwin.tar.xz
tar xvf clang+llvm-9.0.1-x86_64-apple-darwin.tar.xz
- name: macos.rename-clang
if: matrix.config.os == 'macos-10.15' && !matrix.config.bootstrap
run: |
mv clang+llvm-9.0.1-x86_64-apple-darwin ${{ runner.workspace }}/phase1
- name: macos.xcode-select
if: matrix.config.os == 'macos-10.15'
run: |
sudo xcode-select -s /Library/Developer/CommandLineTools
echo "Selected Command Line Tools"
echo "Available SDKs:"
ls /Library/Developer/CommandLineTools/SDKs
echo "Following compiler will be used:"
clang --version
# Checkout sources

- name: Checkout sources
uses: actions/checkout@v2

# Final phase, run cmake

- name: macos.phase-final.cmake
if: matrix.config.os == 'macos-10.15'
run: |
mkdir -p ${{ runner.workspace }}/build-final
cd ${{ runner.workspace }}/build-final
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${{ runner.workspace }}/${{ matrix.config.release_name }} \
-DCMAKE_C_COMPILER=${{ runner.workspace }}/phase1/bin/clang \
-DCMAKE_CXX_COMPILER=${{ runner.workspace }}/phase1/bin/clang++ \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \
-DLEVITATION_DEFAULT_LINKER_VERSION=261 \
-DLEVITATION_DEFAULT_INCLUDES=/Library/Developer/CommandLineTools/usr/include/c++/v1 \
-DDEFAULT_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk \
-DLLVM_ENABLE_PROJECTS="clang" \
-G "Ninja" ${{ runner.workspace }}/cppl/llvm
- name: linux.phase-final.cmake
if: matrix.config.os == 'ubuntu-18.04'
run: |
mkdir -p ${{ runner.workspace }}/build-final
cd ${{ runner.workspace }}/build-final
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${{ runner.workspace }}/${{ matrix.config.release_name }} \
-DLLVM_ENABLE_PROJECTS="clang" \
-G "Ninja" ${{ runner.workspace }}/cppl/llvm
# Uncomment lines below if you want to build libcxx as well
# - name: macos.phase-final.build-cxx
# if: matrix.config.os == 'macos-10.15'
# run: |
# cd ${{ runner.workspace }}/build-final
# ninja -j4 cxxabi cxx

# Final phase, run build

- name: phase-final.build-clang
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
run: |
cd ${{ runner.workspace }}/build-final
touch ${{ runner.workspace }}/${{ matrix.config.release_name }}/test.a
# ninja -j4 clang
# Uncomment lines below if you want to check for build directory contents.
# - name: Archive build files
# if: matrix.config.os == 'macos-10.15'
# run: |
# cd ${{ runner.workspace }}
# tar pczf \
# ${{ runner.workspace }}/build-final.tgz \
# ${{ runner.workspace }}/build-final
#
# - name: Upload a Build Files Artifact
# if: matrix.config.os == 'macos-10.15'
# uses: actions/upload-artifact@v2
# with:
# # Artifact name
# name: build-final
# # A file, directory or wildcard pattern that describes what to upload
# path: ${{ runner.workspace }}/build-final.tgz

# Final phase, run install

- name: phase-final.install
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
run: |
cd ${{ runner.workspace }}/build-final
ninja -j4 install
# Final phase, create artifact

- name: Archive installation
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
run: |
tar pczf \
${{ runner.workspace }}/${{ matrix.config.release_name }}.tgz \
-C ${{ runner.workspace }} ${{ matrix.config.release_name }}
- name: Upload installation artifact
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
uses: actions/upload-artifact@v2
with:
# Artifact name
name: ${{ matrix.config.release_name }}
# A file, directory or wildcard pattern that describes what to upload
path: ${{ runner.workspace }}/${{ matrix.config.release_name }}.tgz

# Final phase, check

- name: Check
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
run: |
cd ${{ runner.workspace }}/build-final
ninja -j4 check-clang
# Idea token from this post:
# https://github.com/actions/upload-release-asset/issues/28#issuecomment-617208601
release:
runs-on: ubuntu-latest
needs: build
name: Create a release
steps:
- name: Print github.ref
run: |
echo {{ github.ref }}
- name: Create release on github
if: startsWith(github.ref, 'refs/tags/levitation-')
run: |
set -x
assets=()
for asset in ${{ runner.workspace }}/*.tgz; do
assets+=("-a" "$asset")
done
tag_name="${GITHUB_REF##*/}"
hub release create "${assets[@]}" -m "$tag_name" "$tag_name"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
187 changes: 187 additions & 0 deletions .github/workflows/levitation-on-push.yml
@@ -0,0 +1,187 @@
name: C/C++ CI

on:
push:
branches: [ levitation-master ]
pull_request:
branches: [ levitation-master ]

jobs:
build:

runs-on: ${{ matrix.config.os }}
strategy:
matrix:
config:
# - { name: "Windows MSVC", os: windows-latest, cc: "cl", cxx: "cl" }
- { name: "Ubuntu gcc", os: ubuntu-18.04, cc: "gcc", cxx: "g++", release_name: "cppl-linux-x86_64" }
- { name: "MacOS", os: macos-10.15, bootstrap: false, release_name: "cppl-darwin-x86_64" }

steps:

# Install Ninja
- name: macos.install-ninja
if: matrix.config.os == 'macos-10.15'
run: |
brew install ninja
- name: linux.install-ninja
if: matrix.config.os == 'ubuntu-18.04'
run: sudo apt-get install -y ninja-build

- name: posix.check-ninja
if: matrix.config.os != 'windows-latest'
shell: bash
run: |
if [[ "$(which ninja)" == "" ]]; then
echo "Ninja not found"
exit 1
else
echo "Ninja: $(which ninja)"
fi
# Environment
- name: Print environment
if: matrix.config.os != 'windows-latest'
run: |
echo "Building with following environment:"
env
# Download toolchain (macos only)
- name: macos.download-clang
if: matrix.config.os == 'macos-10.15' && !matrix.config.bootstrap
run: |
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-9.0.1/clang+llvm-9.0.1-x86_64-apple-darwin.tar.xz
tar xvf clang+llvm-9.0.1-x86_64-apple-darwin.tar.xz
- name: macos.rename-clang
if: matrix.config.os == 'macos-10.15' && !matrix.config.bootstrap
run: |
mv clang+llvm-9.0.1-x86_64-apple-darwin ${{ runner.workspace }}/phase1
- name: macos.xcode-select
if: matrix.config.os == 'macos-10.15'
run: |
sudo xcode-select -s /Library/Developer/CommandLineTools
echo "Selected Command Line Tools"
echo "Available SDKs:"
ls /Library/Developer/CommandLineTools/SDKs
echo "Following compiler will be used:"
clang --version
# Checkout sources

- name: Checkout sources
uses: actions/checkout@v2

# Final phase, run cmake

- name: macos.phase-final.cmake
if: matrix.config.os == 'macos-10.15'
run: |
mkdir -p ${{ runner.workspace }}/build-final
cd ${{ runner.workspace }}/build-final
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${{ runner.workspace }}/${{ matrix.config.release_name }} \
-DCMAKE_C_COMPILER=${{ runner.workspace }}/phase1/bin/clang \
-DCMAKE_CXX_COMPILER=${{ runner.workspace }}/phase1/bin/clang++ \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \
-DLEVITATION_DEFAULT_LINKER_VERSION=261 \
-DLEVITATION_DEFAULT_INCLUDES=/Library/Developer/CommandLineTools/usr/include/c++/v1 \
-DDEFAULT_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk \
-DLLVM_ENABLE_PROJECTS="clang" \
-G "Ninja" ${{ runner.workspace }}/cppl/llvm
- name: linux.phase-final.cmake
if: matrix.config.os == 'ubuntu-18.04'
run: |
mkdir -p ${{ runner.workspace }}/build-final
cd ${{ runner.workspace }}/build-final
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${{ runner.workspace }}/${{ matrix.config.release_name }} \
-DLLVM_ENABLE_PROJECTS="clang" \
-G "Ninja" ${{ runner.workspace }}/cppl/llvm
# Uncomment lines below if you want to build libcxx as well
# - name: macos.phase-final.build-cxx
# if: matrix.config.os == 'macos-10.15'
# run: |
# cd ${{ runner.workspace }}/build-final
# ninja -j4 cxxabi cxx

# Final phase, run build

- name: phase-final.build-clang
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
run: |
cd ${{ runner.workspace }}/build-final
ninja -j4 clang
# Uncomment lines below if you want to check for build directory contents.
# - name: Archive build files
# if: matrix.config.os == 'macos-10.15'
# run: |
# cd ${{ runner.workspace }}
# tar pczf \
# ${{ runner.workspace }}/build-final.tgz \
# ${{ runner.workspace }}/build-final
#
# - name: Upload a Build Files Artifact
# if: matrix.config.os == 'macos-10.15'
# uses: actions/upload-artifact@v2
# with:
# # Artifact name
# name: build-final
# # A file, directory or wildcard pattern that describes what to upload
# path: ${{ runner.workspace }}/build-final.tgz

# Final phase, run install

- name: phase-final.install
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
run: |
cd ${{ runner.workspace }}/build-final
ninja -j4 install
# Final phase, create artifact

- name: Archive installation
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
run: |
tar pczf \
${{ runner.workspace }}/${{ matrix.config.release_name }}.tgz \
-C ${{ runner.workspace }} ${{ matrix.config.release_name }}
- name: Upload installation artifact
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
uses: actions/upload-artifact@v2
with:
# Artifact name
name: ${{ matrix.config.release_name }}
# A file, directory or wildcard pattern that describes what to upload
path: ${{ runner.workspace }}/${{ matrix.config.release_name }}.tgz

# Final phase, check

- name: Check
if: matrix.config.os == 'macos-10.15' || matrix.config.os == 'ubuntu-18.04'
run: |
cd ${{ runner.workspace }}/build-final
ninja -j4 check-clang
# Idea token from this post:
# https://github.com/actions/upload-release-asset/issues/28#issuecomment-617208601
release:
runs-on: ubuntu-latest
needs: build
name: Create a release
steps:
- name: Create release on github
if: startsWith(github.ref, 'refs/tags/levitation-')
run: |
set -x
assets=()
for asset in ${{ runner.workspace }}/*.tgz; do
assets+=("-a" "$asset")
done
tag_name="${GITHUB_REF##*/}"
hub release create "${assets[@]}" -m "$tag_name" "$tag_name"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
15 changes: 15 additions & 0 deletions .gitignore
Expand Up @@ -54,3 +54,18 @@ autoconf/autom4te.cache
.vs
# clangd index
.clangd

#==============================================================================#
# C++ Levitation
#==============================================================================#

.DB_Store
._.DS_Store
**/.DS_Store
**/._.DS_Store
.build
*.pch
*.bs
a.out
**/a.out