diff options
-rw-r--r-- | Makefile.in | 213 | ||||
-rw-r--r-- | config.project | 49 | ||||
-rwxr-xr-x | configure | 373 | ||||
-rw-r--r-- | project/arch.mk | 0 | ||||
-rw-r--r-- | project/common.mk | 13 | ||||
-rw-r--r-- | project/defs.mk | 44 | ||||
-rw-r--r-- | project/depends.mk | 0 | ||||
-rw-r--r-- | project/extras.mk | 3 | ||||
-rw-r--r-- | project/headers.mk | 12 | ||||
-rw-r--r-- | project/overrides.mk | 0 | ||||
-rw-r--r-- | project/tree.mk | 7 | ||||
-rw-r--r-- | sysinfo/host/i686-nt32-midipix.mk | 4 | ||||
-rw-r--r-- | sysinfo/host/i686-unknown-linux.mk | 4 | ||||
-rw-r--r-- | sysinfo/host/i686-w64-mingw32.mk | 4 | ||||
-rw-r--r-- | sysinfo/host/native.mk | 6 | ||||
-rw-r--r-- | sysinfo/host/x86_64-nt64-midipix.mk | 4 | ||||
-rw-r--r-- | sysinfo/host/x86_64-unknown-linux.mk | 4 | ||||
-rw-r--r-- | sysinfo/host/x86_64-w64-mingw32.mk | 4 | ||||
-rw-r--r-- | sysinfo/os/bsd.mk | 9 | ||||
-rw-r--r-- | sysinfo/os/linux.mk | 9 | ||||
-rw-r--r-- | sysinfo/os/midipix.mk | 13 | ||||
-rw-r--r-- | sysinfo/os/mingw.mk | 14 | ||||
-rw-r--r-- | sysinfo/toolchain/clang.mk | 34 | ||||
-rw-r--r-- | sysinfo/toolchain/gcc.mk | 25 |
24 files changed, 848 insertions, 0 deletions
diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..9bfc480 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,213 @@ +PACKAGE ?= @package@ +PROJECT_DIR ?= @project_dir@ + +BUILD ?= @build@ +HOST ?= @host@ +TARGET ?= @target@ +ARCH ?= @arch@ +TOOLCHAIN ?= @toolchain@ +SYSROOT ?= @sysroot@ +CROSS_COMPILE ?= @cross_compile@ +SHELL ?= @shell@ + +CFLAGS_DEBUG ?= @cflags_debug@ +CFLAGS_COMMON ?= @cflags_common@ +CFLAGS_CMDLINE ?= @cflags_cmdline@ +CFLAGS_CONFIG ?= @cflags_config@ +CFLAGS_SYSROOT ?= @cflags_sysroot@ +CFLAGS_PATH ?= @cflags_path@ + +LDFLAGS_DEBUG ?= @ldflags_debug@ +LDFLAGS_COMMON ?= @ldflags_common@ +LDFLAGS_CMDLINE ?= @ldflags_cmdline@ +LDFLAGS_CONFIG ?= @ldflags_config@ +LDFLAGS_SYSROOT ?= @ldflags_sysroot@ +LDFLAGS_PATH ?= @ldflags_path@ + +PE_SUBSYSTEM ?= @pe_subsystem@ +PE_IMAGE_BASE ?= @pe_image_base@ +PE_CONFIG_DEFS ?= @pe_config_defs@ + +ELF_EH_FRAME ?= @elf_eh_frame@ +ELF_HASH_STYLE ?= @elf_hash_style@ +ELF_CONFIG_DEFS ?= @elf_config_defs@ + +PREFIX ?= @prefix@ +BIN_DIR ?= @bindir@ +LIB_DIR ?= @libdir@ +INCLUDE_DIR ?= @includedir@ +SYSLIB_DIR ?= @syslibdir@ +MAN_DIR ?= @mandir@ +DOC_DIR ?= @docdir@ +LIBEXEC_DIR ?= @libexecdir@ + +BUILD_CC ?= @build_cc@ +BUILD_OS ?= @build_os@ +BUILD_OS_BITS ?= @build_os_bits@ +BUILD_OS_UNDERSCORE ?= @build_os_underscore@ + + + +all: +install: +shared: +static: + + + +include $(PROJECT_DIR)/sysinfo/toolchain/$(TOOLCHAIN).mk +include $(PROJECT_DIR)/sysinfo/host/$(HOST).mk + +include $(PROJECT_DIR)/project/defs.mk +include $(PROJECT_DIR)/project/tree.mk +include $(PROJECT_DIR)/project/depends.mk +include $(PROJECT_DIR)/project/headers.mk +include $(PROJECT_DIR)/project/common.mk +include $(PROJECT_DIR)/project/arch.mk +include $(PROJECT_DIR)/project/extras.mk +include $(PROJECT_DIR)/project/overrides.mk + + + +$(APP_SRCS:%.c=%.o): CFLAGS_STATIC = $(CFLAGS_APP) + +src/%.lo: $(PROJECT_DIR)/src/%.c $(ALL_HEADERS) + $(CC) -c -o $@ $< $(CFLAGS_SHARED) + +src/%.o: $(PROJECT_DIR)/src/%.c $(ALL_HEADERS) + $(CC) -c -o $@ $< $(CFLAGS_STATIC) + +$(LIB_DIR)/%$(OS_LIB_SUFFIX): + $(CC) -shared -o $@ $^ $(LDFLAGS_SHARED) + +$(LIB_DIR)/%$(OS_ARCHIVE_EXT): + rm -f $@ + $(AR) -rcs $@ $^ + + + +all: shared static app + +install: install-libs install-headers install-app + +app: default-app + + +install-libs: install-shared install-static install-implib + +install-headers:shared static + mkdir -p $(DESTDIR)/./$(PREFIX)/./$(INCLUDE_DIR)/$(PACKAGE) + cp $(API_HEADERS) $(DESTDIR)/./$(PREFIX)/./$(INCLUDE_DIR)/$(PACKAGE) + +install-shared: shared install-implib + mkdir -p $(DESTDIR)/./$(PREFIX)/./$(LIB_DIR) + cp $(SHARED_LIB) $(DESTDIR)/./$(PREFIX)/./$(LIB_DIR) + +install-static: static + mkdir -p $(DESTDIR)/./$(PREFIX)/./$(LIB_DIR) + cp $(STATIC_LIB) $(DESTDIR)/./$(PREFIX)/./$(LIB_DIR) + +install-app: app + mkdir -p $(DESTDIR)/./$(PREFIX)/./$(BIN_DIR) + cp $(APP) $(DESTDIR)/./$(PREFIX)/./$(BIN_DIR) + + + +shared: shared-lib shared-implib + +static: static-lib + +shared-lib: shared-objs $(SHARED_LIB) + +static-lib: static-objs $(STATIC_LIB) + + + +default-app: static $(DEFAULT_APP) $(APP) + +shared-app: shared $(SHARED_APP) + +static-app: static $(STATIC_APP) + + + +shared-objs: dirs $(SHARED_OBJS) + +static-objs: dirs $(STATIC_OBJS) + +app-objs: dirs $(APP_OBJS) + + + +$(SHARED_LIB): $(SHARED_OBJS) + +$(STATIC_LIB): $(STATIC_OBJS) + +$(APP): $(DEFAULT_APP) + cp $^ $@ + +$(DEFAULT_APP): $(STATIC_OBJS) $(APP_OBJS) + $(CC) -o $@ $^ $(LDFLAGS_APP) + +$(SHARED_APP): $(SHARED_LIB) $(APP_OBJS) + $(CC) -o $@ $(APP_OBJS) -l$(PACKAGE) $(LDFLAGS_APP) + +$(STATIC_APP): $(STATIC_OBJS) $(APP_OBJS) + $(CC) -static -o $@ $^ -l$(PACKAGE) $(LDFLAGS_STATIC) + + +dirs: dirs.tag tree.tag + +dirs.tag: + mkdir -p $(BIN_DIR) + mkdir -p $(LIB_DIR) + touch dirs.tag + +distclean: clean + rm -f Makefile + +clean: + rm -f tree.tag + rm -f dirs.tag + rm -f $(SHARED_OBJS) + rm -f $(STATIC_OBJS) + rm -f $(APP_OBJS) + rm -f $(SHARED_LIB) + rm -f $(STATIC_LIB) + rm -f $(SHARED_IMPLIB) + rm -f $(APP) + rm -f $(DEFAULT_APP) + rm -f $(SHARED_APP) + rm -f $(STATIC_APP) + + +.display: + @echo CC: $(CC) + @echo CPP: $(CPP) + @echo CXX: $(CXX) + + @echo AS: $(AS) + @echo AR: $(AR) + @echo LD: $(LD) + @echo NM: $(NM) + @echo OBJDUMP: $(OBJDUMP) + @echo RANLIB: $(RANLIB) + @echo SIZE: $(SIZE) + @echo STRIP: $(STRIP) + @echo STRINGS: $(STRINGS) + + @echo ADDR2LINE: $(ADDR2LINE) + @echo COV: $(COV) + @echo CXXFILT $(CXXFILT) + @echo ELFEDIT: $(ELFEDIT) + @echo OBJCOPY: $(OBJCOPY) + @echo READELF: $(READELF) + + +.PHONY: all install shared static app .display \ + shared-objs shared-lib shared-implib \ + static-objs static-lib \ + default-app shared-app static-app \ + install-shared install-static install-implib \ + install-headers install-app \ + clean distclean diff --git a/config.project b/config.project new file mode 100644 index 0000000..133ed4f --- /dev/null +++ b/config.project @@ -0,0 +1,49 @@ +# project +mb_package=perk +mb_require_out_of_tree=no + + +# dirs +mb_default_prefix= +mb_default_bindir=bin +mb_default_libdir=lib +mb_default_includedir=include +mb_default_syslibdir=lib +mb_default_mandir=man +mb_default_docdir=doc +mb_default_libexecdir=libexec + + +# build +mb_default_build= +mb_default_host= +mb_default_target= +mb_default_arch= +mb_default_toolchain= +mb_default_sysroot= +mb_default_cross_compile= +mb_default_shell=sh + + +# switches +mb_default_cflags_debug= +mb_default_cflags_common="-I\$(PROJECT_DIR)/src/internal -I\$(PROJECT_DIR)/include" +mb_default_cflags_cmdline= +mb_default_cflags_config= +mb_default_cflags_sysroot= +mb_default_cflags_path= + +mb_default_ldflags_debug= +mb_default_ldflags_common="-Llib" +mb_default_ldflags_cmdline= +mb_default_ldflags_config= +mb_default_ldflags_sysroot= +mb_default_ldflags_path= + +mb_default_pe_subsystem=windows +mb_default_pe_image_base= +mb_default_pe_config_defs= + +mb_default_elf_eh_frame= +mb_default_elf_hash_style= +mb_default_elf_config_defs= diff --git a/configure b/configure new file mode 100755 index 0000000..0f378fb --- /dev/null +++ b/configure @@ -0,0 +1,373 @@ +#!/bin/sh +# we are no longer lazy. + +# this script respects both CFLAGS and CFLAGS_CMDLINE, +# as well as both LDFLAGS and LDFLAGS_CMDLINE, however +# the latter variable of each pair should be preferred. + +error_msg() +{ + echo $@ >&2 +} + + +init_vars() +{ + mb_project_dir=`readlink -f $(dirname $0)` + mb_pwd=`pwd` + + if [ x"$mb_config" = x ]; then + . $mb_project_dir/config.project || exit 2 + else + . "$mb_config" || exit 2 + fi + + # dirs + mb_prefix=$PREFIX + mb_bindir=$BIN_DIR + mb_libdir=$LIB_DIR + mb_includedir=$INCLUDE_DIR + mb_syslibdir=$LIB_DIR + mb_mandir=$MAN_DIR + mb_docdir=$DOC_DIR + mb_libexecdir=$LIBEXEC_DIR + + + # build + mb_build=$BUILD + mb_host=$HOST + mb_target=$TARGET + mb_arch=$ARCH + mb_toolchain=$TOOLCHAIN + mb_sysroot=$SYSROOT + mb_cross_compile=$CROSS_COMPILE + mb_shell=$SHELL + + # switches + mb_cflags=$CFLAGS + mb_cflags_debug=$CFLAGS_DEBUG + mb_cflags_common=$CFLAGS_COMMON + mb_cflags_cmdline=$CFLAGS_CMDLINE + mb_cflags_config=$CFLAGS_CONFIG + mb_cflags_sysroot=$CFLAGS_SYSROOT + mb_cflags_path=$CFLAGS_PATH + + mb_ldflags=$LDFLAGS + mb_ldflags_debug=$LDFLAGS_DEBUG + mb_ldflags_common=$LDFLAGS_COMMON + mb_ldflags_cmdline=$LDFLAGS_CMDLINE + mb_ldflags_config=$LDFLAGS_CONFIG + mb_ldflags_sysroot=$LDFLAGS_SYSROOT + mb_ldflags_path=$LDFLAGS_PATH + + mb_pe_subsystem=$PE_SUBSYSTEM + mb_pe_image_base=$PE_IMAGE_BASE + mb_pe_config_defs=$PE_CONFIG_DEFS + + mb_elf_eh_frame=$ELF_EH_FRAME + mb_elf_hash_style=$ELF_HASH_STYLE + mb_elf_config_defs=$ELF_CONFIG_DEFS + + # overrides + mb_build_cc=$BUILD_CC + mb_build_os=$BUILD_OS + mb_build_os_bits=$BUILD_OS_BITS + mb_build_os_underscore=$BUILD_OS_UNDERSCORE +} + + +verify_build_directory() +{ + if [ x"$mb_project_dir" = x"$mb_pwd" ]; then + if [ x"$mb_require_out_of_tree" = xyes ]; then + error_msg "$mb_package: out-of-tree builds are required." + error_msg "please invoke configure again from a clean build directory." + exit 2 + else + mb_project_dir='.' + fi + fi +} + + +common_defaults() +{ + # dirs + [ -z "$mb_prefix" ] && mb_prefix=$mb_default_prefix + [ -z "$mb_bindir" ] && mb_bindir=$mb_default_bindir + [ -z "$mb_libdir" ] && mb_libdir=$mb_default_libdir + [ -z "$mb_includedir" ] && mb_includedir=$mb_default_includedir + [ -z "$mb_syslibdir" ] && mb_syslibdir=$mb_default_syslibdir + [ -z "$mb_mandir" ] && mb_mandir=$mb_default_mandir + [ -z "$mb_docdir" ] && mb_docdir=$mb_default_docdir + [ -z "$mb_libexecdir" ] && mb_libexecdir=$mb_default_libexecdir + + # build + [ -z "$mb_build" ] && mb_build=$mb_default_build + [ -z "$mb_host" ] && mb_host=$mb_default_host + [ -z "$mb_target" ] && mb_target=$mb_default_target + [ -z "$mb_arch" ] && mb_arch=$mb_default_arch + [ -z "$mb_toolchain" ] && mb_toolchain=$mb_default_toolchain + [ -z "$mb_sysroot" ] && mb_sysroot=$mb_default_sysroot + [ -z "$mb_cross_compile" ] && mb_cross_compile=$mb_default_cross_compile + [ -z "$mb_shell" ] && mb_shell=$mb_default_shell + + # switches + [ -z "$mb_cflags_debug" ] && mb_cflags_debug=$mb_default_cflags_debug + [ -z "$mb_cflags_common" ] && mb_cflags_common=$mb_default_cflags_common + [ -z "$mb_cflags_cmdline" ] && mb_cflags_cmdline=$mb_default_cflags_cmdline + [ -z "$mb_cflags_config" ] && mb_cflags_config=$mb_default_cflags_config + [ -z "$mb_cflags_sysroot" ] && mb_cflags_sysroot=$mb_default_cflags_sysroot + [ -z "$mb_cflags_path" ] && mb_cflags_path=$mb_default_cflags_path + + [ -z "$mb_ldflags_debug" ] && mb_ldflags_debug=$mb_default_ldflags_debug + [ -z "$mb_ldflags_common" ] && mb_ldflags_common=$mb_default_ldflags_common + [ -z "$mb_ldflags_cmdline" ] && mb_ldflags_cmdline=$mb_default_ldflags_cmdline + [ -z "$mb_ldflags_config" ] && mb_ldflags_config=$mb_default_ldflags_config + [ -z "$mb_ldflags_sysroot" ] && mb_ldflags_sysroot=$mb_default_ldflags_sysroot + [ -z "$mb_ldflags_path" ] && mb_ldflags_path=$mb_default_ldflags_path + + [ -z "$mb_pe_subsystem" ] && mb_pe_subsystem=$mb_default_pe_subsystem + [ -z "$mb_pe_image_base" ] && mb_pe_image_base=$mb_default_pe_image_base + [ -z "$mb_pe_config_defs" ] && mb_pe_config_defs=$mb_default_pe_config_defs + + [ -z "$mb_elf_eh_frame" ] && mb_elf_eh_frame=$mb_default_elf_eh_frame + [ -z "$mb_elf_hash_style" ] && mb_elf_hash_style=$mb_default_elf_hash_style + [ -z "$mb_elf_config_defs" ] && mb_elf_config_defs=$mb_default_elf_config_defs + + # host/target + [ -z "$mb_host" ] && mb_host=$mb_target + + # sysroot + if [ x"$mb_sysroot" != x ]; then + if [ x"$mb_cflags_sysroot" = x ]; then + mb_cflags_sysroot="--sysroot=$mb_sysroot" + fi + + if [ x"$mb_ldflags_sysroot" = x ]; then + mb_ldflags_sysroot="-Wl,--sysroot,$mb_sysroot" + fi + fi + + # debug + if [ x"$mb_debug" = xyes ]; then + if [ x"$mb_cflags_debug" = x ]; then + mb_cflags_debug='-g3 -O0' + fi + fi +} + + +native_defaults() +{ + # toolchain + [ -z "$mb_build_cc" ] && mb_build_cc=$CC + [ -z "$mb_build_cc" ] && mb_build_cc='cc' + $mb_build_cc -dM -E - < /dev/null > /dev/null 2>/dev/null || mb_build_cc= + + [ -z "$mb_build_cc" ] && mb_build_cc='gcc' + $mb_build_cc -dM -E - < /dev/null > /dev/null 2>/dev/null || mb_build_cc= + + [ -z "$mb_build_cc" ] && mb_build_cc='clang' + $mb_build_cc -dM -E - < /dev/null > /dev/null 2>/dev/null || mb_build_cc= + + if [ x"$mb_build_cc" = x ]; then + error_msg "config error: could not find a working native compiler." + exit 2 + fi + + if [ x"$mb_toolchain" = x ]; then + $mb_build_cc -dM -E - < /dev/null | grep '__clang__' > /dev/null && mb_toolchain='clang' + fi + + if [ x"$mb_toolchain" = x ]; then + $mb_build_cc -dM -E - < /dev/null | grep '__GCC' > /dev/null && mb_toolchain='gcc' + fi + + if [ x"$mb_toolchain" = x ]; then + error_msg "config error: could not identify the native compiler." + exit 2 + fi + + + # host + if [ x"$mb_host" = x ]; then + mb_host='native' + fi + + + # os + mb_native_os=`uname | tr '[:upper:]' '[:lower:]'` + + mb_native_os_sizeof_pointer=`$mb_build_cc -dM -E - < /dev/null \ + | grep __SIZEOF_POINTER__ \ + | cut -d ' ' -f3` + + mb_native_os_bits=`expr '8' '*' '0'"$mb_native_os_sizeof_pointer"` + + if [ $mb_native_os_bits = 32 ]; then + mb_native_os_underscore='_' + else + mb_native_os_underscore='' + fi + + if [ x"$mb_native_os_sizeof_pointer" = x ]; then + error_msg "config error: could not determine size of pointer on native system." + exit 2 + fi + + [ -z "$mb_build_os" ] && mb_build_os=$mb_native_os + [ -z "$mb_build_os_bits" ] && mb_build_os_bits=$mb_native_os_bits + [ -z "$mb_build_os_underscore" ] && mb_build_os_underscore=$mb_native_os_underscore +} + + +cross_defaults() +{ + if [ x"$mb_cross_compile" = x ] && [ x"$mb_host" != xnative ]; then + mb_cross_compile=$mb_host'-' + fi +} + + +config_copy() +{ + sed -e 's^@package@^'"$mb_package"'^g' \ + -e 's^@project_dir@^'"$mb_project_dir"'^g' \ + \ + -e 's^@build@^'"$mb_build"'^g' \ + -e 's^@host@^'"$mb_host"'^g' \ + -e 's^@target@^'"$mb_target"'^g' \ + -e 's^@arch@^'"$mb_arch"'^g' \ + -e 's^@toolchain@^'"$mb_toolchain"'^g' \ + -e 's^@sysroot@^'"$mb_sysroot"'^g' \ + -e 's^@cross_compile@^'"$mb_cross_compile"'^g' \ + -e 's^@shell@^'"$mb_shell"'^g' \ + \ + -e 's^@cflags@^'"$mb_cflags"'^g' \ + -e 's^@cflags_debug@^'"$mb_cflags_debug"'^g' \ + -e 's^@cflags_common@^'"$mb_cflags_common"'^g' \ + -e 's^@cflags_cmdline@^'"$mb_cflags $mb_cflags_cmdline"'^g' \ + -e 's^@cflags_config@^'"$mb_cflags_config"'^g' \ + -e 's^@cflags_sysroot@^'"$mb_cflags_sysroot"'^g' \ + -e 's^@cflags_path@^'"$mb_cflags_path"'^g' \ + \ + -e 's^@ldflags@^'"$mb_ldflags"'^g' \ + -e 's^@ldflags_debug@^'"$mb_ldflags_debug"'^g' \ + -e 's^@ldflags_common@^'"$mb_ldflags_common"'^g' \ + -e 's^@ldflags_cmdline@^'"$mb_ldflags $mb_ldflags_cmdline"'^g' \ + -e 's^@ldflags_config@^'"$mb_ldflags_config"'^g' \ + -e 's^@ldflags_sysroot@^'"$mb_ldflags_sysroot"'^g' \ + -e 's^@ldflags_path@^'"$mb_ldflags_path"'^g' \ + \ + -e 's^@pe_subsystem@^'"$mb_pe_subsystem"'^g' \ + -e 's^@pe_image\_base@^'"$mb_pe_image_base"'^g' \ + -e 's^@pe_config\_defs@^'"$mb_pe_config_defs"'^g' \ + \ + -e 's^@elf_eh\_frame@^'"$mb_elf_eh_frame"'^g' \ + -e 's^@elf_hash\_style@^'"$mb_elf_hash_style"'^g' \ + -e 's^@elf_config\_defs@^'"$mb_elf_config_defs"'^g' \ + \ + -e 's^@prefix@^'"$mb_prefix"'^g' \ + -e 's^@bindir@^'"$mb_bindir"'^g' \ + -e 's^@libdir@^'"$mb_libdir"'^g' \ + -e 's^@includedir@^'"$mb_includedir"'^g' \ + -e 's^@syslibdir@^'"$mb_syslibdir"'^g' \ + -e 's^@mandir@^'"$mb_mandir"'^g' \ + -e 's^@docdir@^'"$mb_docdir"'^g' \ + -e 's^@libexecdir@^'"$mb_libexecdir"'^g' \ + \ + -e 's^@build_cc@^'"$mb_build_cc"'^g' \ + -e 's^@build_os@^'"$mb_build_os"'^g' \ + -e 's^@build_os_bits@^'"$mb_build_os_bits"'^g' \ + -e 's^@build_os_underscore@^'"$mb_build_os_underscore"'^g' \ + $mb_project_dir/Makefile.in > $mb_pwd/Makefile +} + + + +# one: init +init_vars +verify_build_directory + + +# two: args +for arg ; do + case "$arg" in + --help) usage + ;; + + # dirs + --prefix=*) + mb_prefix=${arg#*=} + ;; + --bindir=*) + mb_bindir=${arg#*=} + ;; + --libdir=*) + mb_libdir=${arg#*=} + ;; + --includedir=*) + mb_includedir=${arg#*=} + ;; + --syslibdir=*) + mb_syslibdir=${arg#*=} + ;; + --mandir=*) + mb_mandir=${arg#*=} + ;; + --libexecdir=*) + mb_libexecdir=${arg#*=} + ;; + + + # build + --build=*) + mb_build=${arg#*=} + ;; + --host=*) + mb_host=${arg#*=} + ;; + --target=*) + mb_target=${arg#*=} + ;; + --arch=*) + mb_arch=${arg#*=} + ;; + --toolchain=*) + mb_toolchain=${arg#*=} + ;; + --sysroot=*) + mb_sysroot=${arg#*=} + ;; + --cross-compile=*) + mb_cross_compile=${arg#*=} + ;; + --shell=*) + mb_shell=${arg#*=} + ;; + --debug) + mb_debug='yes' + ;; + *) + error_msg ${arg#}: "unsupported config argument." + exit 2 + ;; + esac +done + + + +# three: defaults +common_defaults +native_defaults +cross_defaults + + + +# four: config +config_copy + + +# all done +exit 0 diff --git a/project/arch.mk b/project/arch.mk new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/project/arch.mk diff --git a/project/common.mk b/project/common.mk new file mode 100644 index 0000000..da67e9a --- /dev/null +++ b/project/common.mk @@ -0,0 +1,13 @@ +COMMON_SRCS = \ + src/main/pe_get_image_meta.c \ + src/main/pe_map_raw_image.c \ + src/reader/pe_read_import_header.c \ + src/reader/pe_read_export_header.c \ + src/reader/pe_read_dos_header.c \ + src/reader/pe_read_coff_header.c \ + src/reader/pe_read_section_header.c \ + src/reader/pe_read_optional_header.c \ + src/output/pe_output_export_symbols.c + +APP_SRCS = \ + src/main/perk.c diff --git a/project/defs.mk b/project/defs.mk new file mode 100644 index 0000000..b3be937 --- /dev/null +++ b/project/defs.mk @@ -0,0 +1,44 @@ +SHARED_LIB_DEPS ?= +SHARED_APP_DEPS ?= +STATIC_APP_DEPS ?= + +COMMON_LOBJS ?= $(COMMON_SRCS:.c=.lo) +COMMON_OBJS ?= $(COMMON_SRCS:.c=.o) + +ARCH_LOBJS ?= $(ARCH_SRCS:.c=.lo) +ARCH_OBJS ?= $(ARCH_SRCS:.c=.o) + +APP_LOBJS ?= $(APP_SRCS:.c=.lo) +APP_OBJS ?= $(APP_SRCS:.c=.o) + +SHARED_OBJS ?= $(COMMON_LOBJS) $(ARCH_LOBJS) +STATIC_OBJS ?= $(COMMON_OBJS) $(ARCH_OBJS) + +SHARED_LIB ?= $(LIB_DIR)/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_LIB_SUFFIX) +STATIC_LIB ?= $(LIB_DIR)/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_ARCHIVE_EXT) +SHARED_IMPLIB ?= $(LIB_DIR)/$(OS_LIB_PREFIX)$(PACKAGE)$(OS_IMPLIB_EXT) + +APP ?= $(BIN_DIR)/$(OS_APP_PREFIX)$(PACKAGE)$(OS_APP_SUFFIX) +DEFAULT_APP ?= $(BIN_DIR)/$(OS_APP_PREFIX)$(PACKAGE)-default$(OS_APP_SUFFIX) +SHARED_APP ?= $(BIN_DIR)/$(OS_APP_PREFIX)$(PACKAGE)-shared$(OS_APP_SUFFIX) +STATIC_APP ?= $(BIN_DIR)/$(OS_APP_PREFIX)$(PACKAGE)-static$(OS_APP_SUFFIX) + +CFLAGS ?= $(CFLAGS_DEBUG) $(CFLAGS_CONFIG) $(CFLAGS_SYSROOT) \ + $(CFLAGS_COMMON) $(CFLAGS_CMDLINE) $(CFLAGS_HOST) \ + $(CFLAGS_PATH) + +CFLAGS_SHARED ?= $(CFLAGS) $(CFLAGS_PIC) $(CFLAGS_SHARED_ATTR) +CFLAGS_STATIC ?= $(CFLAGS) $(CFLAGS_OBJ) $(CFLAGS_STATIC_ATTR) +CFLAGS_APP ?= $(CFLAGS) $(CFLAGS_OBJ) $(CFLAGS_APP_ATTR) + +LDFLAGS_SHARED ?= $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \ + $(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \ + $(LDFLAGS_PATH) $(SHARED_LIB_DEPS) $(LDFLAGS_LAST) + +LDFLAGS_APP ?= $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \ + $(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \ + $(LDFLAGS_PATH) $(SHARED_APP_DEPS) $(LDFLAGS_LAST) + +LDFLAGS_STATIC ?= $(LDFLAGS_DEBUG) $(LDFLAGS_CONFIG) $(LDFLAGS_SYSROOT) \ + $(LDFLAGS_COMMON) $(LDFLAGS_CMDLINE) $(LDFLAGS_HOST) \ + $(LDFLAGS_PATH) $(STATIC_APP_DEPS) $(LDFLAGS_LAST) diff --git a/project/depends.mk b/project/depends.mk new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/project/depends.mk diff --git a/project/extras.mk b/project/extras.mk new file mode 100644 index 0000000..15f26fb --- /dev/null +++ b/project/extras.mk @@ -0,0 +1,3 @@ +CFLAGS_SHARED_ATTR += -DPERK_PRE_ALPHA +CFLAGS_STATIC_ATTR += -DPERK_PRE_ALPHA +CFLAGS_APP_ATTR += -DPERK_APP diff --git a/project/headers.mk b/project/headers.mk new file mode 100644 index 0000000..9762424 --- /dev/null +++ b/project/headers.mk @@ -0,0 +1,12 @@ +API_HEADERS = \ + $(PROJECT_DIR)/include/$(PACKAGE)/perk.h \ + $(PROJECT_DIR)/include/$(PACKAGE)/perk_api.h \ + $(PROJECT_DIR)/include/$(PACKAGE)/perk_consts.h \ + $(PROJECT_DIR)/include/$(PACKAGE)/perk_meta.h \ + $(PROJECT_DIR)/include/$(PACKAGE)/perk_output.h \ + $(PROJECT_DIR)/include/$(PACKAGE)/perk_structs.h + +INTERNAL_HEADERS = \ + $(PROJECT_DIR)/src/internal/$(PACKAGE)_impl.h + +ALL_HEADERS = $(API_HEADERS) $(INTERNAL_HEADERS) diff --git a/project/overrides.mk b/project/overrides.mk new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/project/overrides.mk diff --git a/project/tree.mk b/project/tree.mk new file mode 100644 index 0000000..0c5a1cc --- /dev/null +++ b/project/tree.mk @@ -0,0 +1,7 @@ +tree.tag: + mkdir -p src + mkdir -p src/internal + mkdir -p src/main + mkdir -p src/output + mkdir -p src/reader + touch tree.tag diff --git a/sysinfo/host/i686-nt32-midipix.mk b/sysinfo/host/i686-nt32-midipix.mk new file mode 100644 index 0000000..6ddc80f --- /dev/null +++ b/sysinfo/host/i686-nt32-midipix.mk @@ -0,0 +1,4 @@ +include $(PROJECT_DIR)/sysinfo/os/midipix.mk + +HOST_BITS ?= 32 +HOST_UNDERSCORE ?= '_' diff --git a/sysinfo/host/i686-unknown-linux.mk b/sysinfo/host/i686-unknown-linux.mk new file mode 100644 index 0000000..6b3e3ee --- /dev/null +++ b/sysinfo/host/i686-unknown-linux.mk @@ -0,0 +1,4 @@ +include $(PROJECT_DIR)/sysinfo/os/linux.mk + +HOST_BITS ?= 32 +HOST_UNDERSCORE ?= '_' diff --git a/sysinfo/host/i686-w64-mingw32.mk b/sysinfo/host/i686-w64-mingw32.mk new file mode 100644 index 0000000..27fd5d1 --- /dev/null +++ b/sysinfo/host/i686-w64-mingw32.mk @@ -0,0 +1,4 @@ +include $(PROJECT_DIR)/sysinfo/os/mingw.mk + +HOST_BITS ?= 32 +HOST_UNDERSCORE ?= '_' diff --git a/sysinfo/host/native.mk b/sysinfo/host/native.mk new file mode 100644 index 0000000..b697893 --- /dev/null +++ b/sysinfo/host/native.mk @@ -0,0 +1,6 @@ +include $(PROJECT_DIR)/sysinfo/os/$(BUILD_OS).mk + +CC = $(BUILD_CC) +OS = $(BUILD_OS) +HOST_BITS = $(BUILD_OS_BITS) +HOST_UNDERSCORE = $(BUILD_OS_UNDERSCORE) diff --git a/sysinfo/host/x86_64-nt64-midipix.mk b/sysinfo/host/x86_64-nt64-midipix.mk new file mode 100644 index 0000000..159b63f --- /dev/null +++ b/sysinfo/host/x86_64-nt64-midipix.mk @@ -0,0 +1,4 @@ +include $(PROJECT_DIR)/sysinfo/os/midipix.mk + +HOST_BITS ?= 64 +HOST_UNDERSCORE ?= '' diff --git a/sysinfo/host/x86_64-unknown-linux.mk b/sysinfo/host/x86_64-unknown-linux.mk new file mode 100644 index 0000000..24974da --- /dev/null +++ b/sysinfo/host/x86_64-unknown-linux.mk @@ -0,0 +1,4 @@ +include $(PROJECT_DIR)/sysinfo/os/linux.mk + +HOST_BITS ?= 64 +HOST_UNDERSCORE ?= '' diff --git a/sysinfo/host/x86_64-w64-mingw32.mk b/sysinfo/host/x86_64-w64-mingw32.mk new file mode 100644 index 0000000..8bbed5d --- /dev/null +++ b/sysinfo/host/x86_64-w64-mingw32.mk @@ -0,0 +1,4 @@ +include $(PROJECT_DIR)/sysinfo/os/mingw.mk + +HOST_BITS ?= 64 +HOST_UNDERSCORE ?= '' diff --git a/sysinfo/os/bsd.mk b/sysinfo/os/bsd.mk new file mode 100644 index 0000000..ed6edbb --- /dev/null +++ b/sysinfo/os/bsd.mk @@ -0,0 +1,9 @@ +OS_APP_PREFIX ?= +OS_APP_SUFFIX ?= +OS_LIB_PREFIX ?= lib +OS_LIB_SUFFIX ?= .so +OS_IMPLIB_EXT ?= .invalid +OS_LIBDEF_EXT ?= .invalid +OS_ARCHIVE_EXT ?= .a + +.PHONY: $(SHARED_IMPLIB) diff --git a/sysinfo/os/linux.mk b/sysinfo/os/linux.mk new file mode 100644 index 0000000..ed6edbb --- /dev/null +++ b/sysinfo/os/linux.mk @@ -0,0 +1,9 @@ +OS_APP_PREFIX ?= +OS_APP_SUFFIX ?= +OS_LIB_PREFIX ?= lib +OS_LIB_SUFFIX ?= .so +OS_IMPLIB_EXT ?= .invalid +OS_LIBDEF_EXT ?= .invalid +OS_ARCHIVE_EXT ?= .a + +.PHONY: $(SHARED_IMPLIB) diff --git a/sysinfo/os/midipix.mk b/sysinfo/os/midipix.mk new file mode 100644 index 0000000..db23f2e --- /dev/null +++ b/sysinfo/os/midipix.mk @@ -0,0 +1,13 @@ +OS_APP_PREFIX ?= +OS_APP_SUFFIX ?= +OS_LIB_PREFIX ?= lib +OS_LIB_SUFFIX ?= .so +OS_IMPLIB_EXT ?= .lib.a +OS_LIBDEF_EXT ?= .so.def +OS_ARCHIVE_EXT ?= .a + +LDFLAGS_CONFIG += -mout-implib + +install-implib: shared-implib + mkdir -p $(DESTDIR)/./$(PREFIX)/./$(LIB_DIR) + cp $(SHARED_IMPLIB) $(DESTDIR)/./$(PREFIX)/./$(LIB_DIR) diff --git a/sysinfo/os/mingw.mk b/sysinfo/os/mingw.mk new file mode 100644 index 0000000..9350254 --- /dev/null +++ b/sysinfo/os/mingw.mk @@ -0,0 +1,14 @@ +OS_APP_PREFIX ?= +OS_APP_SUFFIX ?= .exe +OS_LIB_PREFIX ?= lib +OS_LIB_SUFFIX ?= .dll +OS_IMPLIB_EXT ?= .dll.a +OS_LIBDEF_EXT ?= .def +OS_ARCHIVE_EXT ?= .a + +CFLAGS_PIC = +LDFLAGS_CONFIG += -Wl,--mout-implib,$(SHARED_IMPLIB) + +install-implib: shared-implib + mkdir -p $(DESTDIR)/./$(PREFIX)/./$(LIB_DIR) + cp $(SHARED_IMPLIB) $(DESTDIR)/./$(PREFIX)/./$(LIB_DIR) diff --git a/sysinfo/toolchain/clang.mk b/sysinfo/toolchain/clang.mk new file mode 100644 index 0000000..3e7bda3 --- /dev/null +++ b/sysinfo/toolchain/clang.mk @@ -0,0 +1,34 @@ +ifeq ($(CROSS_COMPILE)x,x) + CROSS_HOST = + CROSS_HOST_SPEC = +else + CROSS_HOST = $(HOST) + CROSS_HOST_SPEC = --target=$(HOST) +endif + + +CC = clang $(CROSS_HOST_SPEC) +CPP = clang $(CROSS_HOST_SPEC) +CXX = clang++ $(CROSS_HOST_SPEC) + + +AS = $(CROSS_COMPILE)as +AR = $(CROSS_COMPILE)ar +LD = $(CROSS_COMPILE)ld +NM = $(CROSS_COMPILE)nm +OBJDUMP = $(CROSS_COMPILE)objdump +RANLIB = $(CROSS_COMPILE)ranlib +SIZE = $(CROSS_COMPILE)size +STRIP = $(CROSS_COMPILE)strip +STRINGS = $(CROSS_COMPILE)strings + + +ADDR2LINE = $(CROSS_COMPILE)addr2line +COV = $(CROSS_COMPILE)gcov +CXXFILT = $(CROSS_COMPILE)c++filt +ELFEDIT = $(CROSS_COMPILE)elfedit +OBJCOPY = $(CROSS_COMPILE)objcopy +READELF = $(CROSS_COMPILE)readelf + + +CFLAGS_PIC ?= -fPIC diff --git a/sysinfo/toolchain/gcc.mk b/sysinfo/toolchain/gcc.mk new file mode 100644 index 0000000..72ae0af --- /dev/null +++ b/sysinfo/toolchain/gcc.mk @@ -0,0 +1,25 @@ +CC = $(CROSS_COMPILE)gcc +CPP = $(CROSS_COMPILE)cpp +CXX = $(CROSS_COMPILE)c++ + + +AS = $(CROSS_COMPILE)as +AR = $(CROSS_COMPILE)ar +LD = $(CROSS_COMPILE)ld +NM = $(CROSS_COMPILE)nm +OBJDUMP = $(CROSS_COMPILE)objdump +RANLIB = $(CROSS_COMPILE)ranlib +SIZE = $(CROSS_COMPILE)size +STRIP = $(CROSS_COMPILE)strip +STRINGS = $(CROSS_COMPILE)strings + + +ADDR2LINE = $(CROSS_COMPILE)addr2line +COV = $(CROSS_COMPILE)gcov +CXXFILT = $(CROSS_COMPILE)c++filt +ELFEDIT = $(CROSS_COMPILE)elfedit +OBJCOPY = $(CROSS_COMPILE)objcopy +READELF = $(CROSS_COMPILE)readelf + + +CFLAGS_PIC ?= -fPIC |