Skip to content

Commit

Permalink
Use zig as compiler
Browse files Browse the repository at this point in the history
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
  • Loading branch information
kakkoyun committed Jan 3, 2024
1 parent 49f92bf commit d9c8916
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 55 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@
[submodule "github.com/parca-dev/testdata"]
path = test/testdata
url = https://github.com/parca-dev/testdata
[submodule "3rdparty/libelf"]
path = 3rdparty/libelf
url = https://github.com/arachsys/libelf.git
46 changes: 20 additions & 26 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
SHELL := /usr/bin/env bash

# tools:
CLANG ?= clang
CC ?= $(CLANG)
CMD_CC ?= $(CLANG)
ZIG ?= zig
CC ?= $(ZIG) cc -target $(shell uname -m)-linux-musl
CMD_CC ?= $(CC)
CMD_LLC ?= llc
LLD ?= lld
CMD_LLD ?= $(LLD)
Expand Down Expand Up @@ -58,24 +58,23 @@ LIBBPF_HEADERS := $(LIBBPF_DIR)/usr/include
LIBBPF_OUT_DIR := $(LIBBPF_DIR)
LIBBPF_OBJ := $(LIBBPF_DIR)/libbpf.a

ELFUTILS_SRC := 3rdparty/elfutils
LIBELF_SRC := $(ELFUTILS_SRC)/libelf
LIBELF_SRC := 3rdparty/libelf
LIBELF_DIR := $(OUT_DIR)/libelf/$(ARCH)
LIBELF_HEADERS := $(LIBELF_DIR)/include
LIBELF_OUT_DIR := $(LIBELF_DIR)/lib
LIBELF_OBJ := $(LIBELF_DIR)/lib/libelf.a
LIBELF_OBJ := $(LIBELF_OUT_DIR)/libelf.a

LIBZ_SRC := 3rdparty/zlib
LIBZ_DIR := $(OUT_DIR)/libz/$(ARCH)
LIBZ_HEADERS := $(LIBZ_DIR)/include
LIBZ_OUT_DIR := $(LIBZ_DIR)/lib
LIBZ_OBJ := $(LIBZ_DIR)/lib/libz.a
LIBZ_OBJ := $(LIBZ_OUT_DIR)/libz.a

LIBZSTD_SRC := 3rdparty/zstd
LIBZSTD_DIR := $(OUT_DIR)/libzstd/$(ARCH)
LIBZSTD_HEADERS := $(LIBZSTD_DIR)/include
LIBZSTD_OUT_DIR := $(LIBZSTD_DIR)/lib
LIBZSTD_OBJ := $(LIBZSTD_DIR)/lib/libzstd.a
LIBZSTD_OBJ := $(LIBZSTD_OUT_DIR)/libzstd.a

VMLINUX := vmlinux.h
BPF_ROOT := bpf
Expand All @@ -91,14 +90,14 @@ OUT_PID_NAMESPACE := $(OUT_BPF_CONTAINED_DIR)/pid_namespace.bpf.o
# CGO build flags:
PKG_CONFIG_PATH = $(abspath $(LIBZSTD_DIR)/lib/pkgconfig):$(abspath $(LIBZ_DIR)/lib/pkgconfig):$(abspath $(LIBELF_DIR)/lib/pkgconfig):$(abspath $(LIBBPF_DIR))
CGO_CFLAGS_STATIC = -I$(abspath $(LIBBPF_HEADERS))
CGO_LDFLAGS_STATIC = -fuse-ld=$(LD) -L$(abspath $(LIBZ_OUT_DIR)) $(abspath $(LIBZSTD_OBJ)) -L$(abspath $(LIBELF_OUT_DIR)) $(abspath $(LIBBPF_OBJ))
CGO_LDFLAGS_STATIC = -L$(abspath $(LIBZ_OUT_DIR)) -L$(abspath $(LIBELF_OUT_DIR)) $(abspath $(LIBZSTD_OBJ)) $(abspath $(LIBBPF_OBJ))

CGO_CFLAGS_DYN = -I$(abspath $(LIBBPF_HEADERS))
CGO_LDFLAGS_DYN = -fuse-ld=$(LD) -lbpf -lelf -lz -lzstd
CGO_LDFLAGS_DYN = -lbpf -lelf -lz -lzstd

CGO_CFLAGS ?= $(CGO_CFLAGS_STATIC)
CGO_LDFLAGS ?= $(CGO_LDFLAGS_STATIC)
CGO_EXTLDFLAGS = -extldflags=-static
CGO_EXTLDFLAGS =linkmode 'external' -extldflags=-static

# possible other CGO flags:
# CGO_CPPFLAGS ?=
Expand Down Expand Up @@ -132,8 +131,8 @@ build: $(OUT_BPF) $(OUT_BIN) $(OUT_BIN_EH_FRAME)

