summaryrefslogblamecommitdiffstats
path: root/Makefile
blob: 791643127c5348c1cde737f600c8f38be033c48f (plain) (tree)
1
                                                     

































                                                                                          

                 

                  



                    
             









                         

                  











                         
                 






                                                                           




                                                                       




                                                                              


                                                                                                         


                                                                


                                                                                          


                                                                                                            


                                               
                                            
                                  
                                             



                                               
                                        

                                           
                             
                                    
                               



                                       
















                                           


                                             
                                          







                                         

                                 

                               
                                  
                                 
                                 
                                


                                     

 

          
                        








                                                         

                                                 




                    
                                  






                                                                                               


                                                          







                                                  


                                           
                                                   

                                                                                        


                                                                                               

 



























                                                                                                 
                                                                          
                                                                        
                                                                  

                                           
                                                            
# See LICENSE file for copyright and license details.
.POSIX:

# Choose either yes or no (determines whether system call,
# signal, and error tables, for the list operating systems,
# shall be compiled into the library)
LINUX_SUPPORT = $(DEFAULT_OS_SUPPORT_SELECTION)

# Choose operating system to compile the library for
OS = linux
# Linux:   linux
# Mac OS:  macos
# Windows: windows

CONFIGFILE = config.mk
include $(CONFIGFILE)




include mk/$(OS).mk

LIB_MAJOR = 1
LIB_MINOR = 0
LIB_VERSION = $(LIB_MAJOR).$(LIB_MINOR)
LIB_NAME = syscalls


all: libsyscalls.a libsyscalls.$(LIBEXT)

#extended for each support operating system to download the operating system's source code
download:


SUPPORTED_ARCHES =\
	ALPHA_LE\
	ALPHA_BE\
	AMD64\
	AMD64_X32\
	IA64_LE\
	IA64_BE\
	IA64_P32_LE\
	IA64_P32_BE\
	M68K\
	MICROBLAZE_32_LE\
	MICROBLAZE_32_BE\
	MICROBLAZE_64_LE\
	MICROBLAZE_64_BE\
	MIPS_O32_LE\
	MIPS_O32_BE\
	MIPS_N32_LE\
	MIPS_N32_BE\
	MIPS_N64_LE\
	MIPS_N64_BE\
	PARISC_32\
	PARISC_64\
	POWERPC_32_LE\
	POWERPC_32_BE\
	POWERPC_64_LE\
	POWERPC_64_BE\
	POWERPC_NOSPU_LE\
	POWERPC_NOSPU_BE\
	POWERPC_SPU_LE\
	POWERPC_SPU_BE\
	S390_32\
	S390_64\
	SH_LE\
	SH_BE\
	SPARC_32\
	SPARC_64_LE\
	SPARC_64_BE\
	I386\
	XTENSA_LE\
	XTENSA_BE
# Excluded because of incomplete support (see LIST_ARCH_SPECS in common.h):
#   ARM_OABI_LE ARM_OABI_BE ARM_EABI_LE ARM_EABI_BE

include $(CONFIGFILE)
# Reloading the user's config in case it limits supported architectures


#this not modify, this is a help variable to get the # symbol into sed scripts
h = '"$$(printf '\43\n')"'
#this not modify, this is a help variable to make [[:space:]] shorter
s = [[:space:]]

#extended for each support operating system with the operating system's name as appropriate for filenames
OPERATING_SYSTEMS =

#extended with supported architectures for each operating system
TEST_ENV =

#extended for each support operating system with the number of syscall parameters they use
NPARAMS =

#extended for each support operating system with the maximum used number of fields in its structs and unions
NFIELDS =

#extended for each support operating system
OBJ =\
	libsyscalls_get_datatype_description.o\
	libsyscalls_get_integer_alignment.o\
	libsyscalls_get_signals.o\
	libsyscalls_get_struct_description.o\
	libsyscalls_get_syscall.o\
	libsyscalls_get_syscall_display_info.o\
	libsyscalls_get_syscall_errors.o\
	libsyscalls_get_syscall_range.o\
	libsyscalls_find_named_number.o\
	libsyscalls_make_signed_integer.o\
	libsyscalls_parse_signed_integer.o\
	libsyscalls_perror.o\
	libsyscalls_section_value.o\
	libsyscalls_strerror.o\
	libsyscalls_syscalls_tables_.o\
	libsyscalls_to_tracee_endian.o\
	libsyscalls_to_tracer_endian.o\
	libsyscalls_unsection_value.o

#extended for each support operating system
HDR =\
	libsyscalls.h\
	common.h\
	generated/arches.h\
	generated/lowercase.h\
	generated/oses.h\
	generated/macros.h\
	$(SUBHDR)

SUBHDR =\
	libsyscalls/advanced.h\
	libsyscalls/internal-begin.h\
	libsyscalls/internal-end.h\
	libsyscalls/short-enums.h

