All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Douglas RAILLARD <douglas.raillard@arm.com>
Cc: acme@redhat.com, dwarves@vger.kernel.org
Subject: Re: [PATCH] CMakeLists.txt: Add STATIC_LINK option
Date: Fri, 15 Oct 2021 10:18:41 -0300	[thread overview]
Message-ID: <YWl/sfJLWEHGdJwV@kernel.org> (raw)
In-Reply-To: <20211015101008.486302-1-douglas.raillard@arm.com>

Em Fri, Oct 15, 2021 at 11:10:08AM +0100, Douglas RAILLARD escreveu:
> From: Douglas Raillard <douglas.raillard@arm.com>
> 
> Add a user-defined STATIC_LINK option that can be used to build a fully
> static binary for the executables:
> 
>     cmake .. -DSTATIC_LINK=ON
> 
> This has been tested on Alpine Linux v3.14.

Cool, in addition to:

⬢[acme@toolbox pahole]$ cmake -D__LIB=lib -DBUILD_SHARED_LIBS=OFF ..
<SNIP>
⬢[acme@toolbox pahole]$ ls -la build
total 11428
drwxr-xr-x. 1 acme acme     342 Oct 15 10:15 .
drwxrwxr-x. 1 acme acme    3228 Oct 15 10:15 ..
-rw-r--r--. 1 acme acme   14858 Oct 15 10:15 CMakeCache.txt
drwxr-xr-x. 1 acme acme     598 Oct 15 10:15 CMakeFiles
-rw-r--r--. 1 acme acme   20280 Oct 15 10:15 cmake_install.cmake
-rwxr-xr-x. 1 acme acme 1027016 Oct 15 10:15 codiff
-rwxr-xr-x. 1 acme acme 1067304 Oct 15 10:15 ctracer
-rwxr-xr-x. 1 acme acme  999648 Oct 15 10:15 dtagnames
-rw-r--r--. 1 acme acme 2112500 Oct 15 10:15 libdwarves.a
-rw-r--r--. 1 acme acme   40086 Oct 15 10:15 libdwarves_emit.a
-rw-r--r--. 1 acme acme   40558 Oct 15 10:15 libdwarves_reorganize.a
-rw-r--r--. 1 acme acme   45792 Oct 15 10:15 Makefile
-rwxr-xr-x. 1 acme acme 1160712 Oct 15 10:15 pahole
-rwxr-xr-x. 1 acme acme 1009408 Oct 15 10:15 pdwtags
-rwxr-xr-x. 1 acme acme 1044160 Oct 15 10:15 pfunct
-rwxr-xr-x. 1 acme acme 1011488 Oct 15 10:15 pglobal
-rwxr-xr-x. 1 acme acme 1008784 Oct 15 10:15 prefcnt
-rwxr-xr-x. 1 acme acme   62096 Oct 15 10:15 scncopy
-rwxr-xr-x. 1 acme acme 1008392 Oct 15 10:15 syscse
⬢[acme@toolbox pahole]$ ldd build/pahole
	linux-vdso.so.1 (0x00007ffc3fd48000)
	libdw.so.1 => /lib64/libdw.so.1 (0x00007f7c9592b000)
	libelf.so.1 => /lib64/libelf.so.1 (0x00007f7c95910000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f7c958f6000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7c958d5000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f7c95706000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f7c956ff000)
	libzstd.so.1 => /lib64/libzstd.so.1 (0x00007f7c95607000)
	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f7c955db000)
	libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f7c955c8000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f7c959ce000)
⬢[acme@toolbox pahole]$

That is just for libdwarves. Humm, with your patch I'm getting this
warning:

