summaryrefslogblamecommitdiff
path: root/zp/GNUmakefile
blob: cc8953766656eed14ee150445b9e4de209063ac3 (plain) (tree)
1
2
3
4
5
6
7
8
9



                                                                                                               


                               

     
                     
                  
                         
                  

     

          
                 
           


                   
               

     
                                         





                                              


                                               
                                             

                                             
 
                                            

                                              
                                              







                                                   
                                                









                                                  
                                               


                                               
                                             
 
                     
 

                                               



                                                
                        
 
                                             
                                              
 
                          
 
                                               
                                                
 
                         
 
                                              



         







                                    
                                






                                    
                                







                                
                                









                                
                                
                                


                                
 
                          

                                
                        








                       




















                                    
 
           
                             
                             

                             
                             
                             


                             












                           




                       
                   
                   



                     
                     
                     




                    







                     














                                    
                                        
                                        
                                 
                                                                                    
                                                                                        
                                                                                                          






                                           
# Copyright 2022-2023 Gabriel Jensen.
# This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
# If a copy of the MPL was not distributed with this file, You can obtain one at <https://mozilla.org/MPL/2.0>.

ifeq "$(tar)" ""
tar := $(shell ../getTarget.sh)
$(info Targeting $(tar)!)
endif

ifeq "$(tar)" "amd64"
AS := nasm -felf64
else ifeq "$(tar)" "ia32"
AS := nasm -felf32
endif

CXX := g++

ifeq "$(stdc)" ""
stdc := c90
endif

ifeq "$(stdcxx)" ""
stdcxx := c++98
endif

OBJ_ZP_TRP         := source/any/zp/trp.o

OBJ_MEM_MEMCPY      := source/any/mem/memcpy.o
OBJ_MEM_MEMEQU      := source/any/mem/memequ.o
OBJ_MEM_MEMFIL      := source/any/mem/memfil.o
OBJ_MEM_MEMSRH      := source/any/mem/memsrh.o

#OBJ_MTH_ABS         := source/any/mth/abs.o
#OBJ_MTH_DIVMOD      := source/any/mth/divmod.o
#OBJ_MTH_DOT         := source/any/mth/dot.o
OBJ_MTH_ISNAN       := source/any/mth/isnan.o
#OBJ_MTH_VADD        := source/any/mth/vadd.o
#OBJ_MTH_VSUB        := source/any/mth/vsub.o

#OBJ_STR_FMT         := source/any/str/fmt.o
OBJ_STR_STRCPY      := source/any/str/strcpy.o
OBJ_STR_STREQU      := source/any/str/strequ.o
OBJ_STR_STRFIL      := source/any/str/strfil.o
OBJ_STR_STRLEN      := source/any/str/strlen.o
OBJ_STR_STRSRH      := source/any/str/strsrh.o
OBJ_STR_UTF16DEC    := source/any/str/utf16dec.o
OBJ_STR_UTF16DECLEN := source/any/str/utf16declen.o
OBJ_STR_UTF16ENC    := source/any/str/utf16enc.o
OBJ_STR_UTF16ENCLEN := source/any/str/utf16enclen.o
OBJ_STR_UTF32CPY    := source/any/str/utf32cpy.o
OBJ_STR_UTF32EQU    := source/any/str/utf32equ.o
OBJ_STR_UTF32FIL    := source/any/str/utf32fil.o
OBJ_STR_UTF32LEN    := source/any/str/utf32len.o
OBJ_STR_UTF32SRH    := source/any/str/utf32srh.o
OBJ_STR_UTF8DEC     := source/any/str/utf8dec.o
OBJ_STR_UTF8DECLEN  := source/any/str/utf8declen.o
OBJ_STR_UTF8ENC     := source/any/str/utf8enc.o
OBJ_STR_UTF8ENCLEN  := source/any/str/utf8enclen.o
OBJ_STR_WIN1252DEC  := source/any/str/win1252dec.o
OBJ_STR_WIN1252ENC  := source/any/str/win1252enc.o
OBJ_STR_WSTRCPY     := source/any/str/wstrcpy.o
OBJ_STR_WSTREQU     := source/any/str/wstrequ.o
OBJ_STR_WSTRFIL     := source/any/str/wstrfil.o
OBJ_STR_WSTRLEN     := source/any/str/wstrlen.o
OBJ_STR_WSTRSRH     := source/any/str/wstrsrh.o

OBJ_ZP_SYSCAL       := source/any/zp/syscal.o

ifeq "$(tar)" "amd64"

OBJ_ZP_SYSCAL       := source/amd64/zp/syscal.o
OBJ_ZP_TRP          := source/amd64/zp/trp.o

OBJ_MEM_MEMCPY      := source/amd64/mem/memcpy.o
OBJ_MEM_MEMFIL      := source/amd64/mem/memfil.o

else ifeq "$(tar)" "arm"

OBJ_ZP_SYSCAL       := source/arm/zp/syscal.o
OBJ_MEM_MEMCPY      := source/arm/mem/memcpy.o

else ifeq "$(tar)" "arm64"

OBJ_ZP_SYSCAL       := source/arm64/zp/syscal.o
OBJ_MEM_MEMCPY      := source/arm64/mem/memcpy.o

else ifeq "$(tar)" "ia32"

OBJ_ZP_SYSCAL       := source/ia32/zp/syscal.o

