Skip to content

Commit 28b4a4a

Browse files
Merge pull request #1728 from joakim-brannstrom/use-importc
libclang: use ImportC instead of D bindings
2 parents 8d288a1 + 0f415cb commit 28b4a4a

File tree

262 files changed

+754
-149055
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

262 files changed

+754
-149055
lines changed

Docker/partial/dmd_latest_version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ENV DMD_VERSION 2.108.1
1+
ENV DMD_VERSION 2.109.1

Docker/partial/dmd_min_version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ENV DMD_VERSION 2.104.0
1+
ENV DMD_VERSION 2.108.0

Docker/partial/ldc_latest_version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ENV LDC_VERSION=1.38.0
1+
ENV LDC_VERSION=1.39.0

Docker/partial/ldc_min_version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ENV LDC_VERSION=1.35.0
1+
ENV LDC_VERSION=1.38.0
22

33
# workaround because otherwise it failes for min version with an errour about
44
# unbound variable because it thinks it is running on windows.

LICENSE

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,5 +377,4 @@ Google Test test/testdata/stage_4/fused_gtest/
377377
deimos-libclang libclang/
378378
dsrcgen dsrcgen/
379379
dstep clang/
380-
clang hdrs clang/resources/
381380
unit-threaded unit-threaded/

cmake/Modules/FindLibClang.cmake

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,23 @@
1616

1717
set(LLVM_CMD_SRC ${CMAKE_SOURCE_DIR}/cmake/introspect_llvm.d)
1818
set(LLVM_CMD ${CMAKE_BINARY_DIR}/cmake_introspect_llvm)
19+
set(LIBCLANG_PREPROCESS_CMD_SRC ${CMAKE_SOURCE_DIR}/cmake/preprocess_libclang.d)
20+
set(LIBCLANG_PREPROCESS_CMD ${CMAKE_BINARY_DIR}/preprocess_libclang)
1921

2022
if(UNIX)
2123
separate_arguments(cmdflags UNIX_COMMAND "${D_COMPILER_FLAGS}")
2224
else()
2325
separate_arguments(cmdflags WINDOWS_COMMAND "${D_COMPILER_FLAGS}")
2426
endif()
2527

28+
execute_process(COMMAND ${D_COMPILER} ${cmdflags} ${LIBCLANG_PREPROCESS_CMD_SRC} -of${LIBCLANG_PREPROCESS_CMD}
29+
OUTPUT_VARIABLE libclang_preprocess_CMD
30+
RESULT_VARIABLE libclang_preprocess_CMD_status)
31+
if (llvm_config_CMD_status)
32+
message(WARNING "Compiler output: ${libclang_preprocess_CMD}")
33+
message(FATAL_ERROR "Unable to compile the LIBCLANG preprocessor: ${D_COMPILER} ${cmdflags} ${LIBCLANG_PREPROCESS_CMD_SRC} -of${LIBCLANG_PREPROCESS_CMD}")
34+
endif()
35+
2636
execute_process(COMMAND ${D_COMPILER} ${cmdflags} ${LLVM_CMD_SRC} -of${LLVM_CMD}
2737
OUTPUT_VARIABLE llvm_config_CMD
2838
RESULT_VARIABLE llvm_config_CMD_status)
@@ -77,12 +87,18 @@ execute_process(COMMAND ${LLVM_CMD} ${CMAKE_SOURCE_DIR} libclang-flags
7787
RESULT_VARIABLE clang_config_LDFLAGS_status
7888
OUTPUT_STRIP_TRAILING_WHITESPACE)
7989