⬢[acme@toolbox pahole]$ rm -rf build
⬢[acme@toolbox pahole]$ mkdir build
⬢[acme@toolbox pahole]$ cd build
⬢[acme@toolbox build]$ cmake -DSTATIC_LINK=ON ..
-- The C compiler identification is GNU 11.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Setting BUILD_SHARED_LIBS = ON
-- Checking availability of DWARF and ELF development libraries
-- Looking for dwfl_module_build_id in elf
-- Looking for dwfl_module_build_id in elf - found
-- Found dwarf.h header: /usr/include
-- Found elfutils/libdw.h header: /usr/include
-- Found libdw library: /usr/lib64/libdw.so
-- Found libelf library: /usr/lib64/libelf.so
-- Checking availability of DWARF and ELF development libraries - done
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11")
-- Checking availability of argp library
-- Assuming argp is in libc
-- Checking availability of argp library - done
-- Checking availability of obstack library
-- Assuming obstack is in libc
-- Checking availability of obstack library - done
-- Submodule update
-- Submodule update - done
-- Performing Test HAVE_REALLOCARRAY_SUPPORT
-- Performing Test HAVE_REALLOCARRAY_SUPPORT - Success
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    STATIC_LINK


-- Build files have been written to: /var/home/acme/git/pahole/build
⬢[acme@toolbox build]$

And when I build I don't get a static binary, can you check? I'm doing a
bit of investigation now.

