Skip to content

Commit 02e0828

Browse files
committed
Fix #33: Configure CMake to build statically linked binary
1 parent 4d30963 commit 02e0828

File tree

4 files changed

+69
-25
lines changed

4 files changed

+69
-25
lines changed

Dockerfile

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,13 @@ RUN set -x \
1111
&& apt update \
1212
&& apt install -y --no-install-recommends \
1313
g++ openjdk-8-jdk-headless sbt cmake make curl git \
14+
zlib1g-dev \
1415
libgc-dev libunwind8-dev libre2-dev \
1516
&& rm -rf /var/lib/apt/lists/*
1617

1718
ARG LLVM_VERSION=6.0
1819
ENV LLVM_VERSION=$LLVM_VERSION
19-
# LLVM dev versions do not have a "-x.y" version suffix.
20-
ARG LLVM_DEB_COMPONENT=-$LLVM_VERSION
2120
RUN set -x \
22-
&& . /etc/lsb-release \
23-
&& echo "deb https://apt.llvm.org/$DISTRIB_CODENAME/ llvm-toolchain-$DISTRIB_CODENAME$LLVM_DEB_COMPONENT main" > /etc/apt/sources.list.d/llvm.list \
24-
&& apt-key adv --fetch-keys https://apt.llvm.org/llvm-snapshot.gpg.key \
2521
&& apt update \
2622
&& apt install -y --no-install-recommends \
2723
clang-$LLVM_VERSION clang-format-$LLVM_VERSION \

bindgen/CMakeLists.txt

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,54 @@
11
cmake_minimum_required(VERSION 3.9)
22
project(scala-native-bindgen)
33

4-
# Locate $LLVM_PATH/lib/cmake/clang/ClangConfig.cmake
5-
find_package(Clang REQUIRED CONFIG)
6-
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
7-
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
4+
# Locate LLVMConfig.cmake
5+
#find_package(LLVM REQUIRED CONFIG)
6+
#message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
7+
#message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
88

9-
include_directories(SYSTEM ${LLVM_INCLUDE_DIRS})
10-
add_definitions(${LLVM_DEFINITIONS})
9+
find_program(LLVM_CONFIG_PROGRAM
10+
NAMES
11+
# llvm-config-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}
12+
llvm-config-6.0
13+
llvm-config-5.0
14+
llvm-config-4.0
15+
llvm-config
16+
)
17+
18+
execute_process(COMMAND ${LLVM_CONFIG_PROGRAM} --includedir
19+
OUTPUT_VARIABLE LLVM_INCLUDE_DIR
20+
OUTPUT_STRIP_TRAILING_WHITESPACE
21+
)
22+
message(STATUS "Using LLVM include dir: ${LLVM_INCLUDE_DIR}")
23+
24+
execute_process(COMMAND ${LLVM_CONFIG_PROGRAM} --cxxflags
25+
OUTPUT_VARIABLE LLVM_CXX_FLAGS
26+
OUTPUT_STRIP_TRAILING_WHITESPACE
27+
)
28+
message(STATUS "Using LLVM CXXFLAGS: ${LLVM_CXX_FLAGS}")
1129

12-
add_compile_options(-fexceptions -std=c++11 -Wall -Wconversion -Werror)
30+
execute_process(COMMAND ${LLVM_CONFIG_PROGRAM} --ldflags
31+
OUTPUT_VARIABLE LLVM_LINKER_FLAGS
32+
OUTPUT_STRIP_TRAILING_WHITESPACE
33+
)
34+
message(STATUS "Using LLVM LDFLAGS: ${LLVM_LINKER_FLAGS}")
35+
36+
execute_process(COMMAND ${LLVM_CONFIG_PROGRAM} --libs --link-static
37+
OUTPUT_VARIABLE LLVM_LIBS
38+
OUTPUT_STRIP_TRAILING_WHITESPACE
39+
)
40+
41+
execute_process(COMMAND ${LLVM_CONFIG_PROGRAM} --system-libs --link-static
42+
OUTPUT_VARIABLE LLVM_SYSTEM_LIBS
43+
OUTPUT_STRIP_TRAILING_WHITESPACE
44+
)
45+
46+
include_directories(SYSTEM ${LLVM_INCLUDE_DIR})
47+
48+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LLVM_CXX_FLAGS}")
49+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LLVM_LINKER_FLAGS} -static")
50+
51+
add_compile_options(-fexceptions -std=c++11 -Wall -Wconversion) # -Werror)
1352

1453
add_executable(bindgen
1554
Main.cpp
@@ -75,4 +114,21 @@ target_link_libraries(bindgen
75114
PRIVATE
76115
clangFrontend
77116
clangTooling
117+
118+
clangFrontend
119+
clangSerialization
120+
clangDriver
121+
clangTooling
122+
clangParse
123+
clangSema
124+
125+
clangAnalysis
126+
127+
clangEdit
128+
clangAST
129+
clangLex
130+
clangBasic
131+
132+
"${LLVM_LIBS}"
133+
"${LLVM_SYSTEM_LIBS}"
78134
)

bindgen/Dockerfile

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,8 @@ RUN set -x \
1111
&& cmake .. \
1212
&& make
1313

14-
ARG UBUNTU_VERSION=18.04
15-
FROM ubuntu:$UBUNTU_VERSION
16-
17-
ARG LLVM_VERSION=6.0
18-
ENV LLVM_VERSION=$LLVM_VERSION
19-
RUN set -x \
20-
&& apt update \
21-
&& apt install -y --no-install-recommends libclang1-$LLVM_VERSION \
22-
&& rm -rf /var/lib/apt/lists/*
14+
FROM scratch
2315

24-
COPY --from=builder /src/target/scala-native-bindgen /usr/bin/scala-native-bindgen
16+
COPY --from=builder /src/target/scala-native-bindgen /scala-native-bindgen
2517
WORKDIR /src
26-
ENTRYPOINT ["scala-native-bindgen"]
18+
ENTRYPOINT ["/scala-native-bindgen"]

bindgen/Main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include "visitor/ScalaFrontendActionFactory.h"
33
#include <clang/Tooling/CommonOptionsParser.h>
44

5-
int main(int argc, char *argv[]) {
5+
int main(int argc, const char *argv[]) {
66
llvm::cl::OptionCategory Category("Binding Generator");
77
llvm::cl::extrahelp CommonHelp(
88
clang::tooling::CommonOptionsParser::HelpMessage);
@@ -37,7 +37,7 @@ int main(int argc, char *argv[]) {
3737
llvm::cl::opt<std::string> LinkName(
3838
"link", llvm::cl::cat(Category),
3939
llvm::cl::desc("Library to link with, e.g. -luv for libuv"));
40-
clang::tooling::CommonOptionsParser op(argc, (const char **)argv, Category);
40+
clang::tooling::CommonOptionsParser op(argc, argv, Category);
4141
clang::tooling::ClangTool Tool(op.getCompilations(),
4242
op.getSourcePathList());
4343

0 commit comments

Comments
 (0)