Skip to content

Commit 206cbb2

Browse files
Makefile linker flag fixes and cleanups (#8764)
* Makefile linker flag fixes and cleanups * ldflags -> libs * Allow libpng to be not-found * Look for Homebrew jpeg and allow missing. * Try just always using brew if it exists * Hopefully fix apps Makefiles --------- Co-authored-by: Alex Reinking <[email protected]>
1 parent ba0318b commit 206cbb2

File tree

16 files changed

+78
-60
lines changed

16 files changed

+78
-60
lines changed

Makefile

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ SHELL = bash
5656
CXX ?= g++
5757
PREFIX ?= /usr/local
5858
LLVM_CONFIG ?= llvm-config
59+
60+
ifneq ($(shell $(LLVM_CONFIG) --version > /dev/null && echo OK),OK)
61+
$(error "Error: could not find or run llvm-config. Set LLVM_CONFIG to point to the llvm-config binary for the version of llvm you want to build Halide against, and set CLANG to point to the corresponding version of clang.")
62+
endif
63+
5964
LLVM_COMPONENTS= $(shell $(LLVM_CONFIG) --components)
6065
LLVM_VERSION = $(shell $(LLVM_CONFIG) --version | sed 's/\([0-9][0-9]*\)\.\([0-9]\).*/\1.\2/')
6166

@@ -64,7 +69,11 @@ LLVM_BINDIR = $(shell $(LLVM_CONFIG) --bindir | sed -e 's/\\/\//g' -e 's/\([a-zA
6469
LLVM_LIBDIR = $(shell $(LLVM_CONFIG) --libdir | sed -e 's/\\/\//g' -e 's/\([a-zA-Z]\):/\/\1/g')
6570
# Apparently there is no llvm_config flag to get canonical paths to tools,
6671
# so we'll just construct one relative to --src-root and hope that is stable everywhere.
67-
LLVM_SYSTEM_LIBS=$(shell ${LLVM_CONFIG} --system-libs --link-static | sed -e 's/[\/&]/\\&/g' | sed 's/-llibxml2.tbd/-lxml2/')
72+
LLVM_SYSTEM_LIBS = $(shell ${LLVM_CONFIG} --system-libs --link-static | sed -e 's/[\/&]/\\&/g' | sed 's/-llibxml2.tbd/-lxml2/')
73+
ifeq ($(UNAME), Darwin)
74+
# homebrew LLVM on macos likes to depend on things in /opt/homebrew/lib without explicitly adding that linker flag
75+
LLVM_SYSTEM_LIBS += -L$(shell brew --prefix | sed -e 's/[\/&]/\\&/g')\/lib
76+
endif
6877
LLVM_AS = $(LLVM_BINDIR)/llvm-as
6978
LLVM_NM = $(LLVM_BINDIR)/llvm-nm
7079
# Note, removing -D_GLIBCXX_ASSERTIONS is a workaround for https://reviews.llvm.org/D142279
@@ -362,9 +371,24 @@ TEST_CXX_FLAGS += -DTEST_CUDA
362371
TEST_CXX_FLAGS += -I/usr/local/cuda/include
363372
endif
364373

365-
# Compiling the tutorials requires libpng
366-
LIBPNG_LIBS_DEFAULT = $(shell libpng-config --ldflags)
367-
LIBPNG_CXX_FLAGS ?= $(shell libpng-config --cflags)
374+
# Find libjpeg and libpng. The code to set IMAGE_IO_LIBS is duplicated
375+
# in apps/support/Makefile.inc and any changes here should be repeated
376+
# there.
377+
378+
ifneq (,$(shell command -v brew))
379+
# Get png and jpeg paths from brew
380+
LIBPNG_LIBS_DEFAULT = -L $(shell brew --prefix libpng)/lib -lpng
381+
LIBPNG_CXX_FLAGS ?= -I $(shell brew --prefix libpng)/include
382+
LIBJPEG_LIBS ?= -L $(shell brew --prefix libjpeg)/lib -ljpeg
383+
LIBJPEG_CXX_FLAGS ?= -I $(shell brew --prefix libjpeg)/include
384+
else
385+
# Get png and jpeg paths from pkg-config
386+
LIBPNG_LIBS_DEFAULT = $(shell pkg-config libpng --libs)
387+
LIBPNG_CXX_FLAGS ?= $(shell pkg-config libpng --cflags)
388+
LIBJPEG_LIBS ?= $(shell pkg-config libjpeg --libs)
389+
LIBJPEG_CXX_FLAGS ?= $(shell pkg-config libjpeg --cflags)
390+
endif
391+
368392
# Workaround for libpng-config pointing to 64-bit versions on linux even when we're building for 32-bit
369393
ifneq (,$(findstring -m32,$(CXX)))
370394
ifneq (,$(findstring x86_64,$(LIBPNG_LIBS_DEFAULT)))
@@ -373,17 +397,6 @@ endif
373397
endif
374398
LIBPNG_LIBS ?= $(LIBPNG_LIBS_DEFAULT)
375399

376-
# Workaround brew Cellar path for libpng-config output.
377-
LIBJPEG_LINKER_PATH ?= $(shell echo $(LIBPNG_LIBS_DEFAULT) | sed -e'/-L.*[/][Cc]ellar[/]libpng/!d;s=\(.*\)/[Cc]ellar/libpng/.*=\1/lib=')
378-
LIBJPEG_LIBS ?= $(LIBJPEG_LINKER_PATH) -ljpeg
379-
380-
# There's no libjpeg-config, unfortunately. We should look for
381-
# jpeglib.h one directory level up from png.h . Also handle
382-
# Mac OS brew installs where libpng-config returns paths
383-
# into the PNG cellar.
384-
LIBPNG_INCLUDE_DIRS = $(filter -I%,$(LIBPNG_CXX_FLAGS))
385-
LIBJPEG_CXX_FLAGS ?= $(shell echo $(LIBPNG_INCLUDE_DIRS) | sed -e'/[Cc]ellar[/]libpng/!s=\(.*\)=\1/..=;s=\(.*\)/[Cc]ellar/libpng/.*=\1/include=')
386-
387400
IMAGE_IO_LIBS = $(LIBPNG_LIBS) $(LIBJPEG_LIBS)
388401
IMAGE_IO_CXX_FLAGS = $(LIBPNG_CXX_FLAGS) $(LIBJPEG_CXX_FLAGS)
389402

apps/HelloPyTorch/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ $(GENERATOR_BIN)/add.generator: src/add_generator.cpp $(GENERATOR_DEPS)
219219
@echo Building Generator
220220
@mkdir -p $(@D)
221221
@$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) \
222-
-o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
222+
-o $@ $(LIBHALIDE_LDFLAGS)
223223

224224
clean:
225225
rm -rf $(BIN) __pycache__

apps/auto_viz/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ all: $(OUTPUTS)
88

99
$(GENERATOR_BIN)/auto_viz_demo.generator: auto_viz_demo_generator.cpp $(GENERATOR_DEPS)
1010
@mkdir -p $(@D)
11-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
11+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
1212

1313
# Can't have multiple wildcards in Make, so we'll use a macro
1414
# to stamp out all the rules we need

apps/c_backend/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ test: build
1212

1313
$(GENERATOR_BIN)/pipeline.generator: pipeline_generator.cpp $(GENERATOR_DEPS)
1414
@mkdir -p $(@D)
15-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
15+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
1616

1717
$(BIN)/%/pipeline_native.a: $(GENERATOR_BIN)/pipeline.generator
1818
@mkdir -p $(@D)
@@ -27,7 +27,7 @@ $(BIN)/%/run: run.cpp $(BIN)/%/pipeline_c.halide_generated.cpp $(BIN)/%/pipeline
2727

2828
$(GENERATOR_BIN)/pipeline_cpp.generator: pipeline_cpp_generator.cpp $(GENERATOR_DEPS)
2929
@mkdir -p $(@D)
30-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
30+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
3131

3232
$(BIN)/%/pipeline_cpp_cpp.halide_generated.cpp: $(GENERATOR_BIN)/pipeline_cpp.generator
3333
@mkdir -p $(@D)

apps/camera_pipe/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ TIMING_ITERATIONS ?= 5
88

99
$(GENERATOR_BIN)/camera_pipe.generator: camera_pipe_generator.cpp $(GENERATOR_DEPS)
1010
@mkdir -p $(@D)
11-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
11+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
1212

1313
$(BIN)/%/camera_pipe.a: $(GENERATOR_BIN)/camera_pipe.generator
1414
@mkdir -p $(@D)

apps/cuda_mat_mul/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ all: $(BIN)/$(HL_TARGET)/runner
1111

1212
$(GENERATOR_BIN)/mat_mul.generator: mat_mul_generator.cpp $(GENERATOR_DEPS)
1313
@mkdir -p $(@D)
14-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
14+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
1515

1616
$(BIN)/%/mat_mul.a: $(GENERATOR_BIN)/mat_mul.generator
1717
@mkdir -p $(@D)

apps/depthwise_separable_conv/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ all: $(BIN)/$(HL_TARGET)/process
44

55
$(GENERATOR_BIN)/depthwise_separable_conv.generator: depthwise_separable_conv_generator.cpp $(GENERATOR_DEPS)
66
@mkdir -p $(@D)
7-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
7+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
88

99
$(BIN)/%/depthwise_separable_conv.a: $(GENERATOR_BIN)/depthwise_separable_conv.generator
1010
@mkdir -p $(@D)

apps/fft/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ build: $(BIN)/$(HL_TARGET)/bench_fft
2121

2222
$(BIN)/%/bench_fft: main.cpp fft.cpp fft.h complex.h funct.h $(LIB_HALIDE)
2323
@mkdir -p $(@D)
24-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
24+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
2525

2626
bench_8x8: $(BIN)/$(HL_TARGET)/bench_fft
2727
$< 8 8 $(<D)
@@ -67,7 +67,7 @@ $(BIN)/%/fft_inverse_c2c.a: $(GENERATOR_BIN)/fft.generator
6767

6868
$(BIN)/%/fft_aot_test: fft_aot_test.cpp $(BIN)/%/fft_forward_r2c.a $(BIN)/%/fft_inverse_c2r.a $(BIN)/%/fft_forward_c2c.a $(BIN)/%/fft_inverse_c2c.a
6969
@mkdir -p $(@D)
70-
$(CXX) -I$(BIN)/$* -I$(HALIDE_DISTRIB_PATH)/include/ -std=c++17 $^ -o $@ $(LDFLAGS) $(HALIDE_SYSTEM_LIBS)
70+
$(CXX) -I$(BIN)/$* -I$(HALIDE_DISTRIB_PATH)/include/ -std=c++17 $^ -o $@ $(LDFLAGS)
7171

7272
clean:
7373
rm -rf $(BIN)

apps/hexagon_benchmarks/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ SCHEDULING_OPTS = use_parallel_sched=${PARALLEL_SCHED} use_prefetch_sched=${PREF
1818

1919
$(GENERATOR_BIN)/%.generator : %_generator.cpp $(GENERATOR_DEPS)
2020
@mkdir -p $(@D)
21-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
21+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
2222

2323
$(BIN)/%/conv3x3a16.o: $(GENERATOR_BIN)/conv3x3.generator
2424
@mkdir -p $(@D)

apps/hexagon_dma/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ all: $(BIN)/$(HL_TARGET)/process_yuv_linear_basic \
3939

4040
$(BIN)/%/pipeline_yuv_linear_basic: pipeline_yuv_linear_basic.cpp $(GENERATOR_DEPS)
4141
@mkdir -p $(@D)
42-
$(CXX) $(CXXFLAGS) -g -fno-rtti $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
42+
$(CXX) $(CXXFLAGS) -g -fno-rtti $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
4343
$(BIN)/%/pipeline_raw_linear_interleaved_basic: pipeline_raw_linear_interleaved_basic.cpp $(GENERATOR_DEPS)
4444
@mkdir -p $(@D)
45-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS) $(HALIDE_SYSTEM_LIBS)
45+
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LIBHALIDE_LDFLAGS)
4646

4747
INPUT_YUV_8BIT = input_y.type=uint8 input_uv.type=uint8
4848
INPUT_YUV_16BIT = input_y.type=uint16 input_uv.type=uint16

0 commit comments

Comments
 (0)