- Arnaldo

 
> Signed-off-by: Douglas Raillard <douglas.raillard@arm.com>
> ---
>  CMakeLists.txt                | 21 +++++++++++++++------
>  README                        |  3 +++
>  cmake/modules/FindDWARF.cmake | 10 ++++++++++
>  3 files changed, 28 insertions(+), 6 deletions(-)
> 
> diff --git a/CMakeLists.txt b/CMakeLists.txt
> index 2ab66e4..ba467bf 100644
> --- a/CMakeLists.txt
> +++ b/CMakeLists.txt
> @@ -34,6 +34,15 @@ macro(_set_fancy _var _value _comment)
>  	endif (NOT DEFINED ${_var})
>  endmacro(_set_fancy)
>  
> +option(BUILD_SHARED_LIBS "Build internal libraries as shared libraries" ON)
> +option(STATIC_LINK "Create statically linked executables" OFF)
> +if (STATIC_LINK)
> +  string(APPEND CMAKE_C_FLAGS " -static")
> +  string(APPEND CMAKE_EXE_LINKER_FLAGS " -static")
> +  set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
> +  set(BUILD_SHARED_LIBS OFF)
> +endif()
> +
>  # where to look first for cmake modules,
>  # before ${CMAKE_ROOT}/Modules/ is checked
>  set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
> @@ -48,11 +57,6 @@ set(CMAKE_C_FLAGS_DEBUG "-Wall -Werror -ggdb -O0")
>  set(CMAKE_C_FLAGS_RELEASE "-Wall -O2")
>  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
>  
> -if (NOT DEFINED BUILD_SHARED_LIBS)
> -	set (BUILD_SHARED_LIBS ON)
> -	message(STATUS "Setting BUILD_SHARED_LIBS = ${BUILD_SHARED_LIBS}")
> -endif (NOT DEFINED BUILD_SHARED_LIBS)
> -
>  # Just for grepping, DWARVES_VERSION isn't used anywhere anymore
>  # add_definitions(-D_GNU_SOURCE -DDWARVES_VERSION="v1.22")
>  add_definitions(-D_GNU_SOURCE -DDWARVES_MAJOR_VERSION=1)
> @@ -123,7 +127,7 @@ endif()
>  add_library(dwarves ${dwarves_LIB_SRCS})
>  set_target_properties(dwarves PROPERTIES VERSION 1.0.0 SOVERSION 1)
>  set_target_properties(dwarves PROPERTIES INTERFACE_LINK_LIBRARIES "")
> -target_link_libraries(dwarves ${DWARF_LIBRARIES} ${ZLIB_LIBRARIES} ${LIBBPF_LIBRARIES} ${ARGP_LIBRARY} ${OBSTACK_LIBRARY})
> +target_link_libraries(dwarves ${DWARF_LIBRARIES} ${ZLIB_LIBRARIES} ${LIBBPF_LIBRARIES} ${ARGP_LIBRARY} ${OBSTACK_LIBRARY} ${BZ2_LIBRARY} ${LZMA_LIBRARY})
>  
>  set(dwarves_emit_LIB_SRCS dwarves_emit.c)
>  add_library(dwarves_emit ${dwarves_emit_LIB_SRCS})
> @@ -193,3 +197,8 @@ endif()
>  install(PROGRAMS btfdiff fullcircle DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
>  install(FILES lib/Makefile lib/ctracer_relay.c lib/ctracer_relay.h lib/linux.blacklist.cu
>  	DESTINATION ${CMAKE_INSTALL_PREFIX}/share/dwarves/runtime)
> +
> +# Avoid having a trailing -Wl,-Bdynamic that will make some linkers think we
> +# need to link against a DSO for the libc.
> +get_property(TARGETS DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
> +set_target_properties(${TARGETS} PROPERTIES LINK_SEARCH_END_STATIC ${STATIC_LINK})
> diff --git a/README b/README
> index c9f1737..5798458 100644
> --- a/README
> +++ b/README
> @@ -18,6 +18,9 @@ cmake Options:
>      Default is to install to /usr/local, use -DCMAKE_INSTALL_PREFIX=
>      when invoking cmake to specify another install location.
>  
> +  -DSTATIC_LINK
> +    Build a statically linked binary. Default is OFF.
> +
>  Known to work scenarios:
>  
>  Mandriva Cooker:
> diff --git a/cmake/modules/FindDWARF.cmake b/cmake/modules/FindDWARF.cmake
> index 027d06e..1b4ac49 100644
> --- a/cmake/modules/FindDWARF.cmake
> +++ b/cmake/modules/FindDWARF.cmake
> @@ -37,6 +37,16 @@ find_library(ELF_LIBRARY
>  	PATHS /usr/lib /usr/local/lib /usr/lib64 /usr/local/lib64 ~/usr/local/lib ~/usr/local/lib64
>  )
>  
> +find_library(BZ2_LIBRARY
> +	NAMES bz2
> +	PATHS /usr/lib /usr/local/lib /usr/lib64 /usr/local/lib64 ~/usr/local/lib ~/usr/local/lib64
> +)
> +
> +find_library(LZMA_LIBRARY
> +	NAMES lzma
> +	PATHS /usr/lib /usr/local/lib /usr/lib64 /usr/local/lib64 ~/usr/local/lib ~/usr/local/lib64
> +)
> +
>  if (DWARF_INCLUDE_DIR AND LIBDW_INCLUDE_DIR AND DWARF_LIBRARY AND ELF_LIBRARY)
>  	set(DWARF_FOUND TRUE)
>  	set(DWARF_LIBRARIES ${DWARF_LIBRARY} ${ELF_LIBRARY})
> -- 
> 2.25.1

-- 

- Arnaldo

  reply	other threads:[~2021-10-15 13:18 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-15 10:10 [PATCH] CMakeLists.txt: Add STATIC_LINK option Douglas RAILLARD
2021-10-15 13:18 ` Arnaldo Carvalho de Melo [this message]
2021-10-15 13:22   ` Arnaldo Carvalho de Melo
2021-10-15 14:20     ` Arnaldo Carvalho de Melo
2021-10-15 14:39       ` Arnaldo Carvalho de Melo
2021-10-18  9:57       ` Douglas Raillard
2021-10-19 15:24         ` Arnaldo Carvalho de Melo
2021-10-19 16:03           ` Douglas Raillard
2021-10-19 17:29           ` Douglas Raillard
2021-10-20 12:49             ` Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YWl/sfJLWEHGdJwV@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=douglas.raillard@arm.com \
    --cc=dwarves@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.