xref: /illumos-gate/usr/src/tools/smatch/Makefile (revision 2cbc828d)
11f5207b7SJohn Levon#
21f5207b7SJohn Levon# This file and its contents are supplied under the terms of the
31f5207b7SJohn Levon# Common Development and Distribution License ("CDDL"), version 1.0.
41f5207b7SJohn Levon# You may only use this file in accordance with the terms of version
51f5207b7SJohn Levon# 1.0 of the CDDL.
61f5207b7SJohn Levon#
71f5207b7SJohn Levon# A full copy of the text of the CDDL should have accompanied this
81f5207b7SJohn Levon# source.  A copy of the CDDL is also available via the Internet at
91f5207b7SJohn Levon# http://www.illumos.org/license/CDDL.
101f5207b7SJohn Levon#
115a0e240fSJohn Levon# Copyright 2020 Joyent, Inc.
121f5207b7SJohn Levon#
131f5207b7SJohn Levon
141f5207b7SJohn Levon#
151f5207b7SJohn Levon# The src/ sub-directory is un-modified copy of
16c85f09ccSJohn Levon# https://github.com/illumos/smatch/tree/$SPARSE_VERSION
171f5207b7SJohn Levon#
181f5207b7SJohn Levon# This Makefile installs just enough for us to be able to run smatch
191f5207b7SJohn Levon# locally.
201f5207b7SJohn Levon#
211f5207b7SJohn Levon
221f5207b7SJohn LevonPROG = smatch
236523a3aaSJohn LevonSPARSE_VERSION = 0.6.1-rc1-il-5
241f5207b7SJohn Levon
251f5207b7SJohn Levoninclude ../Makefile.tools
261f5207b7SJohn Levon
271f5207b7SJohn Levon# We have to build smatch before we can use cw
281f5207b7SJohn Levoni386_CC = $(GNUC_ROOT)/bin/gcc
291f5207b7SJohn Levonsparc_CC = $(GNUC_ROOT)/bin/gcc
30582237e6SPeter Tribble# sparc doesn't recognise -msave-args
31582237e6SPeter Tribblei386_SMATCHFLAGS = -msave-args
32582237e6SPeter Tribblesparc_SMATCHFLAGS =
331f5207b7SJohn Levon
345801b0f0SToomas Soome# When we use builtins, then ld's -zguidance will complain that libm is
355801b0f0SToomas Soome# unused on x86 because the compiler will replace ceil(3M) with its own copy.
365801b0f0SToomas Soome# However, on SPARC, it doesn't. So for now we disable builtins to make it
375801b0f0SToomas Soome# consistent.
385a0e240fSJohn LevonCFLAGS = -O -m64 -std=gnu99 -nodefaultlibs -D__sun $($(MACH)_SMATCHFLAGS)
395801b0f0SToomas SoomeCFLAGS += -fno-builtin
405a0e240fSJohn LevonCFLAGS += -Wall -Wno-unknown-pragmas -Wno-psabi
411f5207b7SJohn Levon
421f5207b7SJohn LevonSMATCHDATADIR = $(ROOTONBLDSHARE)/smatch
431f5207b7SJohn Levon
441f5207b7SJohn LevonCFLAGS += -DSMATCHDATADIR='"$(SMATCHDATADIR)"'
451f5207b7SJohn LevonCFLAGS += -DGCC_BASE='"/no/such/dir"'
461f5207b7SJohn LevonCFLAGS += -DMULTIARCH_TRIPLET=NULL
471f5207b7SJohn Levon
48*2cbc828dSAndy FiddamanLDCHECKS = $(ZASSERTDEFLIB) $(ZGUIDANCE) $(ZFATALWARNINGS)
49*2cbc828dSAndy FiddamanLDLIBS += $(ZLAZYLOAD) $(ZDIRECT) -lsqlite3 -lcrypto -lgcc -lm -lc
501f5207b7SJohn LevonLDFLAGS = $(MAPFILE.NES:%=-Wl,-M%)
511f5207b7SJohn LevonLDFLAGS += -L$(NATIVE_ADJUNCT)/lib -R$(NATIVE_ADJUNCT)/lib
521f5207b7SJohn Levon
53*2cbc828dSAndy FiddamanNATIVE_LIBS += libsqlite3.so libcrypto.so libm.so libc.so
54*2cbc828dSAndy FiddamanLDFLAGS += $(NATIVE_LIBS:%=$(ZASSERTDEFLIB)=%)
55*2cbc828dSAndy Fiddaman
561f5207b7SJohn LevonCPPFLAGS += -nostdinc
571f5207b7SJohn LevonCPPFLAGS += -Isrc/
581f5207b7SJohn LevonCPPFLAGS += -I$(NATIVE_ADJUNCT)/include
591f5207b7SJohn Levon
601f5207b7SJohn Levon# no install.bin
611f5207b7SJohn LevonINS.file = $(RM) $@; $(CP) $< $(@D); $(CHMOD) $(FILEMODE) $@
621f5207b7SJohn LevonINS.dir = mkdir -p $@; $(CHMOD) $(DIRMODE) $@
631f5207b7SJohn Levon
64c85f09ccSJohn Levon# fine for us
65c85f09ccSJohn LevonOS=linux
66c85f09ccSJohn Levon
67c85f09ccSJohn LevonLIB_OBJS =
68c85f09ccSJohn LevonLIB_OBJS += allocate.o
69c85f09ccSJohn LevonLIB_OBJS += builtin.o
70c85f09ccSJohn LevonLIB_OBJS += char.o
71c85f09ccSJohn LevonLIB_OBJS += compat-$(OS).o
72c85f09ccSJohn LevonLIB_OBJS += cse.o
73c85f09ccSJohn LevonLIB_OBJS += dissect.o
74c85f09ccSJohn LevonLIB_OBJS += dominate.o
75c85f09ccSJohn LevonLIB_OBJS += evaluate.o
76c85f09ccSJohn LevonLIB_OBJS += expand.o
77c85f09ccSJohn LevonLIB_OBJS += expression.o
78c85f09ccSJohn LevonLIB_OBJS += flow.o
79c85f09ccSJohn LevonLIB_OBJS += flowgraph.o
80c85f09ccSJohn LevonLIB_OBJS += inline.o
81c85f09ccSJohn LevonLIB_OBJS += ir.o
82c85f09ccSJohn LevonLIB_OBJS += lib.o
83c85f09ccSJohn LevonLIB_OBJS += linearize.o
84c85f09ccSJohn LevonLIB_OBJS += liveness.o
85c85f09ccSJohn LevonLIB_OBJS += memops.o
86c85f09ccSJohn LevonLIB_OBJS += opcode.o
87c85f09ccSJohn LevonLIB_OBJS += optimize.o
88c85f09ccSJohn LevonLIB_OBJS += parse.o
89c85f09ccSJohn LevonLIB_OBJS += pre-process.o
90c85f09ccSJohn LevonLIB_OBJS += ptrlist.o
91c85f09ccSJohn LevonLIB_OBJS += ptrmap.o
92c85f09ccSJohn LevonLIB_OBJS += scope.o
93c85f09ccSJohn LevonLIB_OBJS += show-parse.o
94c85f09ccSJohn LevonLIB_OBJS += simplify.o
95c85f09ccSJohn LevonLIB_OBJS += sort.o
96c85f09ccSJohn LevonLIB_OBJS += ssa.o
97c85f09ccSJohn LevonLIB_OBJS += sset.o
98c85f09ccSJohn LevonLIB_OBJS += stats.o
99c85f09ccSJohn LevonLIB_OBJS += storage.o
100c85f09ccSJohn LevonLIB_OBJS += symbol.o
101c85f09ccSJohn LevonLIB_OBJS += target.o
102c85f09ccSJohn LevonLIB_OBJS += tokenize.o
103c85f09ccSJohn LevonLIB_OBJS += unssa.o
104c85f09ccSJohn LevonLIB_OBJS += utils.o
105c85f09ccSJohn LevonLIB_OBJS += macro_table.o
106c85f09ccSJohn LevonLIB_OBJS += token_store.o
107c85f09ccSJohn LevonLIB_OBJS += hashtable.o
108c85f09ccSJohn Levon
109c85f09ccSJohn LevonSMATCH_OBJS =
110c85f09ccSJohn LevonSMATCH_OBJS += avl.o
111c85f09ccSJohn LevonSMATCH_OBJS += smatch_about_fn_ptr_arg.o
112c85f09ccSJohn LevonSMATCH_OBJS += smatch_address.o
113c85f09ccSJohn LevonSMATCH_OBJS += smatch_annotate.o
114c85f09ccSJohn LevonSMATCH_OBJS += smatch_array_values.o
115c85f09ccSJohn LevonSMATCH_OBJS += smatch_assigned_expr.o
116c85f09ccSJohn LevonSMATCH_OBJS += smatch_bits.o
117c85f09ccSJohn LevonSMATCH_OBJS += smatch_buf_comparison.o
118c85f09ccSJohn LevonSMATCH_OBJS += smatch_buf_size.o
119c85f09ccSJohn LevonSMATCH_OBJS += smatch_capped.o
120c85f09ccSJohn LevonSMATCH_OBJS += smatch_common_functions.o
121c85f09ccSJohn LevonSMATCH_OBJS += smatch_comparison.o
122c85f09ccSJohn LevonSMATCH_OBJS += smatch_conditions.o
123c85f09ccSJohn LevonSMATCH_OBJS += smatch_constraints.o
124c85f09ccSJohn LevonSMATCH_OBJS += smatch_constraints_required.o
125c85f09ccSJohn LevonSMATCH_OBJS += smatch_container_of.o
126c85f09ccSJohn LevonSMATCH_OBJS += smatch_data_source.o
127c85f09ccSJohn LevonSMATCH_OBJS += smatch_db.o
128c85f09ccSJohn LevonSMATCH_OBJS += smatch_equiv.o
129c85f09ccSJohn LevonSMATCH_OBJS += smatch_estate.o
130c85f09ccSJohn LevonSMATCH_OBJS += smatch_expressions.o
131c85f09ccSJohn LevonSMATCH_OBJS += smatch_expression_stacks.o
132c85f09ccSJohn LevonSMATCH_OBJS += smatch_extra.o
133c85f09ccSJohn LevonSMATCH_OBJS += smatch_files.o
134c85f09ccSJohn LevonSMATCH_OBJS += smatch_flow.o
13531ad075eSJohn LevonSMATCH_OBJS += smatch_fresh_alloc.o
136c85f09ccSJohn LevonSMATCH_OBJS += smatch_fn_arg_link.o
137c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_hooks.o
138c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_info.o
139c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_ptrs.o
140c85f09ccSJohn LevonSMATCH_OBJS += smatch_helper.o
141c85f09ccSJohn LevonSMATCH_OBJS += smatch_hooks.o
142c85f09ccSJohn LevonSMATCH_OBJS += smatch_ignore.o
143c85f09ccSJohn LevonSMATCH_OBJS += smatch_imaginary_absolute.o
144c85f09ccSJohn LevonSMATCH_OBJS += smatch_implied.o
145c85f09ccSJohn LevonSMATCH_OBJS += smatch_impossible.o
146c85f09ccSJohn LevonSMATCH_OBJS += smatch_integer_overflow.o
147c85f09ccSJohn LevonSMATCH_OBJS += smatch_kernel_user_data.o
148c85f09ccSJohn LevonSMATCH_OBJS += smatch_links.o
149c85f09ccSJohn LevonSMATCH_OBJS += smatch_math.o
150c85f09ccSJohn LevonSMATCH_OBJS += smatch_mem_tracker.o
151c85f09ccSJohn LevonSMATCH_OBJS += smatch_modification_hooks.o
152c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag_data.o
153c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag_map.o
154c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag.o
155c85f09ccSJohn LevonSMATCH_OBJS += smatch_nul_terminator.o
156c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_cleared.o
157c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_compare_limit.o
158c85f09ccSJohn LevonSMATCH_OBJS += smatch_parameter_names.o
159c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_filter.o
160c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_limit.o
161c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_set.o
162c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_to_mtag_data.o
163c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_used.o
164c85f09ccSJohn LevonSMATCH_OBJS += smatch_parse_call_math.o
165c85f09ccSJohn LevonSMATCH_OBJS += smatch_passes_array_size.o
166c85f09ccSJohn LevonSMATCH_OBJS += smatch_project.o
167c85f09ccSJohn LevonSMATCH_OBJS += smatch_ranges.o
168c85f09ccSJohn LevonSMATCH_OBJS += smatch_real_absolute.o
169c85f09ccSJohn LevonSMATCH_OBJS += smatch_recurse.o
170c85f09ccSJohn LevonSMATCH_OBJS += smatch_returns.o
171c85f09ccSJohn LevonSMATCH_OBJS += smatch_return_to_param.o
172c85f09ccSJohn LevonSMATCH_OBJS += smatch_scope.o
173c85f09ccSJohn LevonSMATCH_OBJS += smatch_slist.o
174c85f09ccSJohn LevonSMATCH_OBJS += smatch_start_states.o
175c85f09ccSJohn LevonSMATCH_OBJS += smatch_statement_count.o
176c85f09ccSJohn LevonSMATCH_OBJS += smatch_states.o
177c85f09ccSJohn LevonSMATCH_OBJS += smatch_stored_conditions.o
178c85f09ccSJohn LevonSMATCH_OBJS += smatch_string_list.o
179c85f09ccSJohn LevonSMATCH_OBJS += smatch_strings.o
180c85f09ccSJohn LevonSMATCH_OBJS += smatch_strlen.o
181c85f09ccSJohn LevonSMATCH_OBJS += smatch_struct_assignment.o
182c85f09ccSJohn LevonSMATCH_OBJS += smatch_sval.o
183c85f09ccSJohn LevonSMATCH_OBJS += smatch_tracker.o
184c85f09ccSJohn LevonSMATCH_OBJS += smatch_type_links.o
185c85f09ccSJohn LevonSMATCH_OBJS += smatch_type.o
186c85f09ccSJohn LevonSMATCH_OBJS += smatch_type_val.o
187c85f09ccSJohn LevonSMATCH_OBJS += smatch_unknown_value.o
188c85f09ccSJohn LevonSMATCH_OBJS += smatch_untracked_param.o
189c85f09ccSJohn LevonSMATCH_OBJS += smatch_var_sym.o
1905a0e240fSJohn LevonSMATCH_OBJS += smatch_parsed_conditions.o
191c85f09ccSJohn Levon
1921f5207b7SJohn LevonSMATCH_CHECK_OBJS:sh=ls src/check_*.c | sed -e 's+\.c+.o+;s+src/++;'
1931f5207b7SJohn Levon
194c85f09ccSJohn LevonOBJS = smatch.o $(LIB_OBJS) $(SMATCH_OBJS) $(SMATCH_CHECK_OBJS)
1951f5207b7SJohn Levon
1961f5207b7SJohn LevonSMATCH_DATA = \
1971f5207b7SJohn Levon	illumos_kernel.skipped_functions \
1981f5207b7SJohn Levon	illumos_user.skipped_functions
1991f5207b7SJohn Levon
200c85f09ccSJohn LevonSMATCH_DB_DATA =
201c85f09ccSJohn LevonSMATCH_DB_DATA += call_implies.schema
202c85f09ccSJohn LevonSMATCH_DB_DATA += function_ptr.schema
203c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_map.schema
204c85f09ccSJohn LevonSMATCH_DB_DATA += caller_info.schema
205c85f09ccSJohn LevonSMATCH_DB_DATA += function_type.schema
206c85f09ccSJohn LevonSMATCH_DB_DATA += param_map.schema
207c85f09ccSJohn LevonSMATCH_DB_DATA += common_caller_info.schema
208c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_info.schema
209c85f09ccSJohn LevonSMATCH_DB_DATA += parameter_name.schema
210c85f09ccSJohn LevonSMATCH_DB_DATA += constraints.schema
211c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_size.schema
212c85f09ccSJohn LevonSMATCH_DB_DATA += return_implies.schema
213c85f09ccSJohn LevonSMATCH_DB_DATA += constraints_required.schema
214c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_value.schema
215c85f09ccSJohn LevonSMATCH_DB_DATA += return_states.schema
216c85f09ccSJohn LevonSMATCH_DB_DATA += data_info.schema
217c85f09ccSJohn LevonSMATCH_DB_DATA += local_values.schema
218c85f09ccSJohn LevonSMATCH_DB_DATA += sink_info.schema
219c85f09ccSJohn LevonSMATCH_DB_DATA += db.schema
220c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_about.schema
221c85f09ccSJohn LevonSMATCH_DB_DATA += type_info.schema
222c85f09ccSJohn LevonSMATCH_DB_DATA += fn_data_link.schema
223c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_alias.schema
224c85f09ccSJohn LevonSMATCH_DB_DATA += type_size.schema
225c85f09ccSJohn LevonSMATCH_DB_DATA += fn_ptr_data_link.schema
226c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_data.schema
2276523a3aaSJohn LevonSMATCH_DB_DATA += mtag_info.schema
228c85f09ccSJohn LevonSMATCH_DB_DATA += type_value.schema
2291f5207b7SJohn Levon
2301f5207b7SJohn LevonROOTONBLDDATAFILES = $(SMATCH_DATA:%=$(SMATCHDATADIR)/smatch_data/%)
2311f5207b7SJohn LevonROOTONBLDDATAFILES += $(SMATCH_DB_DATA:%=$(SMATCHDATADIR)/smatch_data/db/%)
2321f5207b7SJohn Levon
2331f5207b7SJohn LevonBUILT_HEADERS = src/version.h src/check_list_local.h
2341f5207b7SJohn Levon
2351f5207b7SJohn Levon.KEEP_STATE:
2361f5207b7SJohn Levon
237c653bb47SJohn Levon.PARALLEL: $(OBJS)
238c653bb47SJohn Levon
2391f5207b7SJohn Levonall: $(PROG)
2401f5207b7SJohn Levon
2411f5207b7SJohn Levoninstall: all .WAIT $(ROOTONBLDMACHPROG) $(ROOTONBLDDATAFILES)
2421f5207b7SJohn Levon
2431f5207b7SJohn Levonclean:
2441f5207b7SJohn Levon	rm -f $(OBJS) $(BUILT_HEADERS)
2451f5207b7SJohn Levon
2461f5207b7SJohn Levon$(ROOTONBLDDATAFILES): $(SMATCHDATADIR)/smatch_data/db
2471f5207b7SJohn Levon
2481f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/%: src/smatch_data/%
2491f5207b7SJohn Levon	$(INS.file)
2501f5207b7SJohn Levon
2511f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/db:
2521f5207b7SJohn Levon	$(INS.dir)
2531f5207b7SJohn Levon
2541f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data:
2551f5207b7SJohn Levon	$(INS.dir)
2561f5207b7SJohn Levon
2571f5207b7SJohn Levon$(PROG): $(OBJS)
2581f5207b7SJohn Levon	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
2591f5207b7SJohn Levon	$(POST_PROCESS)
2601f5207b7SJohn Levon
2611f5207b7SJohn Levon%.o: src/%.c $(BUILT_HEADERS)
2621f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
2631f5207b7SJohn Levon
2641f5207b7SJohn Levon%.o: src/cwchash/%.c
2651f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
2661f5207b7SJohn Levon
2671f5207b7SJohn Levonsrc/check_list_local.h:
2681f5207b7SJohn Levon	touch src/check_list_local.h
2691f5207b7SJohn Levon
2701f5207b7SJohn Levonsrc/version.h:
2711f5207b7SJohn Levon	echo '#define SPARSE_VERSION "$(SPARSE_VERSION)"' > src/version.h
2721f5207b7SJohn Levon
2731f5207b7SJohn Levoninclude ../Makefile.targ
274