# HG changeset patch # User Andre Heinecke # Date 1411747189 -7200 # Node ID 3cd8dd706aaa3a70123f76fb1e4fde74f5b99d13 # Parent 827abc0923a80d35467de4dccb7e2aa64b87e8a3 Add possibility to build with CLANG and document it. This only works for now with the c parts of the code. diff -r 827abc0923a8 -r 3cd8dd706aaa CMakeLists.txt --- a/CMakeLists.txt Fri Sep 26 16:06:44 2014 +0200 +++ b/CMakeLists.txt Fri Sep 26 17:59:49 2014 +0200 @@ -11,6 +11,7 @@ option(DO_RELEASE_BUILD "Build for a public release." OFF) option(ENABLE_PROFILING "Set to enable profiling." OFF) option(USE_CURL "Use libcurl to download updates and certificate lists." ON) +option(USE_CLANG "Use clang to compile trustbridge." OFF) set(DOWNLOAD_SERVER "https://tb-devel.intevation.de:443" CACHE STRING "Used as download server" ) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") @@ -21,6 +22,10 @@ cmake_policy(SET CMP0020 OLD) endif() +if (USE_CLANG) + message (STATUS "Using clang options to build trustbridge.") +endif() + include(CTest) include(GenerateCppcheck) include(HGVersion) @@ -82,14 +87,16 @@ add_definitions (-DUSE_REAL_RESOURCES) endif() +if (NOT USE_CLANG) # Warn level to be used for privileged parts -set(WARN_HARDENING_FLAGS " -Wextra -Wconversion -Wformat-security") + set(WARN_HARDENING_FLAGS " -Wextra -Wconversion -Wformat-security") # Hardening flags -set(HARDENING_FLAGS " -Wall -fstack-protector-all -fno-exceptions") -set(HARDENING_FLAGS " ${HARDENING_FLAGS} -Wstack-protector") -set(HARDENING_FLAGS " ${HARDENING_FLAGS} --param ssp-buffer-size=4") -set(HARDENING_FLAGS " ${HARDENING_FLAGS} -D_FORTIFY_SOURCE=2 -O0") + set(HARDENING_FLAGS " -Wall -fstack-protector-all -fno-exceptions") + set(HARDENING_FLAGS " ${HARDENING_FLAGS} -Wstack-protector") + set(HARDENING_FLAGS " ${HARDENING_FLAGS} --param ssp-buffer-size=4") + set(HARDENING_FLAGS " ${HARDENING_FLAGS} -D_FORTIFY_SOURCE=2 -O0") +endif() if(ENABLE_PROFILING) set(PROFILING_FLAGS "-fprofile-arcs -ftest-coverage") @@ -102,10 +109,10 @@ add_definitions(-DMINGW_HAS_SECURE_API) # for _s functions endif(WIN32) -if(UNIX) +if(UNIX AND NOT USE_CLANG) set(HARDENING_FLAGS " ${HARDENING_FLAGS} -pie -fPIE -ftrapv") set(HARDENING_FLAGS " ${HARDENING_FLAGS} -Wl,-z,relro,-z,now") -elseif(WIN32) +elseif(WIN32 AND NOT USE_CLANG) set(HARDENING_FLAGS " ${HARDENING_FLAGS} -Wl,--dynamicbase -Wl,--nxcompat") endif() diff -r 827abc0923a8 -r 3cd8dd706aaa INSTALL --- a/INSTALL Fri Sep 26 16:06:44 2014 +0200 +++ b/INSTALL Fri Sep 26 17:59:49 2014 +0200 @@ -107,6 +107,14 @@ cd build-linux cmake .. -DCMAKE_PREFIX_PATH=$YOURPREFIX +To build with clang (if it is installed): + + mkdir build-clang + cd build-clang + CC=/usr/bin/clang \ + CXX=/usr/bin/clang++ \ + cmake .. -DCMAKE_PREFIX_PATH=$YOURPREFIX \ + -DUSE_CLANG=TRUE I386 ==== @@ -167,7 +175,8 @@ --without-zlib make && make install -Now for Trustbridge itself +Now for Trustbridge itself: + cd ../../trustbridge mkdir build-i386 cd build-i386 diff -r 827abc0923a8 -r 3cd8dd706aaa common/binverify.c --- a/common/binverify.c Fri Sep 26 16:06:44 2014 +0200 +++ b/common/binverify.c Fri Sep 26 17:59:49 2014 +0200 @@ -256,14 +256,18 @@ } #else /* WIN32 */ +#ifndef __clang__ #pragma GCC diagnostic ignored "-Wconversion" +#endif /* Polarssl mh.h contains a conversion which gcc warns about */ #include #include #include #include #include +#ifndef __clang__ #pragma GCC diagnostic pop +#endif bin_verify_result verify_binary_linux(const char *filename, size_t name_len) diff -r 827abc0923a8 -r 3cd8dd706aaa common/certhelp.h --- a/common/certhelp.h Fri Sep 26 16:06:44 2014 +0200 +++ b/common/certhelp.h Fri Sep 26 17:59:49 2014 +0200 @@ -9,12 +9,16 @@ #define CERTHELP_H /* Polarssl mh.h contains a conversion which gcc warns about */ +#ifndef __clang__ #pragma GCC diagnostic ignored "-Wsign-conversion" #pragma GCC diagnostic ignored "-Wconversion" +#endif #include #include +#ifndef __clang__ #pragma GCC diagnostic pop #pragma GCC diagnostic pop +#endif #define CERT_OID_CN (unsigned char *)OID_AT_CN "\0" #define CERT_OID_O (unsigned char *)OID_AT_ORGANIZATION "\0" diff -r 827abc0923a8 -r 3cd8dd706aaa common/listutil.c --- a/common/listutil.c Fri Sep 26 16:06:44 2014 +0200 +++ b/common/listutil.c Fri Sep 26 17:59:49 2014 +0200 @@ -30,12 +30,16 @@ #include "pubkey-test.h" #endif +#ifndef __clang__ #pragma GCC diagnostic ignored "-Wconversion" +#endif /* Polarssl mh.h contains a conversion which gcc warns about */ #include #include #include +#ifndef __clang__ #pragma GCC diagnostic pop +#endif #define MAX_FILESIZE (MAX_LINE_LENGTH * MAX_LINES)