xref: /illumos-gate/usr/src/tools/smatch/Makefile (revision 31ad075e)
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
23*31ad075eSJohn LevonSPARSE_VERSION = 0.6.1-rc1-il-4
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
345a0e240fSJohn LevonCFLAGS = -O -m64 -std=gnu99 -nodefaultlibs -D__sun $($(MACH)_SMATCHFLAGS)
355a0e240fSJohn LevonCFLAGS += -Wall -Wno-unknown-pragmas -Wno-psabi
361f5207b7SJohn Levon
371f5207b7SJohn LevonSMATCHDATADIR = $(ROOTONBLDSHARE)/smatch
381f5207b7SJohn Levon
391f5207b7SJohn LevonCFLAGS += -DSMATCHDATADIR='"$(SMATCHDATADIR)"'
401f5207b7SJohn LevonCFLAGS += -DGCC_BASE='"/no/such/dir"'
411f5207b7SJohn LevonCFLAGS += -DMULTIARCH_TRIPLET=NULL
421f5207b7SJohn Levon
431f5207b7SJohn LevonLDLIBS += -lsqlite3 -lcrypto -lm -lgcc -lc
441f5207b7SJohn LevonLDFLAGS = $(MAPFILE.NES:%=-Wl,-M%)
451f5207b7SJohn LevonLDFLAGS += -L$(NATIVE_ADJUNCT)/lib -R$(NATIVE_ADJUNCT)/lib
461f5207b7SJohn Levon
471f5207b7SJohn LevonCPPFLAGS += -nostdinc
481f5207b7SJohn LevonCPPFLAGS += -Isrc/
491f5207b7SJohn LevonCPPFLAGS += -I$(NATIVE_ADJUNCT)/include
501f5207b7SJohn Levon
511f5207b7SJohn Levon# no install.bin
521f5207b7SJohn LevonINS.file = $(RM) $@; $(CP) $< $(@D); $(CHMOD) $(FILEMODE) $@
531f5207b7SJohn LevonINS.dir = mkdir -p $@; $(CHMOD) $(DIRMODE) $@
541f5207b7SJohn Levon
55c85f09ccSJohn Levon# fine for us
56c85f09ccSJohn LevonOS=linux
57c85f09ccSJohn Levon
58c85f09ccSJohn LevonLIB_OBJS =
59c85f09ccSJohn LevonLIB_OBJS += allocate.o
60c85f09ccSJohn LevonLIB_OBJS += builtin.o
61c85f09ccSJohn LevonLIB_OBJS += char.o
62c85f09ccSJohn LevonLIB_OBJS += compat-$(OS).o
63c85f09ccSJohn LevonLIB_OBJS += cse.o
64c85f09ccSJohn LevonLIB_OBJS += dissect.o
65c85f09ccSJohn LevonLIB_OBJS += dominate.o
66c85f09ccSJohn LevonLIB_OBJS += evaluate.o
67c85f09ccSJohn LevonLIB_OBJS += expand.o
68c85f09ccSJohn LevonLIB_OBJS += expression.o
69c85f09ccSJohn LevonLIB_OBJS += flow.o
70c85f09ccSJohn LevonLIB_OBJS += flowgraph.o
71c85f09ccSJohn LevonLIB_OBJS += inline.o
72c85f09ccSJohn LevonLIB_OBJS += ir.o
73c85f09ccSJohn LevonLIB_OBJS += lib.o
74c85f09ccSJohn LevonLIB_OBJS += linearize.o
75c85f09ccSJohn LevonLIB_OBJS += liveness.o
76c85f09ccSJohn LevonLIB_OBJS += memops.o
77c85f09ccSJohn LevonLIB_OBJS += opcode.o
78c85f09ccSJohn LevonLIB_OBJS += optimize.o
79c85f09ccSJohn LevonLIB_OBJS += parse.o
80c85f09ccSJohn LevonLIB_OBJS += pre-process.o
81c85f09ccSJohn LevonLIB_OBJS += ptrlist.o
82c85f09ccSJohn LevonLIB_OBJS += ptrmap.o
83c85f09ccSJohn LevonLIB_OBJS += scope.o
84c85f09ccSJohn LevonLIB_OBJS += show-parse.o
85c85f09ccSJohn LevonLIB_OBJS += simplify.o
86c85f09ccSJohn LevonLIB_OBJS += sort.o
87c85f09ccSJohn LevonLIB_OBJS += ssa.o
88c85f09ccSJohn LevonLIB_OBJS += sset.o
89c85f09ccSJohn LevonLIB_OBJS += stats.o
90c85f09ccSJohn LevonLIB_OBJS += storage.o
91c85f09ccSJohn LevonLIB_OBJS += symbol.o
92c85f09ccSJohn LevonLIB_OBJS += target.o
93c85f09ccSJohn LevonLIB_OBJS += tokenize.o
94c85f09ccSJohn LevonLIB_OBJS += unssa.o
95c85f09ccSJohn LevonLIB_OBJS += utils.o
96c85f09ccSJohn LevonLIB_OBJS += macro_table.o
97c85f09ccSJohn LevonLIB_OBJS += token_store.o
98c85f09ccSJohn LevonLIB_OBJS += hashtable.o
99c85f09ccSJohn Levon
100c85f09ccSJohn LevonSMATCH_OBJS =
101c85f09ccSJohn LevonSMATCH_OBJS += avl.o
102c85f09ccSJohn LevonSMATCH_OBJS += smatch_about_fn_ptr_arg.o
103c85f09ccSJohn LevonSMATCH_OBJS += smatch_address.o
104c85f09ccSJohn LevonSMATCH_OBJS += smatch_annotate.o
105c85f09ccSJohn LevonSMATCH_OBJS += smatch_array_values.o
106c85f09ccSJohn LevonSMATCH_OBJS += smatch_assigned_expr.o
107c85f09ccSJohn LevonSMATCH_OBJS += smatch_bits.o
108c85f09ccSJohn LevonSMATCH_OBJS += smatch_buf_comparison.o
109c85f09ccSJohn LevonSMATCH_OBJS += smatch_buf_size.o
110c85f09ccSJohn LevonSMATCH_OBJS += smatch_capped.o
111c85f09ccSJohn LevonSMATCH_OBJS += smatch_common_functions.o
112c85f09ccSJohn LevonSMATCH_OBJS += smatch_comparison.o
113c85f09ccSJohn LevonSMATCH_OBJS += smatch_conditions.o
114c85f09ccSJohn LevonSMATCH_OBJS += smatch_constraints.o
115c85f09ccSJohn LevonSMATCH_OBJS += smatch_constraints_required.o
116c85f09ccSJohn LevonSMATCH_OBJS += smatch_container_of.o
117c85f09ccSJohn LevonSMATCH_OBJS += smatch_data_source.o
118c85f09ccSJohn LevonSMATCH_OBJS += smatch_db.o
119c85f09ccSJohn LevonSMATCH_OBJS += smatch_equiv.o
120c85f09ccSJohn LevonSMATCH_OBJS += smatch_estate.o
121c85f09ccSJohn LevonSMATCH_OBJS += smatch_expressions.o
122c85f09ccSJohn LevonSMATCH_OBJS += smatch_expression_stacks.o
123c85f09ccSJohn LevonSMATCH_OBJS += smatch_extra.o
124c85f09ccSJohn LevonSMATCH_OBJS += smatch_files.o
125c85f09ccSJohn LevonSMATCH_OBJS += smatch_flow.o
126*31ad075eSJohn LevonSMATCH_OBJS += smatch_fresh_alloc.o
127c85f09ccSJohn LevonSMATCH_OBJS += smatch_fn_arg_link.o
128c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_hooks.o
129c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_info.o
130c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_ptrs.o
131c85f09ccSJohn LevonSMATCH_OBJS += smatch_helper.o
132c85f09ccSJohn LevonSMATCH_OBJS += smatch_hooks.o
133c85f09ccSJohn LevonSMATCH_OBJS += smatch_ignore.o
134c85f09ccSJohn LevonSMATCH_OBJS += smatch_imaginary_absolute.o
135c85f09ccSJohn LevonSMATCH_OBJS += smatch_implied.o
136c85f09ccSJohn LevonSMATCH_OBJS += smatch_impossible.o
137c85f09ccSJohn LevonSMATCH_OBJS += smatch_integer_overflow.o
138c85f09ccSJohn LevonSMATCH_OBJS += smatch_kernel_user_data.o
139c85f09ccSJohn LevonSMATCH_OBJS += smatch_links.o
140c85f09ccSJohn LevonSMATCH_OBJS += smatch_math.o
141c85f09ccSJohn LevonSMATCH_OBJS += smatch_mem_tracker.o
142c85f09ccSJohn LevonSMATCH_OBJS += smatch_modification_hooks.o
143c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag_data.o
144c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag_map.o
145c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag.o
146c85f09ccSJohn LevonSMATCH_OBJS += smatch_nul_terminator.o
147c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_cleared.o
148c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_compare_limit.o
149c85f09ccSJohn LevonSMATCH_OBJS += smatch_parameter_names.o
150c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_filter.o
151c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_limit.o
152c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_set.o
153c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_to_mtag_data.o
154c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_used.o
155c85f09ccSJohn LevonSMATCH_OBJS += smatch_parse_call_math.o
156c85f09ccSJohn LevonSMATCH_OBJS += smatch_passes_array_size.o
157c85f09ccSJohn LevonSMATCH_OBJS += smatch_project.o
158c85f09ccSJohn LevonSMATCH_OBJS += smatch_ranges.o
159c85f09ccSJohn LevonSMATCH_OBJS += smatch_real_absolute.o
160c85f09ccSJohn LevonSMATCH_OBJS += smatch_recurse.o
161c85f09ccSJohn LevonSMATCH_OBJS += smatch_returns.o
162c85f09ccSJohn LevonSMATCH_OBJS += smatch_return_to_param.o
163c85f09ccSJohn LevonSMATCH_OBJS += smatch_scope.o
164c85f09ccSJohn LevonSMATCH_OBJS += smatch_slist.o
165c85f09ccSJohn LevonSMATCH_OBJS += smatch_start_states.o
166c85f09ccSJohn LevonSMATCH_OBJS += smatch_statement_count.o
167c85f09ccSJohn LevonSMATCH_OBJS += smatch_states.o
168c85f09ccSJohn LevonSMATCH_OBJS += smatch_stored_conditions.o
169c85f09ccSJohn LevonSMATCH_OBJS += smatch_string_list.o
170c85f09ccSJohn LevonSMATCH_OBJS += smatch_strings.o
171c85f09ccSJohn LevonSMATCH_OBJS += smatch_strlen.o
172c85f09ccSJohn LevonSMATCH_OBJS += smatch_struct_assignment.o
173c85f09ccSJohn LevonSMATCH_OBJS += smatch_sval.o
174c85f09ccSJohn LevonSMATCH_OBJS += smatch_tracker.o
175c85f09ccSJohn LevonSMATCH_OBJS += smatch_type_links.o
176c85f09ccSJohn LevonSMATCH_OBJS += smatch_type.o
177c85f09ccSJohn LevonSMATCH_OBJS += smatch_type_val.o
178c85f09ccSJohn LevonSMATCH_OBJS += smatch_unknown_value.o
179c85f09ccSJohn LevonSMATCH_OBJS += smatch_untracked_param.o
180c85f09ccSJohn LevonSMATCH_OBJS += smatch_var_sym.o
1815a0e240fSJohn LevonSMATCH_OBJS += smatch_parsed_conditions.o
182c85f09ccSJohn Levon
1831f5207b7SJohn LevonSMATCH_CHECK_OBJS:sh=ls src/check_*.c | sed -e 's+\.c+.o+;s+src/++;'
1841f5207b7SJohn Levon
185c85f09ccSJohn LevonOBJS = smatch.o $(LIB_OBJS) $(SMATCH_OBJS) $(SMATCH_CHECK_OBJS)
1861f5207b7SJohn Levon
1871f5207b7SJohn LevonSMATCH_DATA = \
1881f5207b7SJohn Levon	illumos_kernel.skipped_functions \
1891f5207b7SJohn Levon	illumos_user.skipped_functions
1901f5207b7SJohn Levon
191c85f09ccSJohn LevonSMATCH_DB_DATA =
192c85f09ccSJohn LevonSMATCH_DB_DATA += call_implies.schema
193c85f09ccSJohn LevonSMATCH_DB_DATA += function_ptr.schema
194c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_map.schema
195c85f09ccSJohn LevonSMATCH_DB_DATA += caller_info.schema
196c85f09ccSJohn LevonSMATCH_DB_DATA += function_type.schema
197c85f09ccSJohn LevonSMATCH_DB_DATA += param_map.schema
198c85f09ccSJohn LevonSMATCH_DB_DATA += common_caller_info.schema
199c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_info.schema
200c85f09ccSJohn LevonSMATCH_DB_DATA += parameter_name.schema
201c85f09ccSJohn LevonSMATCH_DB_DATA += constraints.schema
202c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_size.schema
203c85f09ccSJohn LevonSMATCH_DB_DATA += return_implies.schema
204c85f09ccSJohn LevonSMATCH_DB_DATA += constraints_required.schema
205c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_value.schema
206c85f09ccSJohn LevonSMATCH_DB_DATA += return_states.schema
207c85f09ccSJohn LevonSMATCH_DB_DATA += data_info.schema
208c85f09ccSJohn LevonSMATCH_DB_DATA += local_values.schema
209c85f09ccSJohn LevonSMATCH_DB_DATA += sink_info.schema
210c85f09ccSJohn LevonSMATCH_DB_DATA += db.schema
211c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_about.schema
212c85f09ccSJohn LevonSMATCH_DB_DATA += type_info.schema
213c85f09ccSJohn LevonSMATCH_DB_DATA += fn_data_link.schema
214c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_alias.schema
215c85f09ccSJohn LevonSMATCH_DB_DATA += type_size.schema
216c85f09ccSJohn LevonSMATCH_DB_DATA += fn_ptr_data_link.schema
217c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_data.schema
218c85f09ccSJohn LevonSMATCH_DB_DATA += type_value.schema
2191f5207b7SJohn Levon
2201f5207b7SJohn LevonROOTONBLDDATAFILES = $(SMATCH_DATA:%=$(SMATCHDATADIR)/smatch_data/%)
2211f5207b7SJohn LevonROOTONBLDDATAFILES += $(SMATCH_DB_DATA:%=$(SMATCHDATADIR)/smatch_data/db/%)
2221f5207b7SJohn Levon
2231f5207b7SJohn LevonBUILT_HEADERS = src/version.h src/check_list_local.h
2241f5207b7SJohn Levon
2251f5207b7SJohn Levon.KEEP_STATE:
2261f5207b7SJohn Levon
227c653bb47SJohn Levon.PARALLEL: $(OBJS)
228c653bb47SJohn Levon
2291f5207b7SJohn Levonall: $(PROG)
2301f5207b7SJohn Levon
2311f5207b7SJohn Levoninstall: all .WAIT $(ROOTONBLDMACHPROG) $(ROOTONBLDDATAFILES)
2321f5207b7SJohn Levon
2331f5207b7SJohn Levonclean:
2341f5207b7SJohn Levon	rm -f $(OBJS) $(BUILT_HEADERS)
2351f5207b7SJohn Levon
2361f5207b7SJohn Levon$(ROOTONBLDDATAFILES): $(SMATCHDATADIR)/smatch_data/db
2371f5207b7SJohn Levon
2381f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/%: src/smatch_data/%
2391f5207b7SJohn Levon	$(INS.file)
2401f5207b7SJohn Levon
2411f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/db:
2421f5207b7SJohn Levon	$(INS.dir)
2431f5207b7SJohn Levon
2441f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data:
2451f5207b7SJohn Levon	$(INS.dir)
2461f5207b7SJohn Levon
2471f5207b7SJohn Levon$(PROG): $(OBJS)
2481f5207b7SJohn Levon	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
2491f5207b7SJohn Levon	$(POST_PROCESS)
2501f5207b7SJohn Levon
2511f5207b7SJohn Levon%.o: src/%.c $(BUILT_HEADERS)
2521f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
2531f5207b7SJohn Levon
2541f5207b7SJohn Levon%.o: src/cwchash/%.c
2551f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
2561f5207b7SJohn Levon
2571f5207b7SJohn Levonsrc/check_list_local.h:
2581f5207b7SJohn Levon	touch src/check_list_local.h
2591f5207b7SJohn Levon
2601f5207b7SJohn Levonsrc/version.h:
2611f5207b7SJohn Levon	echo '#define SPARSE_VERSION "$(SPARSE_VERSION)"' > src/version.h
2621f5207b7SJohn Levon
2631f5207b7SJohn Levoninclude ../Makefile.targ
264