xref: /illumos-gate/usr/src/tools/smatch/Makefile (revision 582237e6)
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#
111f5207b7SJohn Levon# Copyright (c) 2019, Joyent, Inc.
121f5207b7SJohn Levon#
131f5207b7SJohn Levon
141f5207b7SJohn Levon#
151f5207b7SJohn Levon# The src/ sub-directory is un-modified copy of
16efe51d0cSJohn Levon# https://github.com/illumos/smatch/tree/0.5.1-il-4
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
23efe51d0cSJohn LevonSPARSE_VERSION = 0.5.1-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
30*582237e6SPeter Tribble# sparc doesn't recognise -msave-args
31*582237e6SPeter Tribblei386_SMATCHFLAGS = -msave-args
32*582237e6SPeter Tribblesparc_SMATCHFLAGS =
331f5207b7SJohn Levon
34*582237e6SPeter TribbleCFLAGS = -O -m64 $($(MACH)_SMATCHFLAGS) -D__sun -Wall -Wno-unknown-pragmas -std=gnu99 -nodefaultlibs
351f5207b7SJohn Levon
361f5207b7SJohn LevonSMATCHDATADIR = $(ROOTONBLDSHARE)/smatch
371f5207b7SJohn Levon
381f5207b7SJohn LevonCFLAGS += -DSMATCHDATADIR='"$(SMATCHDATADIR)"'
391f5207b7SJohn LevonCFLAGS += -DGCC_BASE='"/no/such/dir"'
401f5207b7SJohn LevonCFLAGS += -DMULTIARCH_TRIPLET=NULL
411f5207b7SJohn Levon
421f5207b7SJohn LevonLDLIBS += -lsqlite3 -lcrypto -lm -lgcc -lc
431f5207b7SJohn LevonLDFLAGS = $(MAPFILE.NES:%=-Wl,-M%)
441f5207b7SJohn LevonLDFLAGS += -L$(NATIVE_ADJUNCT)/lib -R$(NATIVE_ADJUNCT)/lib
451f5207b7SJohn Levon
461f5207b7SJohn LevonCPPFLAGS += -nostdinc
471f5207b7SJohn LevonCPPFLAGS += -Isrc/
481f5207b7SJohn LevonCPPFLAGS += -I$(NATIVE_ADJUNCT)/include
491f5207b7SJohn Levon
501f5207b7SJohn Levon# no install.bin
511f5207b7SJohn LevonINS.file = $(RM) $@; $(CP) $< $(@D); $(CHMOD) $(FILEMODE) $@
521f5207b7SJohn LevonINS.dir = mkdir -p $@; $(CHMOD) $(DIRMODE) $@
531f5207b7SJohn Levon
541f5207b7SJohn LevonSMATCH_CHECK_OBJS:sh=ls src/check_*.c | sed -e 's+\.c+.o+;s+src/++;'
551f5207b7SJohn Levon
561f5207b7SJohn LevonOBJS = smatch.o $(SMATCH_CHECK_OBJS)
571f5207b7SJohn Levon
581f5207b7SJohn LevonOBJS += smatch_flow.o smatch_conditions.o smatch_slist.o smatch_states.o \
591f5207b7SJohn Levon	smatch_helper.o smatch_type.o smatch_hooks.o smatch_function_hooks.o \
601f5207b7SJohn Levon	smatch_modification_hooks.o smatch_extra.o smatch_estate.o smatch_math.o \
611f5207b7SJohn Levon	smatch_sval.o smatch_ranges.o smatch_implied.o smatch_ignore.o smatch_project.o \
621f5207b7SJohn Levon	smatch_var_sym.o smatch_tracker.o smatch_files.o smatch_expression_stacks.o \
631f5207b7SJohn Levon	smatch_equiv.o smatch_buf_size.o smatch_strlen.o smatch_capped.o smatch_db.o \
641f5207b7SJohn Levon	smatch_expressions.o smatch_returns.o smatch_parse_call_math.o \
651f5207b7SJohn Levon	smatch_param_limit.o smatch_param_filter.o \
661f5207b7SJohn Levon	smatch_param_set.o smatch_comparison.o smatch_param_compare_limit.o smatch_local_values.o \
671f5207b7SJohn Levon	smatch_function_ptrs.o smatch_annotate.o smatch_string_list.o \
681f5207b7SJohn Levon	smatch_param_cleared.o smatch_start_states.o \
691f5207b7SJohn Levon	smatch_recurse.o smatch_data_source.o smatch_type_val.o \
701f5207b7SJohn Levon	smatch_common_functions.o smatch_struct_assignment.o \
711f5207b7SJohn Levon	smatch_unknown_value.o smatch_stored_conditions.o avl.o \
721f5207b7SJohn Levon	smatch_function_info.o smatch_links.o smatch_auto_copy.o \
731f5207b7SJohn Levon	smatch_type_links.o smatch_untracked_param.o smatch_impossible.o \
741f5207b7SJohn Levon	smatch_strings.o smatch_param_used.o smatch_container_of.o smatch_address.o \
751f5207b7SJohn Levon	smatch_buf_comparison.o smatch_real_absolute.o smatch_scope.o \
761f5207b7SJohn Levon	smatch_imaginary_absolute.o smatch_parameter_names.o \
771f5207b7SJohn Levon	smatch_return_to_param.o smatch_passes_array_size.o \
781f5207b7SJohn Levon	smatch_constraints.o smatch_constraints_required.o \
791f5207b7SJohn Levon	smatch_fn_arg_link.o smatch_about_fn_ptr_arg.o smatch_mtag.o \
801f5207b7SJohn Levon	smatch_mtag_map.o smatch_mtag_data.o \
811f5207b7SJohn Levon	smatch_param_to_mtag_data.o smatch_mem_tracker.o smatch_array_values.o \
821f5207b7SJohn Levon	smatch_nul_terminator.o smatch_assigned_expr.o smatch_kernel_user_data.o \
83efe51d0cSJohn Levon	smatch_statement_count.o smatch_bits.o smatch_integer_overflow.o
841f5207b7SJohn Levon
851f5207b7SJohn LevonOBJS += target.o parse.o tokenize.o pre-process.o symbol.o lib.o scope.o \
861f5207b7SJohn Levon	expression.o show-parse.o evaluate.o expand.o inline.o linearize.o \
871f5207b7SJohn Levon	char.o sort.o allocate.o compat-linux.o ptrlist.o \
881f5207b7SJohn Levon	builtin.o \
891f5207b7SJohn Levon	stats.o \
901f5207b7SJohn Levon	flow.o cse.o simplify.o memops.o liveness.o storage.o unssa.o \
911f5207b7SJohn Levon	dissect.o \
921f5207b7SJohn Levon	macro_table.o token_store.o hashtable.o
931f5207b7SJohn Levon
941f5207b7SJohn LevonSMATCH_DATA = \
951f5207b7SJohn Levon	illumos_kernel.no_return_funcs \
961f5207b7SJohn Levon	illumos_kernel.skipped_functions \
971f5207b7SJohn Levon	illumos_user.no_return_funcs \
981f5207b7SJohn Levon	illumos_user.skipped_functions
991f5207b7SJohn Levon
1001f5207b7SJohn LevonSMATCH_DB_DATA = \
1011f5207b7SJohn Levon	return_states.schema \
1021f5207b7SJohn Levon	call_implies.schema \
1031f5207b7SJohn Levon	type_value.schema \
1041f5207b7SJohn Levon	param_map.schema \
1051f5207b7SJohn Levon	function_type_size.schema \
1061f5207b7SJohn Levon	parameter_name.schema \
1071f5207b7SJohn Levon	fn_ptr_data_link.schema \
1081f5207b7SJohn Levon	constraints.schema \
1091f5207b7SJohn Levon	mtag_about.schema \
1101f5207b7SJohn Levon	type_info.schema \
1111f5207b7SJohn Levon	function_type_info.schema \
1121f5207b7SJohn Levon	caller_info.schema \
1131f5207b7SJohn Levon	function_type_value.schema \
1141f5207b7SJohn Levon	return_implies.schema \
1151f5207b7SJohn Levon	type_size.schema \
1161f5207b7SJohn Levon	constraints_required.schema \
1171f5207b7SJohn Levon	fn_data_link.schema \
1181f5207b7SJohn Levon	mtag_alias.schema \
1191f5207b7SJohn Levon	common_caller_info.schema \
1201f5207b7SJohn Levon	data_info.schema \
1211f5207b7SJohn Levon	function_type.schema \
1221f5207b7SJohn Levon	db.schema \
1231f5207b7SJohn Levon	mtag_data.schema \
1241f5207b7SJohn Levon	function_ptr.schema \
1251f5207b7SJohn Levon	sink_info.schema \
1261f5207b7SJohn Levon	local_values.schema \
1271f5207b7SJohn Levon	mtag_map.schema
1281f5207b7SJohn Levon
1291f5207b7SJohn LevonROOTONBLDDATAFILES = $(SMATCH_DATA:%=$(SMATCHDATADIR)/smatch_data/%)
1301f5207b7SJohn LevonROOTONBLDDATAFILES += $(SMATCH_DB_DATA:%=$(SMATCHDATADIR)/smatch_data/db/%)
1311f5207b7SJohn Levon
1321f5207b7SJohn LevonBUILT_HEADERS = src/version.h src/check_list_local.h
1331f5207b7SJohn Levon
1341f5207b7SJohn Levon.KEEP_STATE:
1351f5207b7SJohn Levon
136c653bb47SJohn Levon.PARALLEL: $(OBJS)
137c653bb47SJohn Levon
1381f5207b7SJohn Levonall: $(PROG)
1391f5207b7SJohn Levon
1401f5207b7SJohn Levoninstall: all .WAIT $(ROOTONBLDMACHPROG) $(ROOTONBLDDATAFILES)
1411f5207b7SJohn Levon
1421f5207b7SJohn Levonclean:
1431f5207b7SJohn Levon	rm -f $(OBJS) $(BUILT_HEADERS)
1441f5207b7SJohn Levon
1451f5207b7SJohn Levon$(ROOTONBLDDATAFILES): $(SMATCHDATADIR)/smatch_data/db
1461f5207b7SJohn Levon
1471f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/%: src/smatch_data/%
1481f5207b7SJohn Levon	$(INS.file)
1491f5207b7SJohn Levon
1501f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/db:
1511f5207b7SJohn Levon	$(INS.dir)
1521f5207b7SJohn Levon
1531f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data:
1541f5207b7SJohn Levon	$(INS.dir)
1551f5207b7SJohn Levon
1561f5207b7SJohn Levon$(PROG): $(OBJS)
1571f5207b7SJohn Levon	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
1581f5207b7SJohn Levon	$(POST_PROCESS)
1591f5207b7SJohn Levon
1601f5207b7SJohn Levon%.o: src/%.c $(BUILT_HEADERS)
1611f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
1621f5207b7SJohn Levon
1631f5207b7SJohn Levon%.o: src/cwchash/%.c
1641f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
1651f5207b7SJohn Levon
1661f5207b7SJohn Levonsrc/check_list_local.h:
1671f5207b7SJohn Levon	touch src/check_list_local.h
1681f5207b7SJohn Levon
1691f5207b7SJohn Levonsrc/version.h:
1701f5207b7SJohn Levon	echo '#define SPARSE_VERSION "$(SPARSE_VERSION)"' > src/version.h
1711f5207b7SJohn Levon
1721f5207b7SJohn Levoninclude ../Makefile.targ
173