90+
execute_process(COMMAND ${LLVM_CMD} ${CMAKE_SOURCE_DIR} includedir
91+
OUTPUT_VARIABLE clang_config_INCLUDEDIR
92+
RESULT_VARIABLE clang_config_INCLUDEDIR_status
93+
OUTPUT_STRIP_TRAILING_WHITESPACE)
94+
8095
message(STATUS "llvm-config VERSION: ${llvm_config_VERSION}")
8196
message(STATUS "llvm-config MAJOR_VERSION: ${llvm_config_MAJOR_VERSION}")
8297
message(STATUS "llvm-config LIBDIR: ${llvm_config_LIBDIR}")
8398
message(STATUS "llvm-config LDFLAGS: ${llvm_config_LDFLAGS}")
8499
message(STATUS "llvm-config INCLUDE: ${llvm_config_CPPFLAGS}")
85100
message(STATUS "llvm-config LIBS: ${llvm_config_LIBS}")
101+
message(STATUS "llvm-config INCLUDEDIR: ${clang_config_INCLUDEDIR}")
86102
message(STATUS "clang-config LDFLAGS: ${clang_config_LDFLAGS}")
87103

88104
# libCLANG ===================================================================

cmake/introspect_llvm.d

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ int main(string[] args) {
4040
cmds["libclang"] = &llvmLibClang;
4141
cmds["libclang-flags"] = &llvmClangFlags;
4242
cmds["print-llvm-config-candidates"] = &llvmPrintCandidates;
43+
cmds["includedir"] = &llvmIncludeDir;
4344

4445
if (auto f = args[2] in cmds)
4546
write((*f)().strip);
@@ -129,6 +130,11 @@ string llvmCppFlags() {
129130
return flags.output.strip;
130131
}
131132

133+
string llvmIncludeDir() {
134+
const flags = execute([llvmCmd.cmd, "--includedir"]);
135+
return flags.output.strip;
136+
}
137+
132138
string llvmLibdir() {
133139
return execute([llvmCmd.cmd, "--libdir"]).output.strip;
134140
}

cmake/preprocess_libclang.d

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env dub
2+
/+ dub.sdl:
3+
name "preprocess_libclang"
4+
+/
5+
import std;
6+
7+
int main(string[] args) {
8+
if (args.length < 5) {
9+
writefln("Usage: %s SRC_PATH DST_PATH <compiler flags>", args[0]);
10+
writeln("SRC_PATH - path to libclang headers such as Index.h");
11+
writeln("DST_PATH - where to write the preprocessed headers");
12+
writeln("<compiler flags> - flags needed to preprocess headers such as -I");
13+
return 1;
14+
}
15+
16+
const src = args[1];
17+
const dst = buildPath(args[2], "clang/c");
18+
const dstHdr = buildPath(args[2], "clang-c");
19+
const flags = args[3 .. $];
20+
21+
mkdirRecurse(dst);
22+
mkdirRecurse(dstHdr);
23+
24+
writeln("Processing libclang headers");
25+
foreach (hdr; dirEntries(src, SpanMode.shallow).filter!(a => a.extension == ".h")) {
26+
writeln(" ", hdr.name);
27+
auto content = readText(hdr.name);
28+
File(buildPath(dst, hdr.name.baseName.setExtension(".c")), "w").writeln(content);
29+
File(buildPath(dstHdr, hdr.name.baseName.setExtension(".h")), "w").writeln(content);
30+
}
31+
32+
return 0;
33+
}

libs/clang/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# vim: filetype=cmake
22

33
set(SRC_FILES
4-
${CMAKE_CURRENT_LIST_DIR}/source/clang/Compiler.d
54
${CMAKE_CURRENT_LIST_DIR}/source/clang/Cursor.d
65
${CMAKE_CURRENT_LIST_DIR}/source/clang/Diagnostic.d
76
${CMAKE_CURRENT_LIST_DIR}/source/clang/Eval.d
@@ -18,7 +17,7 @@ set(SRC_FILES
1817
)
1918

2019
set(flags
21-
"-J${CMAKE_CURRENT_LIST_DIR}/resources -I${LIBCLANG_INC} -I${CMAKE_SOURCE_DIR}/vendor/mylib/source"
20+
"${LIBCLANG_INC} -I${CMAKE_SOURCE_DIR}/vendor/mylib/source"
2221
)
2322

2423
compile_d_static_lib(dextool_clang "${SRC_FILES}" "${flags}" "" "dextool_libclang;dextool_mylib")

libs/clang/resources/.noautoformat

Whitespace-only changes.

0 commit comments

Comments
 (0)