GO_ENV := CGO_ENABLED=1 GOOS=linux GOARCH=$(ARCH)
CGO_ENV := CC="$(CMD_CC)" CGO_CFLAGS="$(CGO_CFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" PKG_CONFIG=""
GO_BUILD_FLAGS := -tags osusergo,netgo -mod=readonly -trimpath -v
GO_BUILD_DEBUG_FLAGS := -tags osusergo,netgo -v
GO_BUILD_FLAGS :=-tags osusergo,netgo -mod=readonly -trimpath -v
GO_BUILD_DEBUG_FLAGS :=-tags osusergo,netgo -v

ifndef DOCKER
$(OUT_BIN): libbpf $(filter-out *_test.go,$(GO_SRC)) go/deps | $(OUT_DIR)
Expand Down Expand Up @@ -214,7 +213,8 @@ $(abspath $(OUT_DIR))/pkg-config:
libbpf-configure-pkg-config: $(abspath $(OUT_DIR))/pkg-config
cp $(abspath $(LIBZSTD_DIR)/lib/pkgconfig)/*.pc $(abspath $(OUT_DIR))/pkg-config
cp $(abspath $(LIBZ_DIR)/lib/pkgconfig)/*.pc $(abspath $(OUT_DIR))/pkg-config
cp $(abspath $(LIBELF_DIR)/lib/pkgconfig)/*.pc $(abspath $(OUT_DIR))/pkg-config
# TODO(kakkoyun): Add pc files for libelf.
cp $(abspath $(LIBELF_DIR)/lib/pkgconfig)/*.pc $(abspath $(OUT_DIR))/pkg-config || true

.PHONY: libbpf
libbpf: libelf libbpf-configure-pkg-config $(LIBBPF_HEADERS) $(LIBBPF_OBJ)
Expand All @@ -236,8 +236,8 @@ $(LIBBPF_OBJ): | $(OUT_DIR) libbpf_compile_tools $(LIBBPF_SRC)
PKG_CONFIG_LIBDIR=$(abspath $(OUT_DIR))/pkg-config PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) $(MAKE) -C $(LIBBPF_SRC) CC="$(CMD_CC)" CFLAGS="$(LIBBPF_CFLAGS)" LDFLAGS="$(LIBBPF_LDFLAGS)" install_pkgconfig DESTDIR=$(abspath $(OUT_DIR))/libbpf/$(ARCH) PREFIX=$(abspath $(OUT_DIR))/libbpf/$(ARCH)
PKG_CONFIG_LIBDIR=$(abspath $(OUT_DIR))/pkg-config PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) $(MAKE) -C $(LIBBPF_SRC) CC="$(CMD_CC)" CFLAGS="$(LIBBPF_CFLAGS)" LDFLAGS="$(LIBBPF_LDFLAGS)" OBJDIR=$(abspath $(OUT_DIR))/libbpf/$(ARCH) PREFIX=$(abspath $(OUT_DIR))/libbpf/$(ARCH) BUILD_STATIC_ONLY=1

ELFUTILS_CFLAGS=-fno-omit-frame-pointer -fpic -Wno-gnu-variable-sized-type-not-at-end -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -I$(abspath $(LIBZ_HEADERS)) -I$(abspath $(LIBZSTD_HEADERS))
ELFUTILS_LDFLAGS=$(LDFLAGS) -L$(abspath $(LIBZ_OBJ)) -L$(abspath $(LIBZSTD_OBJ))
LIBELF_CFLAGS=-fno-omit-frame-pointer -fpic -Wno-gnu-variable-sized-type-not-at-end -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -I$(abspath $(LIBZ_HEADERS)) -I$(abspath $(LIBZSTD_HEADERS))
LIBELF_LDFLAGS=$(LDFLAGS) -L$(abspath $(LIBZ_OUT_DIR)) -L$(abspath $(LIBZSTD_OUT_DIR))

.PHONY: libelf
libelf: zlib zstd $(LIBELF_HEADERS) $(LIBELF_OBJ)
Expand All @@ -247,15 +247,9 @@ $(LIBELF_SRC):

$(LIBELF_HEADERS) $(LIBELF_HEADERS)/libelfelf.h $(LIBELF_HEADERS)/elf.h $(LIBELF_HEADERS)/gelf.h $(LIBELF_HEADERS)/nlist.h: | $(OUT_DIR) libbpf_compile_tools $(LIBELF_SRC)

$(LIBELF_OBJ): | $(OUT_DIR) libbpf_compile_tools $(LIBELF_SRC)
cd $(ELFUTILS_SRC) \
&& autoreconf -i -f \
&& CC="$(CMD_CC)" CFLAGS="$(ELFUTILS_CFLAGS)" LDFLAGS="$(ELFUTILS_LDFLAGS)" BUILD_STATIC=1 \
./configure --prefix=$(abspath $(OUT_DIR))/libelf/$(ARCH) \
--enable-maintainer-mode --disable-debuginfod --disable-libdebuginfod --without-bzlib --without-lzma
$(MAKE) -C $(ELFUTILS_SRC)/lib CC="$(CMD_CC)" CFLAGS="$(ELFUTILS_CFLAGS)" LDFLAGS="$(ELFUTILS_LDFLAGS)"
$(MAKE) -C $(LIBELF_SRC) CC="$(CMD_CC)" CFLAGS="$(ELFUTILS_CFLAGS)" LDFLAGS="$(ELFUTILS_LDFLAGS)" install
$(MAKE) -C $(ELFUTILS_SRC)/config CC="$(CMD_CC)" CFLAGS="$(ELFUTILS_CFLAGS)" LDFLAGS="$(ELFUTILS_LDFLAGS)" install-pkgconfigDATA
$(LIBELF_OBJ): | $(OUT_DIR) $(LIBELF_SRC)
$(MAKE) -C $(LIBELF_SRC) CC="$(CMD_CC)" CFLAGS="$(LIBELF_CFLAGS)" LDFLAGS="$(LIBELF_LDFLAGS)"
$(MAKE) -C $(LIBELF_SRC) CC="$(CMD_CC)" CFLAGS="$(LIBELF_CFLAGS)" LDFLAGS="$(LIBELF_LDFLAGS)" install-static PREFIX=$(abspath $(OUT_DIR))/libelf/$(ARCH)

.PHONY: zlib
zlib: $(LIBZ_HEADERS) $(LIBZ_OBJ)
Expand Down Expand Up @@ -329,7 +323,7 @@ test: $(DOCKER_BUILDER)
endif

cputest-static: build
$(GO_ENV) $(CGO_ENV) $(GO) test -v ./pkg/profiler/cpu -c $(GO_BUILD_FLAGS) --ldflags="$(CGO_EXTLDFLAGS)"
$(GO_ENV) $(CGO_ENV) $(GO) test $(GO_BUILD_FLAGS) --ldflags="$(CGO_EXTLDFLAGS)" -v ./pkg/profiler/cpu -c
mv cpu.test test/kernel/

initramfs: cputest-static
Expand Down
12 changes: 5 additions & 7 deletions devbox.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,15 @@
"gettext@0.21.1",
"automake@1.16.5",
"libtool@2.4.7",
"elfutils@0.189",
"glibc.dev",
"glibc.static",
"llvmPackages_14.stdenv@latest",
"llvmPackages_14.bintools@latest",
"llvmPackages_14.lld@latest"
"llvmPackages_14.lld@latest",
"github:mitchellh/zig-overlay#master"
],
"env": {
"CC": "clang",
"CXX": "clang++",
"LD": "lld",
"CC": "zig cc -target `uname -m`-linux-musl",
"CXX": "zig c++ -target `uname -m`-linux-musl",
"LD": "ld.lld",
"GOROOT": "${PWD}/.devbox/nix/profile/default/share/go",
"GOPATH": "${PWD}/.devbox/go",
"GOBIN": "${PWD}/.devbox/go/bin"
Expand Down
22 changes: 0 additions & 22 deletions devbox.lock
Original file line number Diff line number Diff line change
Expand Up @@ -81,20 +81,6 @@
}
}
},
"elfutils@0.189": {
"last_modified": "2023-11-15T19:29:39Z",
"resolved": "github:NixOS/nixpkgs/61202fc8677a6e9e0a82eb6610eeef28852fc790#elfutils",
"source": "devbox-search",
"version": "0.189",
"systems": {
"aarch64-linux": {
"store_path": "/nix/store/0sl1y6xfi59ibf0q3v14327hshmmbw0i-elfutils-0.189-bin"
},
"x86_64-linux": {
"store_path": "/nix/store/j6c8jnz1fq1a2szc2md5g4mfkrgnwbqk-elfutils-0.189-bin"
}
}
},
"gettext@0.21.1": {
"last_modified": "2023-12-31T07:44:09Z",
"resolved": "github:NixOS/nixpkgs/d44d59d2b5bd694cd9d996fd8c51d03e3e9ba7f7#gettext",
Expand All @@ -115,14 +101,6 @@
}
}
},
"glibc.dev": {
"resolved": "github:NixOS/nixpkgs/75a52265bda7fd25e06e3a67dee3f0354e73243c#glibc.dev",
"source": "nixpkg"
},
"glibc.static": {
"resolved": "github:NixOS/nixpkgs/75a52265bda7fd25e06e3a67dee3f0354e73243c#glibc.static",
"source": "nixpkg"
},
"go@1.21.4": {
"last_modified": "2023-11-17T14:14:56Z",
"resolved": "github:NixOS/nixpkgs/a71323f68d4377d12c04a5410e214495ec598d4c#go",
Expand Down

0 comments on commit d9c8916

Please sign in to comment.