TESTUTILS =\
	testutil/get-datatype-description.tu\
	testutil/get-error.tu\
	testutil/get-integer-alignment.tu\
	testutil/get-section-fraction.tu\
	testutil/get-signals.tu\
	testutil/get-syscall-errors.tu\
	testutil/get-syscall-range.tu\
	testutil/is-section-half.tu\
	testutil/is-section-quarter.tu\
	testutil/is-datatype-struct.tu\
	testutil/list-errors.tu\
	testutil/make-signed.tu\
	testutil/parse-signed.tu\
	testutil/perror-all.tu\
	testutil/perror-bad.tu\
	testutil/section-value.tu\
	testutil/strerror-all.tu\
	testutil/strerror-bad.tu\
	testutil/test-search.tu\
	testutil/to-tracee-endian.tu\
	testutil/to-tracer-endian.tu\
	testutil/unsection-value.tu



.SUFFIXES:
.SUFFIXES: .lo .o .c .tu


include linux/$(LINUX_SUPPORT).mk
include mk/generate.mk

include $(CONFIGFILE)
# Reloading the user's config as the makefiles for the OS
# may have made changes to what is supported

TEST_ENV += SUPPORTED_OSES="$(OPERATING_SYSTEMS)"

LOBJ = $(OBJ:.o=.lo)


$(OBJ): $(HDR)
$(LOBJ): $(HDR)
$(TESTUTILS): $(HDR) libsyscalls.a

.c.o:
	$(CC) -c -o $@ $< $(CFLAGS) $(IMPORTANT_CFLAGS) $(CPPFLAGS) $(IMPORTANT_CPPFLAGS)

.c.lo:
	$(CC) -fPIC -c -o $@ $< $(CFLAGS) $(IMPORTANT_CFLAGS) $(CPPFLAGS) $(IMPORTANT_CPPFLAGS)

.c.tu:
	$(CC) -o $@ $< libsyscalls.a $(CFLAGS) $(CPPFLAGS)

libsyscalls.a: $(OBJ)
	@rm -f -- $@
	$(AR) rc $@ $(OBJ)
	$(AR) ts $@ > /dev/null

libsyscalls.$(LIBEXT): $(LOBJ)
	$(CC) $(LIBFLAGS) -o $@ $(LOBJ) $(LDFLAGS)


check: $(TESTUTILS)
	env CPP="$(CPP)" $(TEST_ENV) ./test
	@if grep '^t=:' < ./test >/dev/null; then \
		printf '\033[1;33m%s\033[m\n' 'Warning! tests have been disabled' >&2; \
	fi
	@if grep '^alias p=' < ./test >/dev/null; then \
		printf '\033[1;33m%s\033[m\n' 'Warning! tests are running synchronously' >&2; \
	fi


install: libsyscalls.a libsyscalls.$(LIBEXT)
	mkdir -p -- "$(DESTDIR)$(PREFIX)/lib"
	mkdir -p -- "$(DESTDIR)$(PREFIX)/include/libsyscalls"
	cp -- libsyscalls.a "$(DESTDIR)$(PREFIX)/lib/"
	cp -- libsyscalls.$(LIBEXT) "$(DESTDIR)$(PREFIX)/lib/libsyscalls.$(LIBMINOREXT)"
	$(FIX_INSTALL_NAME) "$(DESTDIR)$(PREFIX)/lib/libsyscalls.$(LIBMINOREXT)"
	ln -sf -- libsyscalls.$(LIBMINOREXT) "$(DESTDIR)$(PREFIX)/lib/libsyscalls.$(LIBMAJOREXT)"
	ln -sf -- libsyscalls.$(LIBMAJOREXT) "$(DESTDIR)$(PREFIX)/lib/libsyscalls.$(LIBEXT)"
	cp -- libsyscalls.h "$(DESTDIR)$(PREFIX)/include/"
	cp -- $(SUBHDR) "$(DESTDIR)$(PREFIX)/include/libsyscalls/"

uninstall:
	-rm -f -- "$(DESTDIR)$(PREFIX)/lib/libsyscalls.a"
	-rm -f -- "$(DESTDIR)$(PREFIX)/lib/libsyscalls.$(LIBMAJOREXT)"
	-rm -f -- "$(DESTDIR)$(PREFIX)/lib/libsyscalls.$(LIBMINOREXT)"
	-rm -f -- "$(DESTDIR)$(PREFIX)/lib/libsyscalls.$(LIBEXT)"
	-rm -f -- "$(DESTDIR)$(PREFIX)/include/libsyscalls.h"
	-cd -- "$(DESTDIR)$(PREFIX)/include/" && rm -f -- $(SUBHDR)
	-rmdir -- "$(DESTDIR)$(PREFIX)/include/libsyscalls"


clean: buildclean
	-rm -rf -- $(OPERATING_SYSTEMS:=-src/)

buildclean: semiclean
	-rm -rf -- generated/ $(OPERATING_SYSTEMS:=-src/*/)

semiclean:
	-rm -f -- *.o *.lo *.su *.gch *.gcov *.gcno *.gcda .*.tmp .*.tmp.c
	-rm -f -- */*.o */*.lo */*.su */*.gch */*.gcov */*.gcno */*.gcda
	-rm -f -- *.a *.so *.so.* *.dll *.dylib *.$(LIBEXT) */*.tu
	-rm -f -- libsyscalls/short-enums.h

.PHONY: all download check install uninstall clean semiclean