endif

OBJS := \
	$(OBJ_MEM_MEMCPY)      \
	$(OBJ_MEM_MEMEQU)      \
	$(OBJ_MEM_MEMFIL)      \
	$(OBJ_MEM_MEMSRH)      \
		                   \
	$(OBJ_MTH_ABS)         \
	$(OBJ_MTH_DIVMOD)      \
	$(OBJ_MTH_DOT)         \
	$(OBJ_MTH_ISNAN)       \
	$(OBJ_MTH_VADD)        \
	$(OBJ_MTH_VSUB)        \
		                   \
	$(OBJ_STR_FMT)         \
	$(OBJ_STR_FMTLEN)      \
	$(OBJ_STR_STRCPY)      \
	$(OBJ_STR_STREQU)      \
	$(OBJ_STR_STRFIL)      \
	$(OBJ_STR_STRLEN)      \
	$(OBJ_STR_STRSRH)      \
	$(OBJ_STR_UTF16DEC)    \
	$(OBJ_STR_UTF16DECLEN) \
	$(OBJ_STR_UTF16ENC)    \
	$(OBJ_STR_UTF16ENCLEN) \
	$(OBJ_STR_UTF32CPY)    \
	$(OBJ_STR_UTF32EQU)    \
	$(OBJ_STR_UTF32FIL)    \
	$(OBJ_STR_UTF32LEN)    \
	$(OBJ_STR_UTF32SRH)    \
	$(OBJ_STR_UTF8DEC)     \
	$(OBJ_STR_UTF8DECLEN)  \
	$(OBJ_STR_UTF8ENC)     \
	$(OBJ_STR_UTF8ENCLEN)  \
	$(OBJ_STR_WIN1252DEC)  \
	$(OBJ_STR_WIN1252ENC)  \
	$(OBJ_STR_WSTRCPY)     \
	$(OBJ_STR_WSTREQU)     \
	$(OBJ_STR_WSTRFIL)     \
	$(OBJ_STR_WSTRLEN)     \
	$(OBJ_STR_WSTRSRH)     \
	                       \
	$(OBJ_ZP_TRP)

ifneq "$(nosyscal)" "true"
OBJS := \
	$(OBJS)                \
	$(OBJ_ZP_SYSCAL)
endif

ifeq "$(shrlib)" "true"
LIB := libzp.so
else
LIB := libzp.a
endif

HDRS := \
	include/zp/mem             \
	include/zp/mem.h           \
	include/zp/mth             \
	include/zp/mth.h           \
	include/zp/str             \
	include/zp/str.h           \
	include/zp/zp              \
	include/zp/zp.h            \
	include/zp/det/mem.ii      \
	include/zp/det/mth.ii      \
	include/zp/det/str.ii      \
	include/zp/det/zp.ii       \
	include/zp/prv/arc.h       \
	include/zp/prv/chr.h       \
	include/zp/prv/flt.h       \
	include/zp/prv/imp.h       \
	include/zp/prv/int.h       \
	include/zp/prv/std.h       \
	include/zp/prv/sys.h       \
	include-private/zp/prv/fmt \
	include-private/zp/prv/str

CFLAGS := \
	-Iinclude           \
	-Iinclude-private   \
	-Wall               \
	-Wextra             \
	-Wpedantic          \
	-ffreestanding      \
	-fshort-enums       \
	-nostdlib           \
	-pipe               \
	-std=$(stdc)

CXXFLAGS := \
	-Iinclude         \
	-Iinclude-private \
	-Wall             \
	-Wextra           \
	-Wpedantic        \
	-ffreestanding    \
	-fno-exceptions   \
	-fshort-enums     \
	-nostdlib         \
	-pipe             \
	-std=$(stdcxx)

ifeq "$(shrlib)" "true"
CFLAGS := \
	$(CFLAGS) \
	-O3       \
	-fpic     \
	-g

CXXFLAGS := \
	$(CXXFLAGS) \
	-O3         \
	-fpic       \
	-g

LDFLAGS := \
	$(LDFLAGS) \
	-shared
else
CFLAGS := \
	$(CFLAGS) \
	-Oz

CXXFLAGS := \
	$(CXXFLAGS) \
	-Oz
endif

.PHONY: clean install purge

ifeq "$(shrlib)" "true"
$(LIB): $(OBJS)
	$(CC) $(LDFLAGS) -o$(@) $(^)
else
$(LIB): $(OBJS)
	$(AR) r $(@) $(^)
endif

$(OBJS): $(HDRS)

install: $(LIB)
	mkdir -pvm755 "$(HDRDIR)/zp/det"
	mkdir -pvm755 "$(HDRDIR)/zp/prv"
	mkdir -pvm755 "$(LIBDIR)"
	install -vm644 "include/zp/"{"mem","mth","str","zp"}{"",".h"} "$(HDRDIR)/zp"
	install -vm644 "include/zp/det/"{"mem","mth","str","zp"}".ii" "$(HDRDIR)/zp/det"
	install -vm644 "include/zp/prv/"{"arc","chr","flt","imp","int","std","sys"}".h" "$(HDRDIR)/zp/prv"
	install -vm755 "$(LIB)" "$(LIBDIR)"

clean:
	$(RM) $(OBJS)

purge: clean
	$(RM) $(LIB)